今天coding的时候遇到一个坑爹问题,系统调度的delay延时函数不起作用了。我相信一定是加了什么莫名其妙的代码导致哪里故障了,但是现在程序已经很大了,每次改动不方便进行完整的黑箱测试,所以我已经不知道是啥时候添加的代码导致这个问题……(晕啊)

经过一番DEBUG,起初我怀疑是任务挂起函数OSTaskSuspend出了问题,查看返回值没有问题啊,无意间发现关中断函数OS_ENTER_CRITICAL的返回值是1,这明显不对啊,为什么会这样呢,这个函数肯定是没问题的,赶紧去Google,原来是我当初为了确保一些资源更新时不被打断,在父函数某处设立程序进入了临界区,结果今天在子函数里又设了一个临界区(我给忘了!),于是导致了关中断操作嵌套现象,但是UCOS对于关中断嵌套的支持不是很好(个人感觉就是不能嵌套),所以出现了问题。

相关原理参考:UCOS-II中的三种临界区管理机制