问
我用DebugInRAM方式调试,不能正常运行
我用单步执行后,发现在BL TargetResetInit的最后一条语句执行以后就跳到
;取数据中止
DataAbort
B DataAbort
去了。
ResetInit
BL InitStack ;初始化堆栈 Initialize the stack
BL TargetResetInit ;Initialize the target board
;跳转到c语言入口 Jump to the entry point of C program
B __main
请问是什么问题?
我用的lpc2114,模板是Chenmingji 2004/02/02
答 1:
出现数据中止一般都是用户程序的问题,请更新模板:2100模板:
http://www.zlgmcu.com/download/downs.asp?ID=1074
2200模板:
http://www.zlgmcu.com/download/downs.asp?ID=1075
答 2:
我的也是这样不过我的程序是在__main中出现数据中止为什么要更新模板呢?不用模板把你们的启动文件加进工程不行吗?我认为既然在没有进入main函数之前就出现数据中止不应该是用户程序的错误!你们能不能给大家解释一下,不要动不动就说下载个东东了事,要知道被人牵着鼻子走是很不爽的!!
答 3:
问题应该是在堆栈上,查看进入TargetResetInit 的堆栈是否合理
答 4:
经过汇编,从一下地址数据中止的,,程序跳到:一下以后(__main)
__main [0xe28f8090] add r8,pc,#0x90 ; #0x40000164
400000d0 [0xe898000f] ldmia r8,{r0-r3}
400000d4 [0xe0800008] add r0,r0,r8
400000d8 [0xe0811008] add r1,r1,r8
400000dc [0xe0822008] add r2,r2,r8
400000e0 [0xe0833008] add r3,r3,r8
400000e4 [0xe240b001] sub r11,r0,#1
400000e8 [0xe242c001] sub r12,r2,#1
_move_region [0xe1500001] cmp r0,r1
400000f0 [0x0a00000e] beq _zero_region
400000f4 [0xe8b00070] ldmia r0!,{r4-r6}
400000f8 [0xe1540005] cmp r4,r5
400000fc [0x0afffffa] beq _move_region
40000100 [0xe3140001] tst r4,#1
40000104 [0x1084400b] addne r4,r4,r11
40000108 [0xe3150001] tst r5,#1
4000010c [0x1085500b] addne r5,r5,r11
40000110 [0xe3150002] tst r5,#2
40000114 [0x10855009] addne r5,r5,r9
40000118 [0xe3c55003] bic r5,r5,#3
_move_loop [0xe2566004] subs r6,r6,#4
40000120 [0x24947004] ldrcs r7,[r4],#4
40000124 [0x24857004] strcs r7,[r5],#4
40000128 [0x8afffffb] bhi _move_loop
一直在:_move_loop 这里循环,然后我把光标移到下面这句,按F7后跳到数据中止了。
4000012c [0xeaffffee] b _move_region
_zero_region [0xe1520003] cmp r2,r3
请问:_move_loop这一段是什么作用??怎么会出现中止??
答 5:
我把出错信息附上请看看,谢谢深思!我单步调试结果在__main函数中的下面指令处跳到数据中止
_region_table [0x00002c44] dcd 0x00002c44 D,..
4000017c [0x00002c68] dcd 0x00002c68 h,..
40000180 [0x00002c68] dcd 0x00002c68 h,..
40000184 [0x00002c80] dcd 0x00002c80 .,..
您能告诉我什么原因么?是各处理器模式的堆栈设置不合理么?我的堆栈设置如下:
USR_STACK_LEGTH EQU 64
SVC_STACK_LEGTH EQU 64
FIQ_STACK_LEGTH EQU 64
IRQ_STACK_LEGTH EQU 64
ABT_STACK_LEGTH EQU 0
UND_STACK_LEGTH EQU 0
我用的是2104启动代码是用周立功公司陈明计的config.h,target.c,target.h.vector.s,lpc2106.h,init.s等文件我没有利用周立功公司的模板而是把以上文件直接加入了我的工程中。希望有朋友帮忙看看,谢谢!
答 6:
还有一个堆的初始化呢? heap |