資料介紹
13.5 復位和初始化
任何運行在實際硬件上的嵌入式應用程序,都必須在啟動時實現一些基本的系統初始化。本節將對此予以詳細討論。
13.5.1 初始化序列
圖13.14顯示了一個適用于ARM嵌入式系統的初始化序列。

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

圖13.15 ROM/RAM重映射(1)
原來RAM和ROM各有自己的地址,進行重映射以后RAM和ROM的地址都發生了變化。這種情況下,可以采用以下方案。
① 上電后,從0x0地址的ROM開始往下執行。
② 根據映射前的地址,對RAM進行必要的代碼和數據拷貝。
③ 拷貝完后,進行remap操作。
④ 因為RAM在remap前準備好了內容,使得PC指針能繼續在RAM里取到正確的指令。
任何運行在實際硬件上的嵌入式應用程序,都必須在啟動時實現一些基本的系統初始化。本節將對此予以詳細討論。
13.5.1 初始化序列
圖13.14顯示了一個適用于ARM嵌入式系統的初始化序列。

圖13.14 ARM嵌入式系統的初始化序列
系統啟動時立即執行復位處理程序,然后進入$Sub$$main()的代碼執行。
復位處理程序是用匯編語言編寫的代碼塊,它在系統復位時執行,完成系統初始化操作。對于具有局部存儲器的內核,如Caches、緊密藕荷存儲器(TCM)、存儲管理單元(MMU)和存儲器保護單元(MPU)等,在初始化過程這一階段完成必要的配置。復位處理程序在執行之后,通常跳轉到__main以開始C庫的初始化序列。
13.5.2 向量表
所有的ARM系統都有一個向量表(vector table)。向量表不是初始化序列的一部分,但是對每個要處理的異常,它必須存在。這些地址通常包含以下形式的跳轉指令。
· B《address》:該條指令實現了相對于pc的跳轉
· LDR pc,[pc,offset]:這條指令將異常處理程序的入口地址從存儲器裝載到pc。該地址是一個32位的絕對地址。由于有額外的存儲器訪問,裝載跳轉地址會使分支跳轉到特定處理程序,給系統執行帶來延時。不過,可以使用這種方法跳轉到存儲空間內的任意地址。
· MOV pc,#immediate:將一個立即數復制到pc。使用該指令可以跨越整個地址空間,但是受到地址對齊問題的限制。這個地址必須由8位立即數循環右移偶數次得到。
另外,也可以在向量表中使用其他類型的指令。例如,FIQ處理程序可以從地址0x1c處開始執行。因為它位于向量表的最后,這樣FIQ處理程序就可以不用跳轉,立即從FIQ向量地址處開始執行。
下面的例子顯示了一個使用LDR指令的向量表裝載過程。
;**********************************
;* VECTOR TABLE *
;**********************************
AREA vectors, CODE
ENTRY
; 定義標準的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標識。該標識通知鏈接程序該代碼是一個可能的入口點,因而在鏈接時,不能被清除。
13.5.3 ROM/RAM重映射
啟動時,0x0處必須要有一條有效指令,因此,復位時0x0000地址必須為非易失性存儲器,如ROM或FLASH。

可以將ROM定位在0x0處。但是,這樣配置有幾個缺點。首先ROM存取速度通常較RAM要慢,當跳轉到異常處理程序時,系統性能可能會大受影響。其次,將向量表放于ROM中,運行時不能修改。
存儲器地址重映射(Memory Remap)是當前很多先進控制器所具有的功能。所謂地址重映射就是可以通過軟件配置來改變存儲器物理地址的一種機制或方法。
當一段程序對運行自己得存儲器進行重映射時,需要特別注意保證程序執行流程在重映射前后的承接關系。實現重映射的關鍵就是要使程序指針在remap以后能繼續往下得到正確的指令。本書中介紹兩種實現重映射的機制,不同的系統可能會有多種靈活的remap方案,用戶在具體實現時要具體分析。
1.先搬移后映射(Remap after Copy)
圖13.15顯示一種典型的存儲器地址重映射情況。

圖13.15 ROM/RAM重映射(1)
原來RAM和ROM各有自己的地址,進行重映射以后RAM和ROM的地址都發生了變化。這種情況下,可以采用以下方案。
① 上電后,從0x0地址的ROM開始往下執行。
② 根據映射前的地址,對RAM進行必要的代碼和數據拷貝。
③ 拷貝完后,進行remap操作。
④ 因為RAM在remap前準備好了內容,使得PC指針能繼續在RAM里取到正確的指令。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 嵌入式開發 ---必看圖書
- python做嵌入式開發_Python和嵌入式的區別是什么?可以做嵌入式開發嗎?
- 嵌入式開發
- 嵌入式開發資料免費分享
- 嵌入式開發(一):嵌入式開發新手入門
- 根據MATLAB中的偽隨機交織器產生的交織圖案初始化到ROM的實驗
- AI開發平臺如何幫助嵌入式開發者加速應用產品化落地 0次下載
- 嵌入式開發教程之SCPI命令參考的詳細資料說明 38次下載
- 如何快速熟練掌握嵌入式開發嵌入式開發工程師需要做哪些事情
- 如何使用ARM進行嵌入式系統設計詳細方法研究 9次下載
- 嵌入式開發要學什么嵌入式開發的一些入門教材推薦 27次下載
- 嵌入式開發Linux網絡編程培訓資料的詳細資料免費下載 34次下載
- 嵌入式開發中固件的詳細燒錄方式 14次下載
- 基于ARM的嵌入式開發
- 嵌入式開發圣經
- 嵌入式開發常見問題排查 382次閱讀
- STM32嵌入式開發中的RTOS,你用過哪些? 2248次閱讀
- 復位電路如何回到初始化的狀態 1324次閱讀
- 嵌入式開發中串口通訊方案 2436次閱讀
- 嵌入式開發的產品有哪些_嵌入式開發的流程 1.1w次閱讀
- 在Nios II平臺下搭建RTEMS嵌入式開發簡析 1589次閱讀
- 嵌入式開發好學嗎_嵌入式開發職業發展方向是什么 9207次閱讀
- 什么是嵌入式開發板_學嵌入式用什么開發板 7206次閱讀
- 嵌入式開發和單片機開發有什么區別和聯系 3.6w次閱讀
- 嵌入式C實現延時程序的不同變量的區別 幾種Linux嵌入式開發環境的簡單介紹 1673次閱讀
- 嵌入式開發工具有哪些_五款嵌入式開發工具推薦 4w次閱讀
- 學嵌入式開發入門_學嵌入式開發需要看哪些書籍 2.5w次閱讀
- 嵌入式開發環境的搭建 8548次閱讀
- 嵌入式開發就業前景分析_嵌入式領域的職業發展方向 1.8w次閱讀
- 嵌入式開發職業發展四大方向 1.2w次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關電源基礎知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統的設計與實現
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發板設計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論