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因为栈空间过小导致的奇怪问题!的主要内容,如果未能解决你的问题,请参考以下文章

i2c 传输,stm32f103 作为 Master,STOP 条件生成问题

STM32的堆与栈与编译信息查看

stm32F103RCT6概括

问题编程和运行STM32F103C8

STM32F103单片机解密资料

STM32F103制作FlashDriver