三、總結
這三種模式請看下列圖示
三個不同作用的空間在微控制器裡面佔了三個空間,微控制器引導哪個空間資源啟動,由boot1和boot0決定!
正常來說一般是從flash啟動!!!
啟動的程式是在sram上執行!!有乙個很關鍵資料結構的知識點,執行時sram會分成以下四個部分:常量區,堆,棧,靜態儲存區!
例如:
#include int a=0; //全域性初始化區
char *p1; //全域性未初始化區
void main()
stm32未上電時,資料是存flash裡面的,上電後,sram開始接收到資料工作,那麼微控制器做了什麼工作呢?實際上stm32的啟動過程就是給微控制器的資源設定初始化的過程!等同於:stm32的啟動過程等於給微控制器的暫存器賦值過程關鍵的暫存器就是可以在sram裡面設定堆、棧的暫存器
pc暫存器(程式計數)和sp暫存器(堆疊指標)
在啟動**裡面可以看到
微控制器啟動會先設定棧的空間600位元組和堆的空間200位元組,也就是設定堆疊指標到響應的位址
其響應的位址是在鍊錶檔案配置
即是:堆和棧設定位址為0x20000000,堆是向上找空間,棧是向下找空間!
實際上,依據map的位址分配
它應該還會先設定靜態儲存器,再設定堆和棧!
所以棧的位址為0x20000658
而我理解的r/o就是read only,即是為文字常量區!
接著就是設定中斷向量表,分為:異常向量表和外部中斷向量表
(若程式異常則會先繼續執行異常狀態)
接著就執行_mian
正式進入main迴圈,執行時鐘分配,外設初始化等工作!
stm32啟動過程:
彙編檔案:
設定sp暫存器,即使設定指向堆疊的位址的指標;
設定pc暫存器,即使設定程式計數器;
設定中斷向量表;
時鐘初始化,也會在彙編檔案裡面啟動sysinit
c檔案正常執行:
main中的時鐘初始化
外設初始化
loop()工作
STM32的啟動過程
當執行main函式的時候,晶元不是直接執行main函式的,還有乙個啟動的過程 m3的啟動方式由boot0和boot1選擇,可以有三種啟動方式 最常用的應該是第一種,就是將程式儲存在片內的flash上,掉電後程式不會消失。boot引腳的設定不同,晶元復位後起始位址就不同,選擇從flash啟動的時候,其...
STM32 啟動過程簡述
根據啟動模式分析的結論 1 通過boot引腳設定可以將中斷向量表定位於sram區,即起始位址為0x02000000,同時復位後pc指標位於0x02000000處 2 通過boot引腳設定可以將中斷向量表定位於flash區,即起始位址為0x08000000,同時復位後pc指標位於0x08000000處...
STM32啟動過程分析
硬體 stm32f1系列 軟體環境 keil 4.54 注 本文中提到的rtos以rt thread為例,不涵蓋所有rtos的情況 在keil mdk中新建工程時會根據所選的device自動生成啟動 檔案startup.s,該檔案的作用可根據其頭部的注釋看出 this module performs...