資源描述:
《《啟動代碼分析》PPT課件》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、Cortex-M3啟動代碼分析目標掌握嵌入式應用程序設計的基本知識掌握starup_stm32f10x_cl.s中常見匯編指令能分析starup_stm32f10x_cl.s啟動代碼嵌入式應用系統(tǒng)中的存儲映射在設計嵌入式應用系統(tǒng)時,為了追求最好的性能價格比,系統(tǒng)中通常包括多種存儲器,如ROM、16位RAM、32位RAM和FLASH等,這樣一個重要的問題就是設計其存儲系統(tǒng)的布局。在RAM體系結構中,系統(tǒng)復位后將跳轉到地址0x0處執(zhí)行,該處存放的是復位異常中斷的中斷向量。對于嵌入式系統(tǒng)來說,在系統(tǒng)復位時RAM中是不存在代碼和數(shù)據(jù)的。因此
2、在系統(tǒng)復位時,地址0x0處應該為ROM,即系統(tǒng)復位后應該首先從ROM中開始執(zhí)行。地址0x0處為ROM這里所說的地址0x0處為ROM,是指在系統(tǒng)運行過程中,地址0x0處為ROM,對于嵌入式系統(tǒng)來說,在系統(tǒng)復位時地址0x0處總為ROM。這種情況非常簡單,在地址0x0處存放著復位異常中斷向量,根據(jù)此中斷向量,程序跳轉到相應的位置進行系統(tǒng)初始化等操作。這種情況有一個缺點,通常相對于RAM來說,ROM的數(shù)據(jù)寬度較小,速度較慢,這會使系統(tǒng)響應異常中斷的速度較慢,而且如果異常中斷向量表放在ROM中,則中斷向量表內容不能修改。地址0x0處為RAM這
3、里所說的地址0x0處為RAM,是指在系統(tǒng)運行過程中,地址0x0處為RAM,對于嵌入式系統(tǒng)來說,在系統(tǒng)復位時地址0x0處總為ROM。因此,對于地址0x0處為RAM的系統(tǒng),為了保證系統(tǒng)復位后從ROM中開始執(zhí)行,在系統(tǒng)復位時,系統(tǒng)中的存儲映射機構將ROM映射到地址0x0處,然后在程序運行的最初幾條指令中,系統(tǒng)中的存儲映射機構進行地址重映射,重新將RAM映射到地址0x0處。優(yōu)點:RAM的數(shù)據(jù)寬度較大,速度較快,這會使系統(tǒng)響應異常中斷的速度更快。而且異常中斷向量表放在RAM中,程序在運行過程中可以修改中斷向量表內容,使得系統(tǒng)更為靈活。系統(tǒng)初始
4、化系統(tǒng)運行環(huán)境初始化,包括異常中斷向量初始化、數(shù)據(jù)棧初始化以及IO初始化等。應用程序初始化,例如C語言變量的初始化等。啟動代碼功能總結:1)堆和棧的初始化;2)向量表定義;3)地址重映射及中斷向量表的轉移;4)設置系統(tǒng)時鐘頻率;5)中斷寄存器的初始化;6)進入C應用程序。預備知識√一個由C/C++編譯的程序占用的內存分為以下幾個部分?:棧區(qū)(stack)—編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。操作方式類似于數(shù)據(jù)結構中的棧。堆區(qū)(heap)—一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回?收??。注意它與
5、數(shù)據(jù)結構中的堆是兩回事,分配方式倒是類似于鏈表。全局區(qū)(靜態(tài)區(qū))(static)—全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的?全局變量和靜態(tài)變量在一塊區(qū)域,??未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另?一塊區(qū)域。程序結束后由系統(tǒng)釋放。預備知識文字常量區(qū)—常量字符串就是放在這里的。程序結束后由系統(tǒng)釋放程序代碼區(qū)—存放函數(shù)體的二進制代碼。//main.cpp????int??a??=??0;全局初始化區(qū)char??*p1;全局未初始化區(qū)main()????{????int??b;棧char??s[]??=??“abc”
6、;棧char??*p2;棧char??*p3??=??“123456”;??123456