資料介紹
13.5 復(fù)位和初始化
任何運(yùn)行在實(shí)際硬件上的嵌入式應(yīng)用程序,都必須在啟動(dòng)時(shí)實(shí)現(xiàn)一些基本的系統(tǒng)初始化。本節(jié)將對(duì)此予以詳細(xì)討論。
13.5.1 初始化序列
圖13.14顯示了一個(gè)適用于ARM嵌入式系統(tǒng)的初始化序列。

圖13.14 ARM嵌入式系統(tǒng)的初始化序列
系統(tǒng)啟動(dòng)時(shí)立即執(zhí)行復(fù)位處理程序,然后進(jìn)入$Sub$$main()的代碼執(zhí)行。
復(fù)位處理程序是用匯編語(yǔ)言編寫(xiě)的代碼塊,它在系統(tǒng)復(fù)位時(shí)執(zhí)行,完成系統(tǒng)初始化操作。對(duì)于具有局部存儲(chǔ)器的內(nèi)核,如Caches、緊密藕荷存儲(chǔ)器(TCM)、存儲(chǔ)管理單元(MMU)和存儲(chǔ)器保護(hù)單元(MPU)等,在初始化過(guò)程這一階段完成必要的配置。復(fù)位處理程序在執(zhí)行之后,通常跳轉(zhuǎn)到__main以開(kāi)始C庫(kù)的初始化序列。
13.5.2 向量表
所有的ARM系統(tǒng)都有一個(gè)向量表(vector table)。向量表不是初始化序列的一部分,但是對(duì)每個(gè)要處理的異常,它必須存在。這些地址通常包含以下形式的跳轉(zhuǎn)指令。
· B《address》:該條指令實(shí)現(xiàn)了相對(duì)于pc的跳轉(zhuǎn)
· LDR pc,[pc,offset]:這條指令將異常處理程序的入口地址從存儲(chǔ)器裝載到pc。該地址是一個(gè)32位的絕對(duì)地址。由于有額外的存儲(chǔ)器訪問(wèn),裝載跳轉(zhuǎn)地址會(huì)使分支跳轉(zhuǎn)到特定處理程序,給系統(tǒng)執(zhí)行帶來(lái)延時(shí)。不過(guò),可以使用這種方法跳轉(zhuǎn)到存儲(chǔ)空間內(nèi)的任意地址。
· MOV pc,#immediate:將一個(gè)立即數(shù)復(fù)制到pc。使用該指令可以跨越整個(gè)地址空間,但是受到地址對(duì)齊問(wèn)題的限制。這個(gè)地址必須由8位立即數(shù)循環(huán)右移偶數(shù)次得到。
另外,也可以在向量表中使用其他類(lèi)型的指令。例如,F(xiàn)IQ處理程序可以從地址0x1c處開(kāi)始執(zhí)行。因?yàn)樗挥谙蛄勘淼淖詈螅@樣FIQ處理程序就可以不用跳轉(zhuǎn),立即從FIQ向量地址處開(kāi)始執(zhí)行。
下面的例子顯示了一個(gè)使用LDR指令的向量表裝載過(guò)程。
;**********************************
;* VECTOR TABLE *
;**********************************
AREA vectors, CODE
ENTRY
; 定義標(biāo)準(zhǔn)的ARM向量表
INT_Vectors
LDR PC, INT_Reset_Addr
LDR PC, INT_Undef_Addr
LDR PC, INT_Software_Addr
LDR PC, INT_Prefetch_Addr
LDR PC, INT_Data_Addr
LDR PC, INT_Reserved_Addr
LDR PC, INT_IRQ_Addr
LDR PC, INT_FIQ_Addr
在向量表的入口處要有ENTRY標(biāo)識(shí)。該標(biāo)識(shí)通知鏈接程序該代碼是一個(gè)可能的入口點(diǎn),因而在鏈接時(shí),不能被清除。
13.5.3 ROM/RAM重映射
啟動(dòng)時(shí),0x0處必須要有一條有效指令,因此,復(fù)位時(shí)0x0000地址必須為非易失性存儲(chǔ)器,如ROM或FLASH。
注意有些系統(tǒng)是從0xffff0000處開(kāi)始執(zhí)行的,對(duì)于這樣的系統(tǒng),地址0xffff0000處必須為非易失性存儲(chǔ)器。
可以將ROM定位在0x0處。但是,這樣配置有幾個(gè)缺點(diǎn)。首先ROM存取速度通常較RAM要慢,當(dāng)跳轉(zhuǎn)到異常處理程序時(shí),系統(tǒng)性能可能會(huì)大受影響。其次,將向量表放于ROM中,運(yùn)行時(shí)不能修改。
存儲(chǔ)器地址重映射(Memory Remap)是當(dāng)前很多先進(jìn)控制器所具有的功能。所謂地址重映射就是可以通過(guò)軟件配置來(lái)改變存儲(chǔ)器物理地址的一種機(jī)制或方法。
當(dāng)一段程序?qū)\(yùn)行自己得存儲(chǔ)器進(jìn)行重映射時(shí),需要特別注意保證程序執(zhí)行流程在重映射前后的承接關(guān)系。實(shí)現(xiàn)重映射的關(guān)鍵就是要使程序指針在remap以后能繼續(xù)往下得到正確的指令。本書(shū)中介紹兩種實(shí)現(xiàn)重映射的機(jī)制,不同的系統(tǒng)可能會(huì)有多種靈活的remap方案,用戶在具體實(shí)現(xiàn)時(shí)要具體分析。
1.先搬移后映射(Remap after Copy)
圖13.15顯示一種典型的存儲(chǔ)器地址重映射情況。

