main里面创建一个启动任务 OSInit(); OSTaskCreate(startTask,0,&START_TASK_STK[START_STK_SIZE],START_TASK_PRIO); OSStart(); startTask里调用了两次OSTimeDly就程序就跑飞了,其中systick的初始化再startTask里。 查看fault report发现这个hardfault是由usagefault上访造成的,定位错误代码 引起异常的代码如下: void _LibDwLoadLde(void) { ................ OSTimeDly(50); ............... OSTimeDly(450); ............... }程序在退出该函数是出现异常的。然后我开始查看OSTimeDly前后的寄存器 问题分析到这里卡住了,不知道这里的psp为什么会莫名其妙的被修改,正常情况应该是中断后自动保存r0-r4,r11,cpsr(好像就这些了,记不太清了),psp应该减小24即20001CE8。 |
CPSID I ; Prevent interruption during context switch