共2条
1/1 1 跳转至页
zlgarm 请问zlgarm,取数据中止的问题
问
我用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
我用单步执行后,发现在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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |