打印

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

[复制链接]
1178|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
leohsiung|  楼主 | 2010-10-28 19:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序如下
AREA BlockCopy, CODE, READONLY
ENTRY
start
num EQU 0x14
LDR R0,=src
LDR R1,=dst
MOV R2,#num
MOV R13,#0x400
blockcopy MOVS R3,R2,LSR #0x03
BEQ copywords
STMFD SP!,{R4-R11}
octcopy LDMIA R0!,{R4-R11}
STMIA R1!,{R4-R11}
SUBS R3,R3,#0x01
BNE octcopy
LDMFD SP!,{R4-R11}
copywords ANDS R2,R2,#0x07
BEQ stop
wordcopy LDR R3,[R0],#0x04
STR R3,[R1],#0x04
SUBS R2,R2,#0x01
BNE wordcopy
stop MOV R0,#0x18
LDR R1,=0x20025
SWI 0x123456
AREA BlockData, DATA, READWRITE
src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4
dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
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 | 只看该作者
按照道理来说不会,有没有可能是配置文件没有起作用,就是说选择了简单编译连接模式?

使用特权

评论回复
5
leohsiung|  楼主 | 2010-10-29 21:41 | 只看该作者
就是默认的设置啊,哪里可以设置编译链接模式啊?

使用特权

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

本版积分规则

0

主题

11

帖子

0

粉丝