打印

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

[复制链接]
3381|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
luocolor|  楼主 | 2007-3-13 16:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有一个简单的scatter文件,
LOAD 0x0
{
    JMAIN +0
    {
        jmain.o(jmain,+first)
    }
    TEST 0x200
    {
        test.o
        *(+RO,+RW,+ZI)
    }
}
jmain.s中只是一个跳转,
b main,
main在test.s中定义,test.s部分为:
main
    ldr        r0,=P4
    mov        r1,#0x45
    str        r1,[r0]


在编译过后,AXD调试的时候disasseble有,
Reset_Go    [0xea00007e]   b        main
00000004    [0xe59f0020]   ldr      r0,0x0000002c ; = #0xffff0094
00000008    [0xe3a01045]   mov      r1,#0x45
0000000c    [0xe5801000]   str      r1,[r0,#0]
......
main        [0xe7ff0010]   dci      0xe7ff0010 ; ? undefined
00000204    [0xe800e800]   stmda    r0,{r11,r13-pc}
00000208    [0xe7ff0010]   dci      0xe7ff0010 ; ? undefined
0000020c    [0xe800e800]   stmda    r0,{r11,r13-pc}
00000210    [0xe7ff0010]   dci      0xe7ff0010 ; ? undefined

F10,step的话,会跳转到main处,但这里却是没有定义的指令。很明显,test.s被放到了00000004的地方,

这是不是就是下载时地址???????

如果我对于下载时地址和运行时地址理解没有错的话,假设有一基于arm的硬件,我将程序down到0x0处,在运行的时候,
会通过编译器的某些内部操作,会把main后的指令,ldr    r0,=P4等放到0x100的地方,程序能正常运行。

用AXD调试会出现未定义的错误,是因为axd没有对相关操作(比如修改下载时地址到运行时地址)的支持么??????

相关帖子

沙发
Swd21ic| | 2007-3-13 21:23 | 只看该作者

老兄~

别用AXD了.用IAR~~

使用特权

评论回复
板凳
luocolor|  楼主 | 2007-3-13 22:52 | 只看该作者

hehe

刚baidu了下IAR,......

但是我的问题是因为AXD不支持么?

有时间用用IAR看看

使用特权

评论回复
地板
js_wawayu| | 2007-3-14 12:09 | 只看该作者

你的代码都没有经过搬移

使用特权

评论回复
5
luocolor|  楼主 | 2007-3-14 21:55 | 只看该作者

to js_wawayu

你说的是。
但我理解的运行时地址,是在程序具体运行的时候才起作用的。
不然,程序中的地址是在哪个时候改变成运行时地址的呢?

这就是问题的关键,我不理解的地方,
期待指点。

使用特权

评论回复
6
js_wawayu| | 2007-3-15 12:04 | 只看该作者

是运行时才起作用

但是不可能凭空把你的test.o代码从装载地址搞到运行地址去,你可以自己搬过去

使用特权

评论回复
7
luocolor|  楼主 | 2007-3-15 17:02 | 只看该作者

to js_wawayu

我明白你的意思了!

一般我们用ads写汇编调用c的一个程序,会在汇编的最后 b __main;
在这个跳转之后,系统会做一些事,包括堆栈初始化、程序从加载时地址到运行时地址转移等,然后再跳到c的main运行。

我的是简单的汇编程序,如果想要程序地址转移的话,就得自己写了。

应该是这样吧!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

105

帖子

0

粉丝