您的位置 首页 开关

ARM指令定址问题

AREABOOTCODE,CODE,READONLYENTRYBootloAdLDRr0,=0x00LDRr1,=0x00LDRr2,=0x00LDRr3,=0x00END1)在ARM程序里,如何指定

AREA BOOTCODE, CODE, READONLY

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

1)在ARM程序里,怎样指定指令在ROM中寄存的方位(相似单片机的ORG伪指令)
我想不论哪款ARM芯片,必定都有上电复位地址,也便是上电后PC指向的方位。比方某款ARM芯片复位地址为0x00000000,复位后我期望履行的第一条指令是LDR R0, =0x00。那么在程序里咱们怎样指定将该条指令放在ROM的0x00方位呢?

2)ENTRY伪指令的效果
ENTRY伪指令是程序的进口,一个程序只能有一个ENTRY,在生成ELF格局的IMAGE文件时,它能够告知仿真器从哪条指令开端履行程序,但是在生成BIN文件时,它又有什么用呢??咱们期望将ENTRY下面的那条指令烧录到ARM芯片的上电复位地址处,每款芯片的复位地址都可能不同,ADS怎样能经过ENTRY就知道实践芯片的复位地址在哪里?

3)ARMLINKER装备时RO BASE的效果
我在ARMLINKER的装备页里将RO BASE设置为0x3000,经过用AXD装载生成的AXF文件仿真,调查发现,LDRr0, =0x00这条指令被放在存储器的0x3000方位,这好像阐明经过设置RO BASE能够设置程序在ROM中的开始方位。但我看一起生成的BIN文件,只要16个字节,那假如用烧录器烧芯片时,烧录器怎样知道BIN文件的第一个字节要放在ROM的0x3000方位呢?(不经过填写烧录软件里的烧录开始地址为0x3000)

VECTORS。S是在ADS中设定的: vector.s中”section”=STARTUP为首运转。

相似的。 复位后是中断向量表。第一个是复位向量,在那里
放一个跳转。(一般才几个字节巨细,只能放跳转了)
跳转到:
1。初始化的代码处。InitStAck 初始化仓库。。。
2。C 的 _MAIN 地址,运转 MAIN()

vector.s应该是自己写的ARM汇编,不是每个项目都会有vector.s文件的吧?
别的,就算在section指定了STARTUP为首运转,怎样将该条指令和硬件的复位地址对上呢?

是这样的:
CODE32
AREAStArtup,CODE,READONLY

ENTRY
;//中断向量表每个宽 4个字节。只能放一条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
;//中断向量表每个宽 4个字节。只能放一条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
;=======================================

所以需要在ADS中设定
object/symbol: vector.o,”section”=STARTUP为首运转。
;=======================================

上电复位后,程序从entry处进入。
则第一条指令便是:LDRPC, ResetAddr
那么PC指针跳转到ReseAddr标号处。
你能够在这里完成初始化功用。

答6:
居然不能重修改。。。今晚刚看了44b0 的 bootloAder程序。
有不对的当地期望各位纠正。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/275069.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部