axd调试利用scatter文件生成的程序问题

[复制链接]
4292|6
 楼主| luocolor 发表于 2007-3-13 16:50 | 显示全部楼层 |阅读模式
有一个简单的scatter文件,<br />LOAD&nbsp;0x0<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;JMAIN&nbsp;+0<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmain.o(jmain,+first)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;TEST&nbsp;0x200<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test.o<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(+RO,+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />jmain.s中只是一个跳转,<br />b&nbsp;main,<br />main在test.s中定义,test.s部分为:<br />main<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,=P4<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,#0x45<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r0]<br /><br /><br />在编译过后,AXD调试的时候disasseble有,<br />Reset_Go&nbsp;&nbsp;&nbsp;&nbsp;[0xea00007e]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;main<br />00000004&nbsp;&nbsp;&nbsp;&nbsp;[0xe59f0020]&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,0x0000002c&nbsp;;&nbsp;=&nbsp;#0xffff0094<br />00000008&nbsp;&nbsp;&nbsp;&nbsp;[0xe3a01045]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,#0x45<br />0000000c&nbsp;&nbsp;&nbsp;&nbsp;[0xe5801000]&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r0,#0]<br />......<br />main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0xe7ff0010]&nbsp;&nbsp;&nbsp;dci&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xe7ff0010&nbsp;;&nbsp;?&nbsp;undefined<br />00000204&nbsp;&nbsp;&nbsp;&nbsp;[0xe800e800]&nbsp;&nbsp;&nbsp;stmda&nbsp;&nbsp;&nbsp;&nbsp;r0,{r11,r13-pc}<br />00000208&nbsp;&nbsp;&nbsp;&nbsp;[0xe7ff0010]&nbsp;&nbsp;&nbsp;dci&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xe7ff0010&nbsp;;&nbsp;?&nbsp;undefined<br />0000020c&nbsp;&nbsp;&nbsp;&nbsp;[0xe800e800]&nbsp;&nbsp;&nbsp;stmda&nbsp;&nbsp;&nbsp;&nbsp;r0,{r11,r13-pc}<br />00000210&nbsp;&nbsp;&nbsp;&nbsp;[0xe7ff0010]&nbsp;&nbsp;&nbsp;dci&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xe7ff0010&nbsp;;&nbsp;?&nbsp;undefined<br /><br />F10,step的话,会跳转到main处,但这里却是没有定义的指令。很明显,test.s被放到了00000004的地方,<br /><br />这是不是就是下载时地址???????<br /><br />如果我对于下载时地址和运行时地址理解没有错的话,假设有一基于arm的硬件,我将程序down到0x0处,在运行的时候,<br />会通过编译器的某些内部操作,会把main后的指令,ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,=P4等放到0x100的地方,程序能正常运行。<br /><br />用AXD调试会出现未定义的错误,是因为axd没有对相关操作(比如修改下载时地址到运行时地址)的支持么??????
Swd21ic 发表于 2007-3-13 21:23 | 显示全部楼层

老兄~

别用AXD了.用IAR~~
 楼主| luocolor 发表于 2007-3-13 22:52 | 显示全部楼层

hehe

刚baidu了下IAR,......<br /><br />但是我的问题是因为AXD不支持么?<br /><br />有时间用用IAR看看
js_wawayu 发表于 2007-3-14 12:09 | 显示全部楼层

你的代码都没有经过搬移

  
 楼主| luocolor 发表于 2007-3-14 21:55 | 显示全部楼层

to js_wawayu

你说的是。<br />但我理解的运行时地址,是在程序具体运行的时候才起作用的。<br />不然,程序中的地址是在哪个时候改变成运行时地址的呢?<br /><br />这就是问题的关键,我不理解的地方,<br />期待指点。
js_wawayu 发表于 2007-3-15 12:04 | 显示全部楼层

是运行时才起作用

但是不可能凭空把你的test.o代码从装载地址搞到运行地址去,你可以自己搬过去
 楼主| luocolor 发表于 2007-3-15 17:02 | 显示全部楼层

to js_wawayu

我明白你的意思了!<br /><br />一般我们用ads写汇编调用c的一个程序,会在汇编的最后&nbsp;b&nbsp;__main;<br />在这个跳转之后,系统会做一些事,包括堆栈初始化、程序从加载时地址到运行时地址转移等,然后再跳到c的main运行。<br /><br />我的是简单的汇编程序,如果想要程序地址转移的话,就得自己写了。<br /><br />应该是这样吧!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

105

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部