圖13.15 ROM/RAM重映射(1)
原來(lái)RAM和ROM各有自己的地址,進(jìn)行重映射以后RAM和ROM的地址都發(fā)生了變化。這種情況下,可以采用以下方案。
?、?上電后,從0x0地址的ROM開(kāi)始往下執(zhí)行。
?、?根據(jù)映射前的地址,對(duì)RAM進(jìn)行必要的代碼和數(shù)據(jù)拷貝。
?、?拷貝完后,進(jìn)行remap操作。
④ 因?yàn)镽AM在remap前準(zhǔn)備好了內(nèi)容,使得PC指針能繼續(xù)在RAM里取到正確的指令。
任何運(yùn)行在實(shí)際硬件上的嵌入式應(yīng)用程序,都必須在啟動(dòng)時(shí)實(shí)現(xiàn)一些基本的系統(tǒng)初始化。本節(jié)將對(duì)此予以詳細(xì)討論。
13.5.1 初始化序列
圖13.14顯示了一個(gè)適用于ARM嵌入式系統(tǒng)的初始化序列。

圖13.14 ARM嵌入式系統(tǒng)的初始化序列
系統(tǒng)啟動(dòng)時(shí)立即執(zhí)行復(fù)位處理程序,然后進(jìn)入$Sub$$main()的代碼執(zhí)行。
復(fù)位處理程序是用匯編語(yǔ)言編寫(xiě)的代碼塊,它在系統(tǒng)復(fù)位時(shí)執(zhí)行,完成系統(tǒng)初始化操作。對(duì)于具有局部存儲(chǔ)器的內(nèi)核,如Caches、緊密藕荷存儲(chǔ)器(TCM)、存儲(chǔ)管理單元(MMU)和存儲(chǔ)器保護(hù)單元(MPU)等,在初始化過(guò)程這一階段完成必要的配置。復(fù)位處理程序在執(zhí)行之后,通常跳轉(zhuǎn)到__main以開(kāi)始C庫(kù)的初始化序列。
13.5.2 向量表
所有的ARM系統(tǒng)都有一個(gè)向量表(vector table)。向量表不是初始化序列的一部分,但是對(duì)每個(gè)要處理的異常,它必須存在。這些地址通常包含以下形式的跳轉(zhuǎn)指令。
· B《address》:該條指令實(shí)現(xiàn)了相對(duì)于pc的跳轉(zhuǎn)
· LDR pc,[pc,offset]:這條指令將異常處理程序的入口地址從存儲(chǔ)器裝載到pc。該地址是一個(gè)32位的絕對(duì)地址。由于有額外的存儲(chǔ)器訪問(wèn),裝載跳轉(zhuǎn)地址會(huì)使分支跳轉(zhuǎn)到特定處理程序,給系統(tǒng)執(zhí)行帶來(lái)延時(shí)。不過(guò),可以使用這種方法跳轉(zhuǎn)到存儲(chǔ)空間內(nèi)的任意地址。
· MOV pc,#immediate:將一個(gè)立即數(shù)復(fù)制到pc。使用該指令可以跨越整個(gè)地址空間,但是受到地址對(duì)齊問(wèn)題的限制。這個(gè)地址必須由8位立即數(shù)循環(huán)右移偶數(shù)次得到。
另外,也可以在向量表中使用其他類(lèi)型的指令。例如,F(xiàn)IQ處理程序可以從地址0x1c處開(kāi)始執(zhí)行。因?yàn)樗挥谙蛄勘淼淖詈螅@樣FIQ處理程序就可以不用跳轉(zhuǎn),立即從FIQ向量地址處開(kāi)始執(zhí)行。
下面的例子顯示了一個(gè)使用LDR指令的向量表裝載過(guò)程。
;**********************************
;* VECTOR TABLE *
;**********************************
AREA vectors, CODE
ENTRY
; 定義標(biāo)準(zhǔn)的ARM向量表
INT_Vectors
LDR PC, INT_Reset_Addr
LDR PC, INT_Undef_Addr
LDR PC, INT_Software_Addr
LDR PC, INT_Prefetch_Addr
LDR PC, INT_Data_Addr
LDR PC, INT_Reserved_Addr
LDR PC, INT_IRQ_Addr
LDR PC, INT_FIQ_Addr
在向量表的入口處要有ENTRY標(biāo)識(shí)。該標(biāo)識(shí)通知鏈接程序該代碼是一個(gè)可能的入口點(diǎn),因而在鏈接時(shí),不能被清除。
13.5.3 ROM/RAM重映射
啟動(dòng)時(shí),0x0處必須要有一條有效指令,因此,復(fù)位時(shí)0x0000地址必須為非易失性存儲(chǔ)器,如ROM或FLASH。
可以將ROM定位在0x0處。但是,這樣配置有幾個(gè)缺點(diǎn)。首先ROM存取速度通常較RAM要慢,當(dāng)跳轉(zhuǎn)到異常處理程序時(shí),系統(tǒng)性能可能會(huì)大受影響。其次,將向量表放于ROM中,運(yùn)行時(shí)不能修改。
存儲(chǔ)器地址重映射(Memory Remap)是當(dāng)前很多先進(jìn)控制器所具有的功能。所謂地址重映射就是可以通過(guò)軟件配置來(lái)改變存儲(chǔ)器物理地址的一種機(jī)制或方法。
當(dāng)一段程序?qū)\(yùn)行自己得存儲(chǔ)器進(jìn)行重映射時(shí),需要特別注意保證程序執(zhí)行流程在重映射前后的承接關(guān)系。實(shí)現(xiàn)重映射的關(guān)鍵就是要使程序指針在remap以后能繼續(xù)往下得到正確的指令。本書(shū)中介紹兩種實(shí)現(xiàn)重映射的機(jī)制,不同的系統(tǒng)可能會(huì)有多種靈活的remap方案,用戶在具體實(shí)現(xiàn)時(shí)要具體分析。
1.先搬移后映射(Remap after Copy)
圖13.15顯示一種典型的存儲(chǔ)器地址重映射情況。

