<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于A(yíng)RM的嵌入式系統程序開(kāi)發(fā)要點(diǎn)

基于A(yíng)RM的嵌入式系統程序開(kāi)發(fā)要點(diǎn)

作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò ) 收藏


下面是一段實(shí)現上述步驟的例程:
-------------------------------------------------------------------------------------------------------
ENTRY
;啟動(dòng)時(shí),從 0 開(kāi)始,設法跳轉到“真”的ROM 地址(0x10000 開(kāi)始的空間里)
LDR pc, =start
;insert vector table here

Start ;Begin of Reset_Handler
; 進(jìn)行 remap設置
LDR r1, =Ctrl_reg ;假定控制 remap的寄存器
LDR r0, [r1]
ORR r0, r0, #Remap_bit ;假定對控制寄存器進(jìn)行 remap設置
STR r0, [r1]
;接下去可以進(jìn)行從 ROM 到 RAM 的代碼和數據拷貝
-------------------------------------------------------------------------------------------------------
除此之外,還有另外一種常見(jiàn)的remap方式,如下圖:


圖-6 存儲器重映射舉例 2

原來(lái) RAM 和 ROM 各有自己的地址, 進(jìn)行重映射以后 RAM 和 ROM 的地址都發(fā)生了變化,這種情況下,可以采用以下的方案:
(1) 上電后,從 0 地址的 ROM 開(kāi)始往下執行。
(2) 根據映射前的地址,對 RAM 進(jìn)行必要的代碼和數據拷貝。
(3) 拷貝完成后,進(jìn)行 remap操作。
(4) 因為 RAM 在 remap 前準備好了內容,使得 PC 指針能繼續在 RAM 里取到正確的指令。

不同的系統可能會(huì )有多種靈活的 remap方案,根據上面提到的兩個(gè)例子,可以總結出最根本的考慮是: 要使程序指針在 remap以后能繼續往下得到正確的指令。

5. 根據目標存儲器系統分散加載映像(scatterloading)

Scatterloading 文件是 ARM 的工具鏈里面的一個(gè)特性,作為程序編譯過(guò)程中給連接器使用的一個(gè)參數,用來(lái)指定最終生成的目標映像文件運行時(shí)的分布狀態(tài)。如果用戶(hù)程序映像只是如圖7 所示的最簡(jiǎn)狀態(tài),所有的可執行代碼都集合放置在一起,那么可以不使用 Scatterloading 文件,直接用連接器的命令行選項就能夠完成設置:
RO = 0x00000:表示映像的第一條指令開(kāi)始地址;
RW = 0x10000:表示變量區的起始地址,變量區一定要位于 RAM 區。


圖-7 簡(jiǎn)單的映像分布舉例

但是一個(gè)復雜的系統可能會(huì )把映像分割成幾個(gè)部分。如圖 8,系統中存在多種類(lèi)型的存儲器,不能的代碼部分根據執行性能優(yōu)化的考慮分布與不同的地方。


圖-8 復雜的映像分布舉例

這時(shí)候不能通過(guò)簡(jiǎn)單的 RO、RW 參數來(lái)完成實(shí)現上述配置,就要用到scatterloading 文件了。在 scatterloading文件里,可以給編譯出來(lái)的各個(gè)目標模塊指定運行地址,下面的例子是針對圖8 的。


評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>