做一个任务,最高优先级,平时就阻塞着,等待唤醒,唤醒后,就使用通信线路(如串口等),把RAM的所有内容,全部发出来,串口另一端就接PC接收。由于使用了通信线路,所以,这个平时阻塞着的任务,也最好使用通信线路来唤醒。当然,系统运行正常的时候,不要去唤醒这个任务。
PC端收到全部数据后,就可以参考编译链接输出的map文件,分析数据中的各个对象了(TCB,任务栈,同步对象等),特别是TCB中的任务状态和阻塞对象指针,表明了此任务是处于什么状态,如果是阻塞,那么是阻塞在哪个同步对象上的。
知道了异常的任务和任务阻塞的同步对象,那么就可以查看源程序,找到与此任务访问这个同步对象的所有代码,仔细检查逻辑,最后应该能确认故障点在何处。
另:希望查到最后,你不要跟我说是你的ucos移植有问题。:lol
|