stm32f4處理器啟動檔案(bootloader)
啟動檔案採用arm彙編程式設計。主要完成堆疊初始化、復位事件處理初始化、異常向量表的初始化等工作,並呼叫c庫__main函式進入基於c語言的主檔案中。
在復位後,cortex-m4處理器進入了執行緒模式、特權級,且使用主堆疊指標(msp)。
啟動檔案中輸入了多個全域性標號,即表示將會呼叫多個其他檔案中的程式端來完成啟動過程。
因此該啟動檔案僅能反映系統啟動時主要流程,不能夠體現其內部具體操作。
以下內容參考:
一、啟動檔案的作用是:
1.初始化堆疊指標sp;
2.初始化程式計數器指標pc;
3.設定堆、棧的大小;
4.設定異常向量表的入口位址;
5.配置外部sram作為資料儲存器(這個由使用者配置,一般的開發板可沒
有外部sram);
6.設定c庫的分支入口__main(最終用來呼叫main函式);
7.在3.5版的啟動檔案還呼叫了在system_stm32f10x.c檔案中的
systeminit()函式配置系統時鐘,在舊版本的工程中要使用者進入
main函式自己呼叫systeminit()函式。
至此可以總結一下stm32的啟動檔案和啟動過程。首先對棧和堆的大小進行定義,並在**區的起始處建立中斷向量表,其第乙個表項是棧頂位址,第二個表項是復位中斷服務入口位址。然後在復位中斷服務程式中跳轉??c/c++標準實時庫的__main函式,完成使用者堆疊等的初始化後,跳轉.c檔案中的main函式開始執行c程式。假設stm32被設定為從內部flash啟動(這也是最常見的一種情況),中斷向量表起始地位為0x8000000,則棧頂位址存放於0x8000000處,而復位中斷服務入口位址存放於0x8000004處。當stm32遇到復位訊號後,則從0x80000004處取出復位中斷服務入口位址,繼而執行復位中斷服務程式,然後跳轉__main函式,最後進入main函式,來到c的世界。
二、bootloader檔案的作用。
1、可以參考《嵌入式系統bootloader技術內幕》
bootloader 分為boot 和loader,更多的時候是針對於linux系統,windows系統裡的bios也是這個功能。就是boot 的功能是初始化堆疊、中斷向量表等引數,loader就是跳轉到main函式裡,載入使用者程式。從這個層面來理解的話,其實stm32的啟動檔案就相當於是乙個bootloader程式。
址開始寫入。此外stm32是基於cortex-m3核心的微控制器,其內部通過一張「中斷向量表」來響應中斷,程式啟動後,將首先從「中斷向量表」取出復位中斷向量執行復位中斷程式完成啟動,而這張「中斷向量表」的起始位址是0x08000004(0x8003000的程式中,中斷向量表的位址是0x8003000),當中斷來臨,stm32的內部硬體機制亦會自動將pc指標定位到「中斷向量表」處,並根據中斷源取出對應的中斷向量執行中斷服務程式。
在圖53.1.1中,stm32在復位後,先從0x08000004位址取出復位中斷向量的位址,並跳轉到復位中斷服務程式,如圖示號①所示;在復位中斷服務程式執行完之後,會跳轉到我們的main函式,如圖示號②所示;而我們的main函式一般都是乙個死迴圈,在main函式執行過程中,如果收到中斷請求(發生重中斷),此時stm32強制將pc指標指回中斷向量表處,如圖示號③所示;然後,根據中斷源進入相應的中斷服務程式,如圖示號④所示;在執行完中斷服務程式以後,程式再次返回main函式執行,如圖示號⑤所示。
STM32啟動檔案深度解析
stack size equ 0x00000400 定義棧空間大小為0x00000400,此語句等價於c define stack size 0x00000400 area stack,noinit,readwrite,align 3 定義棧,可讀寫,8位元組對齊 stack mem space s...
STM32啟動檔案深度解析
stack size equ 0x00000400 定義棧空間大小為0x00000400,此語句等價於c define stack size 0x00000400 area stack,noinit,readwrite,align 3 定義棧,可讀寫,8位元組對齊 stack mem space s...
STM32 啟動檔案
先來看看啟動 中的偽操作和偽指令 equ 用於定義常量,相當於c中的巨集定義 如stack size equ 0x00000400 define stack size 0x00000400 align 位元組對齊方式 align 3 export 相當於宣告了乙個全域性變數 export vecto...