硬件是 STM32平台,几个月前的一个项目,当时总共 跑了 12个任务,除掉启动任务就只剩 11个TASK。
丢失任务的是 RTC 1s显示 task, 实现过程 就是设置个OSSemPend(RTC_Sem, 0, &err); 然后在秒中断 释放信号。
记得当时设计的这个任务 先级是 10 或是 11(就是最低那个),一般前30分钟正常运转,到30分钟以后基本就停止了
(秒中断有产生中断,也释放了信号量,但就是一直阻在OSSemPeng);
此时只要按下按键(任务级别7),RTC task又正常运行了,再过个 半小时以上 就又停止了。后面 自己也在网上 查了很多相关资料。
最后看了本 UCOS 任务设计一书,才想到是优先级强占原因,因为当时 有个 最高级任务,调度度非常 频繁 (每 15 tick)最后 把这RTC 任务先级提高 到(7)才没有发生停止现像.
感觉 ucos 不太适合在 大于 12个Task以上的调度,因为抢占的原因(每时每刻都运行最高级别),导致最低任务没时间运行。除非各个任务设计的时间非常合理.
|