STM32F103因为栈空间过小导致的奇怪问题!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32F103因为栈空间过小导致的奇怪问题!相关的知识,希望对你有一定的参考价值。
今天在调试一个STM32的程序,之前程序一切运行正常。在修改某些数组后,突然程序不能正常工作了。
追踪问题发现问题是出现在一个数组中,利用一个函数的指针参数去修改一个数组的值。在程序内部的时候,指针的值一切正常。当在外部调用这个数组后,数组的值就发生了错乱。导致程序错误。函数类型如下所示:
1 #include<stdio.h> 2 3 #define u8 unsigned char 4 #define u16 unsigned int 5 6 u8 Num[20] = {0}; 7 8 9 int main() 10 { 11 u8 i = 0; 12 Func(Num); 13 14 printf("%d\n",Num[0]); 15 16 for(i=0; i<20; i++) 17 { 18 printf("%c\n",Num[i+1]); 19 } 20 21 getchar(); 22 23 } 24 25 void Func(u8* Array) 26 { 27 Array[0] = 11; 28 Array[1] = ‘1‘; 29 Array[2] = ‘2‘; 30 }
思考了很久,而且也在程序外面用别的编译器模拟发现都不会有问题。最后突然想到是自己改大了数组的空间,肯定是栈溢出了。回去修改STM32的启动文件,把其中的默认值0x400参数修改成0x800.满足当前需求结果一切正常了。
1 Stack_Size EQU 0x00000800
查找这个问题花了整整一天时间,想得头都要爆了。引以为戒。所以把问题记录一下,方便以大家在碰到问题的时候解决。碰到相似问题的时候一定要多想一想有没有可能是堆或栈溢出。
以上是关于STM32F103因为栈空间过小导致的奇怪问题!的主要内容,如果未能解决你的问题,请参考以下文章