这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 求教:ads调试为什么不能跳入main中??

共6条 1/1 1 跳转至

求教:ads调试为什么不能跳入main中??

菜鸟
2007-04-21 05:26:34     打赏

我是个新手,在用ads单步调试s3c44b0x时,程序总是在 ldr sp,=SVCStack处陷入死循环,不能正确地跳入main函数中。我用的是jtag简易调试方式,程序是开发板自带的标准程序。不知哪位大虾遇到过这种情况,望告知??程序经常死在

000001ac [0xe59f0040] ldr r0,0x000001f4 ; = #0x0c000114
000001b0 [0xe5900000] ldr r0,[r0,#0]
000001b4 [0xe58d0004] str r0,[r13,#4]
000001b8 [0xe8bd8001] ldmfd r13!,{r0,pc}
000001bc [0xe24dd004] sub r13,r13,#4
000001c0 [0xe92d0001] stmfd r13!,{r0}
或形如

0c514724 [0xe24ee004] dcd 0xe24ee004 ..N.
0c514728 [0xe92d400f] dcd 0xe92d400f .@-.
0c51472c [0xe14f0000] dcd 0xe14f0000 ..O.
0c514730 [0xe92d0001] dcd 0xe92d0001 ..-.
的地方,脑袋都大了!




关键词: 求教     调试     为什么     不能     跳入    

菜鸟
2007-04-22 03:18:00     打赏
2楼

怎么没有人回复阿?难道没有人遇到这种情况么?


菜鸟
2007-04-22 04:44:00     打赏
3楼

啊,不一定能帮你。但为了检查为什么没有到main函数,需要确认几点:

1. 死循环的具体表现如何?是单步失效(每次单步PC都不变,这样通常是程序本身问题,程序中确实存在死循环),还是跳到非法地址(这样通常是访问了非法地址,造成CPU异常),还是老是几个步骤的重复(这样通常是程序中确实存在死循环,应该是一个永久等待的条件判断循环)。

2. 检查一下死机的时候,PC是多少,堆栈指针sp是多少?是否为合法地址(PC应在RAM或者ROM的地址中,SP必须在内部SRAM或者外部SRAM中)。

3. 检查一下死机的时候,离main函数还差多远,对应的你的源代码是哪个文件。。。。

可以考虑用反汇编工具进行执行的对比,以便发现问题。。


菜鸟
2007-04-22 05:35:00     打赏
4楼

谢谢楼上的。出问题的文件就是程序最开始的那段汇编程序,就是初始化cpu、初始化ram、分配堆栈等的那段汇编代码,还没有进入main函数。我是单步执行程序

InitStacks
;Don't use DRAM,such as stmfd,ldmfd...... d
;SVCstack is initialized before 
;Under toolkit ver 2.50, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'

mrs r0,cpsr
bic r0,r0,#MODEMASK
orr r1,r0,#UNDEFMODE|NOINT
msr cpsr_cxsf,r1 ;UndefMode I t
ldr sp,=UndefStack

orr r1,r0,#ABORTMODE|NOINT
msr cpsr_cxsf,r1 ;AbortMode
ldr sp,=AbortStack

orr r1,r0,#IRQMODE|NOINT
msr cpsr_cxsf,r1 ;IRQMode D 
ldr sp,=IRQStack

orr r1,r0,#FIQMODE|NOINT
msr cpsr_cxsf,r1 ;FIQMode ? @
ldr sp,=FIQStack

bic r0,r0,#MODEMASK|NOINT
orr r1,r0,#SVCMODE
msr cpsr_cxsf,r1 ;SVCMode  2
ldr sp,=SVCStack

;USER mode is not initialized.
mov pc,lr ;The LR register may be not valid for the mode changes.

单步执行上面的语句都没有问题,一到上面红色标记的语句时,就单步实效,不能顺利执行下面的语句。程序就进入了死循环。晕死了!

还有,这有没有可能跟我用的调试工具是简易jtag调试方式有关????我没有仿真器


菜鸟
2007-04-22 20:30:00     打赏
5楼

从上面来看,有可能是你的调试器有问题。看似在超级模式和用户模式的切换的时候出的问题。。根据最上面的提示:

;Don't use DRAM,such as stmfd,ldmfd...... d
;SVCstack is initialized before 
;Under toolkit ver 2.50, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'

可否把后面的语句'msr cpsr_cxsf,r1'替换成'msr cpsr,r1'试试。。


菜鸟
2007-04-26 03:12:00     打赏
6楼
楼上的,这些情况我都试过,可问题依旧!晕!

共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]