现象:
- 内核的软件定时器正常(中断环境),定时检测事件,触发事件有日志打印出来,通过消息队列发送数据失败,错误值是消息队列满。
- 接收软件定时器消息的线程预期应该在收到消息后有日志打印,出现问题后一直未有日志打印。
- 喂狗实在空闲线程中喂的,程序连续运行了5天没有出现看门狗复位。也没有按照设定的规则休眠。
- 软件定时器打印的日志所带的tick计算后确认 相对准确。
内核版本号4.0.2
现在猜测
出现了什么原因导致线程没有工作。出现的概率很低,只在客户手中有复现问题,现场观察到的现象如上列出的,目前分析代码没有任何头绪,希望有人能指下方向。
因为概率极小,目前还没有复现现象。
发现代码中有一个异常。
在调用了rt_enter_critical()之后rt_exit_critical()之前,有调用rt_thread_mdelay(),rt_mq_send()和rt_event_send()函数。
有两个疑问:
这是错误用法,应该明确禁止。
锁了调度器,就不能再使用会引发挂起自身的API了。
但你这里估计还有其它问题,建议再深入细查一下。