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