|
本帖最后由 Romatom 于 2012-8-31 15:00 编辑
我在网上找了一段程序自己来内存实验,前几次用AXD在H-JTANG中调试都还好好的,后来有一次全速运行后就出问题了。
问题:当程序运行到r0=0x30000064和r2=0x00000060时,程序就一致停留在了copyalllop这段代码之间了,PC一直在这里打转,可是r0和r2就是不再加4,都不知道是不是ldr和str指令的问题还是我自己在其他地方的设置出现了问题,因为这段程序我拷贝到TQ2440中完全能都正常运行。对了copyalllop这段码主要完成数据从0x00000000拷贝到0x30000000中这么个简单的功能,详细代码如下,小弟是新手,跪求解答啊!!!!!!!!!!!!!!!!!!!
;//================================================
;//名称:内存初始化
;//作者:$$$$$$$$$
;//时间:2012-8-30
;//================================================
AREA Init,CODE,READONLY
ENTRY
start
;//关闭看门狗
ldr r0,=0x53000000 ;//将看门狗控制寄存器地址放入r0
mov r1,#0
str r1,[r0] ;//设置看门狗寄存器的值为0
bl initmen ;//跳转到initmen代码段,初始化内存
bl copyall ;//跳转到拷贝代码段,将ROM中数据拷贝到内存中
IMPORT xmain ;//引入mian.c中xmain函数
ldr sp,=0x34000000 ;//调用C程序之前初始化栈指针
ldr lr,=endxmain ;//设置xmain函数的返回地址
ldr pc,=xmain ;//跳转到C程序中xmain函数入口处地址
endxmain
ldr r0,=0x56000010 ;//LED的GPIO接口配置寄存器
ldr r1,=0x00015400 ;//GPIOB的PBCON的配置数据
str r1,[r0]
ldr r0,=0x56000018 ;//配置上拉电阻
ldr r1,=0x000007ff ;//均不上拉
str r1,[r0]
ldr r0,=0x56000014 ;//对GPIOB输出数据
ldr r1,=0x00000000
str r1,[r0]
loop
b loop ;//死循环
copyall
IMPORT |Image$$RO$$Base|
IMPORT |Image$$RW$$Limit|
ldr r0,=|Image$$RO$$Base|
ldr r1,=|Image$$RW$$Limit|
ldr r2,=0x0
copyallloop
teq r0,r1
beq quitcopyllloop
ldr r3,[r2],#4
str r3,[r0],#4
b copyallloop
quitcopyllloop
mov pc,lr
initmen ;//内存初始化
ldr r0,=0x48000000 ;//加载内存相关寄存器首地址到r0
ldr r1,=0x48000034 ;//加载内存相关寄存器尾地址到r1
adr r2,memdata ;//将寄存器配置数据地址段首地址加载到r2
initmemloop
ldr r3,[r2],#4 ;//循环设置寄存器
str r3,[r0],#4
teq r0,r1
bne initmemloop
mov pc,lr
memdata
DCD 0x22000000
DCD 0x00000700
DCD 0x00000700
DCD 0x00000700
DCD 0x00000700
DCD 0x00000700
DCD 0x00000700
DCD 0x00018005
DCD 0x00018005
DCD 0x008e07a3
DCD 0x000000b1
DCD 0x00000030
DCD 0x00000030
END
xmain这段我没有拷贝出来,程序我觉得应该没有问题啊
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|