版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
會計學(xué)1CM啟動代碼分析實用
嵌入式應(yīng)用系統(tǒng)中的存儲映射
在設(shè)計嵌入式應(yīng)用系統(tǒng)時,為了追求最好的性能價格比,系統(tǒng)中通常包括多種存儲器,如ROM、16位RAM、32位RAM和FLASH等,這樣一個重要的問題就是設(shè)計其存儲系統(tǒng)的布局。在RAM體系結(jié)構(gòu)中,系統(tǒng)復(fù)位后將跳轉(zhuǎn)到地址0x0處執(zhí)行,該處存放的是復(fù)位異常中斷的中斷向量。對于嵌入式系統(tǒng)來說,在系統(tǒng)復(fù)位時RAM中是不存在代碼和數(shù)據(jù)的。因此在系統(tǒng)復(fù)位時,地址0x0處應(yīng)該為ROM,即系統(tǒng)復(fù)位后應(yīng)該首先從ROM中開始執(zhí)行。
第1頁/共23頁
地址0x0處為ROM
這里所說的地址0x0處為ROM,是指在系統(tǒng)運行過程中,地址0x0處為ROM,對于嵌入式系統(tǒng)來說,在系統(tǒng)復(fù)位時地址0x0處總為ROM。這種情況非常簡單,在地址0x0處存放著復(fù)位異常中斷向量,根據(jù)此中斷向量,程序跳轉(zhuǎn)到相應(yīng)的位置進行系統(tǒng)初始化等操作。這種情況有一個缺點,通常相對于RAM來說,ROM的數(shù)據(jù)寬度較小,速度較慢,這會使系統(tǒng)響應(yīng)異常中斷的速度較慢,而且如果異常中斷向量表放在ROM中,則中斷向量表內(nèi)容不能修改。
第2頁/共23頁
地址0x0處為RAM
這里所說的地址0x0處為RAM,是指在系統(tǒng)運行過程中,地址0x0處為RAM,對于嵌入式系統(tǒng)來說,在系統(tǒng)復(fù)位時地址0x0處總為ROM。因此,對于地址0x0處為RAM的系統(tǒng),為了保證系統(tǒng)復(fù)位后從ROM中開始執(zhí)行,在系統(tǒng)復(fù)位時,系統(tǒng)中的存儲映射機構(gòu)將ROM映射到地址0x0處,然后在程序運行的最初幾條指令中,系統(tǒng)中的存儲映射機構(gòu)進行地址重映射,重新將RAM映射到地址0x0處。優(yōu)點:RAM的數(shù)據(jù)寬度較大,速度較快,這會使系統(tǒng)響應(yīng)異常中斷的速度更快。而且異常中斷向量表放在RAM中,程序在運行過程中可以修改中斷向量表內(nèi)容,使得系統(tǒng)更為靈活。
第3頁/共23頁系統(tǒng)初始化
系統(tǒng)運行環(huán)境初始化,包括異常中斷向量初始化、數(shù)據(jù)棧初始化以及IO初始化等。應(yīng)用程序初始化,例如C語言變量的初始化等。啟動代碼功能總結(jié):1)堆和棧的初始化;2)向量表定義;3)地址重映射及中斷向量表的轉(zhuǎn)移;4)設(shè)置系統(tǒng)時鐘頻率;5)中斷寄存器的初始化;6)進入C應(yīng)用程序。
第4頁/共23頁預(yù)備知識
√一個由C/C++編譯的程序占用的內(nèi)存分為以下幾個部分
:棧區(qū)(stack)—
編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。
堆區(qū)(heap)
—
一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時可能由OS回
收
。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類似于鏈表。
全局區(qū)(靜態(tài)區(qū))(static)—全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的
全局變量和靜態(tài)變量在一塊區(qū)域,
未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另
一塊區(qū)域。
程序結(jié)束后由系統(tǒng)釋放。
第5頁/共23頁預(yù)備知識
文字常量區(qū)
—常量字符串就是放在這里的。程序結(jié)束后由系統(tǒng)釋放
程序代碼區(qū)—存放函數(shù)體的二進制代碼。//main.cpp
int
a
=
0;
全局初始化區(qū)
char
*p1;
全局未初始化區(qū)
main()
{
int
b;
棧
char
s[]
=
“abc”;
棧
char
*p2;
棧
char
*p3
=
“123456”;
123456\0在常量區(qū),p3在棧上
第6頁/共23頁預(yù)備知識
static
int
c
=0;
全局(靜態(tài))初始化區(qū)
p1
=
(char
*)malloc(10);
p2
=
(char
*)malloc(20);
分配得來得10和20字節(jié)的區(qū)域就在堆區(qū)。
strcpy(p1,
"123456");
123456\0放在常量區(qū),編譯器可能會將它與p3所指向的"123456"
優(yōu)化成一個地方。
}
ENTRY:偽操作指定程序的人口點AREA:偽操作用于定義一個代碼段或者數(shù)據(jù)段DCD:用于分配一段字內(nèi)存單元
第7頁/共23頁代碼分析1
√棧的初始化:Stack_SizeEQU0x00000400AREASTACK,NOINIT,READWRITE,ALIGN=3Stack_MemSPACEStack_Size__initial_sp定義StackSize為0x00000400;
定義棧
,可初始化為0,8字節(jié)對齊分配0x00000400個連續(xù)字節(jié),并初始化為0匯編代碼地址標(biāo)號
第8頁/共23頁代碼分析2
√堆的初始化:Heap_SizeEQU0x00000400AREAHEAP,NOINIT,READWRITE,ALIGN=3__heap_baseHeap_MemSPACEHeap_Size__heap_limit定義HeapSize為0x00000400;
定義堆
,可初始化為0,8字節(jié)對齊分配0x00000400個連續(xù)字節(jié),并初始化為0匯編代碼地址標(biāo)號
第9頁/共23頁代碼分析3
PRESERVE8THUMB指定當(dāng)前文件堆棧8字節(jié)對齊告訴匯編器下面是32為的Thumb指令,如果需要匯編器將插入位以保證對齊
第10頁/共23頁代碼分析4
見STM3210XdatasheetV10C.pdf130頁;VectorTableMappedtoAddress0atReset
AREARESET,DATA,READONLY//定義復(fù)位向量段,只讀
EXPORT__Vectors
EXPORT__Vectors_EndEXPORT__Vectors_Size//定義一個可以在其他文件中使用的全局標(biāo)號,此處表示中斷地址__VectorsDCD__initial_sp;TopofStack//給__initial_sp分配4字節(jié)32位的地址0x0第11頁/共23頁代碼分析5
DCDReset_Handler;ResetHandler//
給標(biāo)號ResetHandler分配地址為0x00000004DCDNMI_Handler;NMIHandler//給標(biāo)號NMIHandler分配地址0x00000008
DCDHardFault_Handler;HardFaultHandlerDCDMemManage_Handler;MPUFaultHandlerDCDBusFault_Handler;BusFaultHandlerDCDUsageFault_Handler;UsageFaultHandlerDCD0;Reserved//這種形式就是保留地址,不給任何標(biāo)號分配
。。。。。。
第12頁/共23頁代碼分析6
DCDETH_WKUP_IRQHandler;EthernetWakeupthroughEXTIlineDCDCAN2_TX_IRQHandler;CAN2TXDCDCAN2_RX0_IRQHandler;CAN2RX0DCDCAN2_RX1_IRQHandler;CAN2RX1DCDCAN2_SCE_IRQHandler;CAN2SCEDCDOTG_FS_IRQHandler;USBOTGFS__Vectors_End__Vectors_SizeEQU__Vectors_End-__Vectors
第13頁/共23頁代碼分析7
√中斷向量表的轉(zhuǎn)移AREA|.text|,CODE,READONLY//代碼段定義;ResethandlerroutineReset_HandlerPROC//標(biāo)記一個函數(shù)的開始
EXPORTReset_Handler[WEAK]//【W(wǎng)EAK】選項表示當(dāng)所有的源文件都沒有定義一個標(biāo)號時,編譯器也不給出錯誤信息,在多數(shù)情況下將該標(biāo)號置為0,若該標(biāo)號為B或BL指令引用,則將B或BL指令置為NOP操作;//EXPORT提示編譯器標(biāo)號可以為外部文件引用;
第14頁/共23頁代碼分析8
IMPORT__main//通知編譯器要使用的標(biāo)號在其他文件
LDRR0,=__main//使用“=”表示LDR目前是偽指令不是標(biāo)準(zhǔn)指令,這里是把_main的地址給R0;BXR0//BX是ARM指令集和THUMB指令集之間的程序的跳轉(zhuǎn)
ENDP
第15頁/共23頁代碼分析9
;DummyExceptionHandlers(infiniteloopswhichcanbemodified)NMI_HandlerPROCEXPORTNMI_Handler[WEAK]B.ENDPHardFault_Handler\PROCEXPORTHardFault_Handler[WEAK]B.ENDP
第16頁/共23頁代碼分析10
MemManage_Handler\PROCEXPORTMemManage_Handler[WEAK]B.ENDP。。。。。。CAN2_SCE_IRQHandlerOTG_FS_IRQHandlerB.ENDPALIGN
第17頁/共23頁代碼分析11
√堆和棧的初始化;UserStackandHeapinitialization;**************************************************
IF:DEF:__MICROLIB//DEF:X就是說X定義了則為真,否則為假
EXPORT__initial_spEXPORT__heap_baseEXPORT__heap_limitELSEIMPORT__use_two_region_memoryEXPORT__user_initial_stackheap
第18頁/共23頁代碼分析12
√堆和棧的初始
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度高校與企業(yè)合作辦學(xué)項目合同3篇
- 二零二五年度特種車輛安裝與安全培訓(xùn)合同3篇
- 西安醫(yī)學(xué)高等??茖W(xué)?!渡虡I(yè)影片綜合案例制作》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五版1209兩人合伙經(jīng)營寵物美容與寄養(yǎng)中心協(xié)議3篇
- 二零二五年度珠寶首飾交易居間代理協(xié)議3篇
- 新疆機電職業(yè)技術(shù)學(xué)院《影視劇美術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 個體經(jīng)銷商專屬銷售授權(quán)協(xié)議(2024年度)版B版
- 通化師范學(xué)院《二維動畫技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024離婚債務(wù)分割詳細(xì)合同書版B版
- 二零二五版廚具設(shè)備售后服務(wù)與技術(shù)培訓(xùn)合同3篇
- 銀行會計主管年度工作總結(jié)2024(30篇)
- 教師招聘(教育理論基礎(chǔ))考試題庫(含答案)
- 2024年秋季學(xué)期學(xué)校辦公室工作總結(jié)
- 上海市12校2025屆高三第一次模擬考試英語試卷含解析
- 三年級數(shù)學(xué)(上)計算題專項練習(xí)附答案集錦
- 長亭送別完整版本
- 《鐵路軌道維護》課件-更換道岔尖軌作業(yè)
- 股份代持協(xié)議書簡版wps
- 職業(yè)學(xué)校視頻監(jiān)控存儲系統(tǒng)解決方案
- 《銷售心理學(xué)培訓(xùn)》課件
- 2024年安徽省公務(wù)員錄用考試《行測》真題及解析
評論
0/150
提交評論