Keil 调试例程发现问题,请高手释疑

[复制链接]
 楼主| leohsiung 发表于 2010-10-28 19:51 | 显示全部楼层 |阅读模式
程序如下
  1. AREA BlockCopy, CODE, READONLY
  2. ENTRY
  3. start
  4. num EQU 0x14
  5. LDR R0,=src
  6. LDR R1,=dst
  7. MOV R2,#num
  8. MOV R13,#0x400
  9. blockcopy MOVS R3,R2,LSR #0x03
  10. BEQ copywords
  11. STMFD SP!,{R4-R11}
  12. octcopy LDMIA R0!,{R4-R11}
  13. STMIA R1!,{R4-R11}
  14. SUBS R3,R3,#0x01
  15. BNE octcopy
  16. LDMFD SP!,{R4-R11}
  17. copywords ANDS R2,R2,#0x07
  18. BEQ stop
  19. wordcopy LDR R3,[R0],#0x04
  20. STR R3,[R1],#0x04
  21. SUBS R2,R2,#0x01
  22. BNE wordcopy
  23. stop MOV R0,#0x18
  24. LDR R1,=0x20025
  25. SWI 0x123456
  26. AREA BlockData, DATA, READWRITE
  27. src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4
  28. dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  29. END

在Debug模式下的Memory Window中发现,最后定义的数据段是紧接着代码段的。但是在Options for Target 的linker选卡中代码段的基址是0x00000000,而数据段的基址是0x40000000。按理定义的数据段应该在0x40000000后才对啊???
xinzha 发表于 2010-10-28 20:26 | 显示全部楼层
源代码中位置相近并不代表目标代码中也要相近。
 楼主| leohsiung 发表于 2010-10-28 22:05 | 显示全部楼层
2# xinzha
我的问题是在linker选卡中定义了代码段的基址是0x00000000,数据段的基址是0x40000000,那么在源代码中定义的代码段的起始地址就应该是0x00000000,这个没错,同理定义的数据段起始地址应该是0x40000000,但在Debug时从内存观察窗口中看到定义的数据段是紧接着代码段而不是从数据段起始地址应该是0x40000000开始的
xinzha 发表于 2010-10-29 16:04 | 显示全部楼层
按照道理来说不会,有没有可能是配置文件没有起作用,就是说选择了简单编译连接模式?
 楼主| leohsiung 发表于 2010-10-29 21:41 | 显示全部楼层
就是默认的设置啊,哪里可以设置编译链接模式啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

11

帖子

0

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