发 帖  
原厂入驻New
STM32F407使用UCOSIII运行四个任务一段时间后部分任务异常挂起的原因是什么?
377 STM32F407 UCOSIII
分享
STM32F407使用UCOSIII运行四个任务一段时间后最低优先级及次最低优先级任务不再响应,调试发现两个任务的任务控制块内Task_State均为0。
详细现象描述如下,我使用UCOSIII运行四个任务,1.GPS解码任务(优先级7,周期100ms)、2.按键扫描任务(优先级6,周期20ms)、3.主界面任务(优先级5,周期100ms)、4.各任务堆栈检测任务(优先级10,周期5s)。正常开机启动后按键及屏幕显示均正常响应,GPS解码任务也正常处理,使用串口打印输出各任务堆栈情况,然后运行一段时间后(时长不定),突然GPS解码任务就无法正常进入了,同时堆栈检测任务也不打印输出,使用仿真调试发现这两个任务均无法进入(采用打断点方式),然后通过堆栈打印发现各任务的堆栈均足够,不存在任务堆栈溢出的情况,在另外两个任务中打断点均能正常停下来。
异常点说明:仿真调试窗口下,我查看GPS解码和堆栈检测的任务控制块,发现Task_State均为0,0不就代表任务处于就绪态嘛,怎么就运行不进去呢?
有遇到此问题的大神吗,能不能给点建议,非常感谢。
0
2020-4-22 04:35:36   评论 分享淘帖 邀请回答

相关问题

3个回答
问题找到了,昨天晚上在坛里看了看大家讨论IIC在UCOS运行下是否需要放到临界段来进行处理的问题,然后今天联想到我使用了硬件IIC驱动OLED,然后在OLED写数据时加入临界段处理,现在一切正常,应该还是任务在调用OLED时出现调度,导致一直读取不到返回状态,导致卡死,不知道大家有没有好的方法来避免这类问题,欢迎大家讨论,说说自己的看法。
处于就绪态的任务不一定运行啊,是不是它前面的任务一直处于就绪态和运行态呢,导致它没办法进入运行态。一般把界面任务的优先级设置为最低。
2020-4-22 08:03:00 评论

举报

其他两个任务正常的在调度,而且都会定期的主动释放掉CPU的使用权,我不理解的是怎么任务运行着就进不去了,我仔细想了想,GPS解码的时候会先申请堆空间用来进行解码操作,解码完成后进行释放,我的堆设置为0X1000,正常情况下肯定是足够使用了,我觉得堆溢出的可能性也不大,主要是不清楚堆溢出会有什么后果,(修改了程序的其他部分导致出错,那应该进hardfault呀)。对于你的建议,我考虑将GPS解码优先级放到最高,然后依次是按键和主界面,看看还会不会有这种现象,多谢啦。
2020-4-22 08:18:10 评论

举报

只有小组成员才能发言,加入小组>>

260个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表