2 itman814 ITMan814 于 2014.08.13 17:09 提问

cortex m3移植uC/OS后程序运行一段时间停止或者跑飞

鄙人最近需要在Atmel sam3x8e开发板上移植uC/OS操作系统,移植成功之后发现系统运行一段时间后总是会跑飞或者停止。经调试发现在pendsv处理任务切换的中断服务函数的BX LR这一条汇编语句之前是好的,但是执行了这个语句之后发现程序停止运行或者不知道跑哪去了。需要注意的是是在系统正常运行一段时间之后才会发生上述情况。由于不能单步调试,所以最后也不知道程序最终bx到哪执行去了,求大神指点,万分感谢!!!

程序代码如下:

.thumb_func
OSPendSV:

    CPSID   I
    MRS     R0,PSP
    CBZ     R0,OSPendSV_nosave

    SUBS        R0,R0,#0x20
    STM     R0,{R4-R11}

    LDR     R4,=OSTCBCur
    LDR     R4,[R4]
    STR     R0,[R4] 

OSPendSV_nosave:

    PUSH    {R14}
    LDR     R0,=OSTaskSwHook
    BLX     R0
    POP     {R14}
    LDR     R4,=OSPrioCur
    LDR     R5,=OSPrioHighRdy
    LDRB    R6,[R5]
    STRB    R6,[R4]

    LDR     R4,=OSTCBCur
    LDR     R5,=OSTCBHighRdy
    LDR     R6,[R5]
    STR     R6,[R4]

    LDR     R0,[R6]
    LDM     R0,{R4-R11}
    ADDS    R0,R0,#0x20
    MSR     PSP,R0

    PUSH    {R0,R1,R14}
    MOV     R0,#3
    LDR     R1,=testfunc
    BLX     R1
    POP     {R0,R1,R14}

    MOV     LR,#0xFFFFFFFD
    CPSIE   I
    BX      LR

.END

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!