<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è) > 嵌入式系統 > 設計應用 > ARM指令定址問(wèn)題

ARM指令定址問(wèn)題

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏
AREA BOOTCODE, CODE, READONLY

ENTRY
BootloAd
LDRr0, =0x00
LDRr1, =0x00
LDRr2, =0x00
LDRr3, =0x00
END

1)在A(yíng)RM程序里,如何指定指令在ROM中存放的位置(類(lèi)似單片機的ORG偽指令)
我想不管哪款ARM芯片,肯定都有上電復位地址,也就是上電后PC指向的位置。比如某款ARM芯片復位地址為0x00000000,復位后我希望執行的第一條指令是LDR R0, =0x00。那么在程序里我們怎么指定將該條指令放在ROM的0x00位置呢?

2)ENTRY偽指令的作用
ENTRY偽指令是程序的入口,一個(gè)程序只能有一個(gè)ENTRY,在生成ELF格式的IMAGE文件時(shí),它能夠告訴仿真器從哪條指令開(kāi)始執行程序,但是在生成BIN文件時(shí),它又有什么用呢??我們希望將ENTRY下面的那條指令燒錄到ARM芯片的上電復位地址處,每款芯片的復位地址都可能不同,ADS如何能通過(guò)ENTRY就知道實(shí)際芯片的復位地址在哪里?

3)ARMLINKER配置時(shí)RO BASE的作用
我在A(yíng)RMLINKER的配置頁(yè)里將RO BASE設置為0x3000,通過(guò)用AXD裝載生成的AXF文件仿真,觀(guān)察發(fā)現,LDRr0, =0x00這條指令被放在存儲器的0x3000位置,這似乎說(shuō)明通過(guò)設置RO BASE可以設置程序在ROM中的起始位置。但我看同時(shí)生成的BIN文件,只有16個(gè)字節,那如果用燒錄器燒芯片時(shí),燒錄器如何知道BIN文件的第一個(gè)字節要放在ROM的0x3000位置呢?(不通過(guò)填寫(xiě)燒錄軟件里的燒錄起始地址為0x3000)

本文引用地址:http://dyxdggzs.com/article/201611/316965.htm

VECTORS。S是在A(yíng)DS中設定的: vector.s中"section"=STARTUP為首運行。

類(lèi)似的。 復位后是中斷向量表。第一個(gè)是復位向量,在那里
放一個(gè)跳轉。(一般才幾個(gè)字節大小,只能放跳轉了)
跳轉到:
1。初始化的代碼處。InitStAck 初始化堆棧。。。
2。C 的 _MAIN 地址,運行 MAIN()

vector.s應該是自己寫(xiě)的ARM匯編,不是每個(gè)項目都會(huì )有vector.s文件的吧?
另外,就算在section指定了STARTUP為首運行,怎么將該條指令和硬件的復位地址對上呢?

是這樣的:
CODE32
AREAStArtup,CODE,READONLY

ENTRY
;//中斷向量表每個(gè)寬 4個(gè)字節。只能放一條32位的ARM指令。
Vectors;BASE+0
LDRPC, ResetAddr;復位的第一條。跳到標號;ResetAddr
LDRPC, UndefinedAddr ;32位的ARM指令。 BASE+1
LDRPC, SWI_Addr;32位的ARM指令。 BASE+2
LDRPC, PrefetchAddr
LDRPC, DAtAAbortAddr
DCD0xb9205f80
LDRPC,[PC, #-0xff0]
LDRPC,FIQ_Addr
...


ResetAddr:
BLInitStAck
B_MAIN
跳轉到:
1。初始化的代碼處。InitStAck 初始化堆棧。。。
2。C 的 _MAIN 地址,運行 MAIN()

假設我的工程中 vector.s是初始化文件。
其主要內容為:
CODE32
AREAStArtup,CODE,READONLY

ENTRY
;//中斷向量表每個(gè)寬 4個(gè)字節。只能放一條32位的ARM指令。
Vectors;BASE+0
LDRPC, ResetAddr;復位的第一條。跳到標號;ResetAddr
LDRPC, UndefinedAddr ;32位的ARM指令。 BASE+1
LDRPC, SWI_Addr;32位的ARM指令。 BASE+2
LDRPC, PrefetchAddr
LDRPC, DAtAAbortAddr
DCD0xb9205f80
LDRPC,[PC, #-0xff0]
LDRPC,FIQ_Addr
...


ResetAddr:
BLInitStAck
B_MAIN
;=======================================

所以需要在A(yíng)DS中設定
object/symbol: vector.o,"section"=STARTUP為首運行。
;=======================================

上電復位后,程序從entry處進(jìn)入。
則第一條指令就是:LDRPC, ResetAddr
那么PC指針跳轉到ReseAddr標號處。
你可以在這里實(shí)現初始化功能。

答6:
竟然不能重編輯。。。今晚剛看了44b0 的 bootloAder程序。
有不對的地方希望各位指正。


關(guān)鍵詞: ARM指令定址問(wèn)

評論


技術(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>