打印
[Cortex-M0技术交流]

UCOSII任务调度问题 某个任务突然不执行

[复制链接]
4660|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiandandan168|  楼主 | 2012-4-5 19:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的板子是STM32,程序已经连续运行多天,某天开始其中一个任务没有执行,其余任务运行正常。我的系统中自己定义的任务有5个,没有执行的是优先级最低的任务。前期一直正常,突然出现这种情况,最可能的原因可能是什么?有方向吗,盲目不知道怎么找问题?任务中有一个看门狗任务,看门狗任务也很正常,系统运行期间没有复位。

相关帖子

沙发
jiandandan168|  楼主 | 2012-4-5 20:10 | 只看该作者
能不能给我点方向性指导,是在不知道怎么入手解决这个问题了??

使用特权

评论回复
板凳
kyzb001| | 2012-4-6 14:57 | 只看该作者
看看堆栈是不是溢出了。

使用特权

评论回复
地板
john_lee| | 2012-4-6 16:00 | 只看该作者
这类不容易复现故障的错误非常难找,你可以开一个任务,再需要时输出内存印象(就是dump),然后根据map文件的定位信息,检查各个TCB,任务栈和同步对象,分析一下,应该能找到问题的原因。

使用特权

评论回复
5
jiandandan168|  楼主 | 2012-4-9 16:13 | 只看该作者
楼上的能把方法具体描述一下吗,怎样做这个内存印象,怎样查,我实在是不知道怎么弄了,这方面懂得太少,如果方便留个联系方式,想具体请教一下

使用特权

评论回复
6
john_lee| | 2012-4-11 01:40 | 只看该作者
做一个任务,最高优先级,平时就阻塞着,等待唤醒,唤醒后,就使用通信线路(如串口等),把RAM的所有内容,全部发出来,串口另一端就接PC接收。由于使用了通信线路,所以,这个平时阻塞着的任务,也最好使用通信线路来唤醒。当然,系统运行正常的时候,不要去唤醒这个任务。

PC端收到全部数据后,就可以参考编译链接输出的map文件,分析数据中的各个对象了(TCB,任务栈,同步对象等),特别是TCB中的任务状态和阻塞对象指针,表明了此任务是处于什么状态,如果是阻塞,那么是阻塞在哪个同步对象上的。

知道了异常的任务和任务阻塞的同步对象,那么就可以查看源程序,找到与此任务访问这个同步对象的所有代码,仔细检查逻辑,最后应该能确认故障点在何处。

另:希望查到最后,你不要跟我说是你的ucos移植有问题。:lol

使用特权

评论回复
7
haitao10086| | 2012-4-12 10:17 | 只看该作者
:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

17

帖子

0

粉丝