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

  查找這個問題花了整整一天時間,想得頭都要爆了。引以為戒。所以把問題記錄一下,方便以大家在碰到問題的時候解決。碰到相似問題的時候一定要多想一想有沒有可能是堆或棧溢出。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM