2018.12.10 STM32關於儲存定義的變數的位置研究
阿新 • • 發佈:2018-12-10
一、寫此文的目的是之前我對儲存位置做了一個完成的實驗,而且有了完整的一套結果,但是現在想找那個結果的時候發現工程已經不見了,根據我當時的結論,以免後面忘記,先記錄一個思想和結論在此。如需驗證,後面在附上實驗結果。
1.首先搞清楚,STM32 RAM 不僅僅劃分為堆疊兩個空間,剩下的空間你想存啥應該都是可以的,最常用的一種用法便是儲存資料。
2.在定義變數時,我通常會有疑問,我寫的變數到底是存在FLASH,還是RAM的堆疊,還是RAM中。
3.由我做出來的實驗我總結出來,想要知道變數變數在什麼位置,可以從兩個思路入手,我暫時定義為此理論為變不變,回不回收原則。第一就是這個變數的值變不變,除了const修飾的變數,其他的變數值都是可變的,第二就是這個變數會不會自動回收。
4.舉例:
在main外部定義
int x1;//由變不變,回不回收理論可知,x1可變,不回收,所以x1定義在RAM中
static int x2 = 0;//由變不變,回不回收理論可知,x2可變,不回收,所以x2定義在RAM中
const int x3 = 3;//由變不變,回不回收理論可知,x3不變,不回收,所以x3定義在Flash中
在main內部定義
int x4;//由變不變,回不回收理論可知,x4可變,回收,所以x4定義在RAM的棧中
static int x5 = 0;//由變不變,回不回收理論可知,x5可變,不回收,所以x5定義在RAM中
const int x6 = 3;//由變不變,回不回收理論可知,x6不變,不回收,所以x6定義在Flash中