打印
[ZLG-ARM]

取数据中止异常 B DataAbort

[复制链接]
3090|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fzh2004|  楼主 | 2007-1-22 20:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一下:偶用uCOS-II写东东,在SMARTARM 2200开发板上可以调通的程序,在我自己的板子(CPU是ARM7 LPC2292, 只有片内的FLASH和RAM),用ADS1.2的AXD通过JTAG调试时却老是出现取数据中止,请问这该如何解决? 
也不是error, 就是程序在执行初始化的时候,初始化串口后跳到了
取数据中止那行汇编去了,之后就再也不动了. 如下:

;未定义指令
Undefined
        B       Undefined

;软中断
SoftwareInterrupt
        B       SoftwareInterrupt

;取指令中止
PrefetchAbort
        B       PrefetchAbort

;取数据中止
DataAbort
        B       DataAbort

;快速中断
FIQ_Handler
        STMFD   SP!, {R0-R3, LR}
        BL      FIQ_Exception
        LDMFD   SP!, {R0-R3, LR}
        SUBS    PC,  LR,  #4 

相关帖子

沙发
fzh2004|  楼主 | 2007-1-22 21:54 | 只看该作者

数据中止异常

ADS中单步调试会有如下死循环

_zero_loop  [0xe2555004]  subs   r5,r5,#4
0000000154  [0x24847004]  strcs  r7,[r4],#4
0000000158  [0x8afffffc]  bhi    _zero_loop


为什么啊

使用特权

评论回复
板凳
fzh2004|  楼主 | 2007-1-23 11:15 | 只看该作者

回复

研究过后觉得是堆栈空间的问题:能否有人帮忙解释一下是怎么分配的

__user_initial_stackheap    
    LDR   r0,=bottom_of_heap        
;   LDR   r1,=StackUsr            
    LDR   r2,=top_of_heap        
    LDR   r3,=bottom_of_Stacks        
    MOV   pc,lr                
        
StackIrq           DCD     IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4
StackFiq           DCD     FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4
StackAbt           DCD     AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4
StackUnd           DCD     UndtStackSpace + (UND_STACK_LEGTH - 1)* 4


    IF :DEF: EN_CRP
        IF  . >= 0x1fc
        INFO    1," The data at 0x000001fc must be 0x87654321. Please delete some source before this line."
        ENDIF
CrpData
    WHILE . < 0x1fc
    NOP
    WEND
CrpData1
    DCD     0x87654321          ;/*When the Data is 为0x87654321,user code be protected. 当此数为0x87654321时,用户程序被保护 */
    ENDIF

;/* 分配堆栈空间 */
        AREA    MyStacks, DATA, NOINIT, ALIGN=2
IrqStackSpace      SPACE   IRQ_STACK_LEGTH * 4  ;Stack spaces for Interrupt ReQuest Mode 中断模式堆栈空间
FiqStackSpace      SPACE   FIQ_STACK_LEGTH * 4  ;Stack spaces for Fast Interrupt reQuest Mode 快速中断模式堆栈空间
AbtStackSpace      SPACE   ABT_STACK_LEGTH * 4  ;Stack spaces for Suspend Mode 中止义模式堆栈空间
UndtStackSpace     SPACE   UND_STACK_LEGTH * 4  ;Stack spaces for Undefined Mode 未定义模式堆栈

        AREA    Heap, DATA, NOINIT
bottom_of_heap    SPACE   1

        AREA    StackBottom, DATA, NOINIT
bottom_of_Stacks    SPACE   1

        AREA    HeapTop, DATA, NOINIT
top_of_heap

        AREA    Stacks, DATA, NOINIT
StackUsr

    END

使用特权

评论回复
地板
myoiqq| | 2007-1-23 12:30 | 只看该作者

应该室堆栈的问题

如果用了周的模板,请修改配置文件里的参数,周的模板默认都是该种芯片最小型号的,主要是修改RAM起始地址和RAM最高端的地址。
请查数据手册!
mem_a.scf   __RelInFlash
mem_b.scf   __DebugInRam
mem_c.scf  __DebugInFlash

使用特权

评论回复
5
fzh2004|  楼主 | 2007-1-23 14:35 | 只看该作者

回复

  谢谢4楼,换了LPC2210的模块,好了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

0

粉丝