有一个简单的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没有对相关操作(比如修改下载时地址到运行时地址)的支持么?????? |