圖13.15 ROM/RAM重映射(1)
原來(lái)RAM和ROM各有自己的地址,進(jìn)行重映射以后RAM和ROM的地址都發(fā)生了變化。這種情況下,可以采用以下方案。
?、?上電后,從0x0地址的ROM開(kāi)始往下執(zhí)行。
?、?根據(jù)映射前的地址,對(duì)RAM進(jìn)行必要的代碼和數(shù)據(jù)拷貝。
?、?拷貝完后,進(jìn)行remap操作。
④ 因?yàn)镽AM在remap前準(zhǔn)備好了內(nèi)容,使得PC指針能繼續(xù)在RAM里取到正確的指令。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 嵌入式開(kāi)發(fā) ---必看圖書(shū)
- 嵌入式開(kāi)發(fā)培訓(xùn)學(xué)什么?嵌入式開(kāi)發(fā)板知識(shí)講解
- python做嵌入式開(kāi)發(fā)_Python和嵌入式的區(qū)別是什么?可以做嵌入式開(kāi)發(fā)嗎?
- 嵌入式開(kāi)發(fā)
- 嵌入式開(kāi)發(fā)資料免費(fèi)分享
- 嵌入式開(kāi)發(fā)(一):嵌入式開(kāi)發(fā)新手入門(mén)
- 根據(jù)MATLAB中的偽隨機(jī)交織器產(chǎn)生的交織圖案初始化到ROM的實(shí)驗(yàn)
- AI開(kāi)發(fā)平臺(tái)如何幫助嵌入式開(kāi)發(fā)者加速應(yīng)用產(chǎn)品化落地 0次下載
- 嵌入式開(kāi)發(fā)教程之SCPI命令參考的詳細(xì)資料說(shuō)明 38次下載
- 如何快速熟練掌握嵌入式開(kāi)發(fā)嵌入式開(kāi)發(fā)工程師需要做哪些事情
- 如何使用ARM進(jìn)行嵌入式系統(tǒng)設(shè)計(jì)詳細(xì)方法研究 9次下載
- 嵌入式開(kāi)發(fā)要學(xué)什么嵌入式開(kāi)發(fā)的一些入門(mén)教材推薦 33次下載
- 嵌入式開(kāi)發(fā)中固件的詳細(xì)燒錄方式 14次下載
- 基于ARM的嵌入式開(kāi)發(fā)
- 嵌入式開(kāi)發(fā)圣經(jīng)
- 嵌入式開(kāi)發(fā)常見(jiàn)問(wèn)題排查 1.3k次閱讀
- STM32嵌入式開(kāi)發(fā)中的RTOS,你用過(guò)哪些? 3.6k次閱讀
- 復(fù)位電路如何回到初始化的狀態(tài) 2k次閱讀
- 嵌入式開(kāi)發(fā)中串口通訊方案 3.1k次閱讀
- 嵌入式開(kāi)發(fā)的產(chǎn)品有哪些_嵌入式開(kāi)發(fā)的流程 1.2w次閱讀
- 在Nios II平臺(tái)下搭建RTEMS嵌入式開(kāi)發(fā)簡(jiǎn)析 1.8k次閱讀
- 嵌入式開(kāi)發(fā)好學(xué)嗎_嵌入式開(kāi)發(fā)職業(yè)發(fā)展方向是什么 1w次閱讀
- 什么是嵌入式開(kāi)發(fā)板_學(xué)嵌入式用什么開(kāi)發(fā)板 7.7k次閱讀
- 嵌入式開(kāi)發(fā)和單片機(jī)開(kāi)發(fā)有什么區(qū)別和聯(lián)系 3.7w次閱讀
- 嵌入式C實(shí)現(xiàn)延時(shí)程序的不同變量的區(qū)別 幾種Linux嵌入式開(kāi)發(fā)環(huán)境的簡(jiǎn)單介紹 2.2k次閱讀
- 嵌入式開(kāi)發(fā)工具有哪些_五款嵌入式開(kāi)發(fā)工具推薦 4.2w次閱讀
- 學(xué)嵌入式開(kāi)發(fā)入門(mén)_學(xué)嵌入式開(kāi)發(fā)需要看哪些書(shū)籍 3.9w次閱讀
- 嵌入式開(kāi)發(fā)環(huán)境的搭建 9.1k次閱讀
- 嵌入式開(kāi)發(fā)就業(yè)前景分析_嵌入式領(lǐng)域的職業(yè)發(fā)展方向 2w次閱讀
- 嵌入式開(kāi)發(fā)職業(yè)發(fā)展四大方向 1.3w次閱讀
下載排行
本周
- 1冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 4次下載 | 10 積分
- 2安川A1000變頻器中文版說(shuō)明書(shū)
- 20.16 MB | 3次下載 | 3 積分
- 3直流電路的組成和基本定律
- 1.67 MB | 2次下載 | 免費(fèi)
- 4丹佛斯2800系列變頻器說(shuō)明書(shū)
- 8.00 MB | 1次下載 | 5 積分
- 5PC8011同步開(kāi)關(guān)型降壓3.5A單節(jié)鋰電池充電管理電路技術(shù)手冊(cè)
- 0.74 MB | 1次下載 | 免費(fèi)
- 6ES7243E+ES8311音頻錄制與播放電路資料
- 0.06 MB | 1次下載 | 5 積分
- 7SDM02 激光測(cè)距模塊產(chǎn)品手冊(cè)
- 0.43 MB | 1次下載 | 免費(fèi)
- 8SDFM 激光測(cè)距模塊模組手冊(cè)
- 0.54 MB | 1次下載 | 免費(fèi)
本月
- 1CH341編程器軟件NeoProgrammer_2.2.0.10
- 20.47 MB | 170次下載 | 1 積分
- 22025智能家居傳感器市場(chǎng)分析及創(chuàng)新應(yīng)用
- 3.11 MB | 43次下載 | 免費(fèi)
- 3RV1126B系列開(kāi)發(fā)板產(chǎn)品資料
- 4.19 MB | 18次下載 | 免費(fèi)
- 4CH341編程軟件下載
- 2.50 MB | 16次下載 | 5 積分
- 5全志系列-米爾基于T153核心板開(kāi)發(fā)板 四核異構(gòu)、3路千兆網(wǎng),賦能多元化工業(yè)場(chǎng)景
- 3.05 MB | 12次下載 | 免費(fèi)
- 6【開(kāi)源】60余套STM32單片機(jī)、嵌入式Linux、物聯(lián)網(wǎng)、人工智能項(xiàng)目案例及入門(mén)學(xué)習(xí)資源包
- 10.55 MB | 8次下載 | 免費(fèi)
- 7冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 4次下載 | 10 積分
- 8特斯拉MODEL S車(chē)載充電機(jī)主電路回路原理圖
- 0.81 MB | 4次下載 | 3 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233094次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191448次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183356次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81604次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73824次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問(wèn)
發(fā)資料
發(fā)視頻
上傳資料賺積分
評(píng)論