鄙人最近需要在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