这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » zlgarm 请问zlgarm,取数据中止的问题

共2条 1/1 1 跳转至

zlgarm 请问zlgarm,取数据中止的问题

院士
2006-09-17 18:14:16     打赏
zlgarm 请问zlgarm,取数据中止的问题



关键词: zlgarm     请问     数据     中止     问题    

院士
2006-12-22 22:43:00     打赏
2楼
问 我用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

共2条 1/1 1 跳转至

回复

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