嵌入式学习小组
直播中

毛萃

7年用户 875经验值
私信 关注

请问UCOSIII中自己写的最低优先级任务能自行任务切换吗?

我把按键点亮LED灯的任务的优先级定为最低(优先级8,其他自定义任务都比他高),在这个while(1)里面没有任何能进行任务调度的函数,优先级高的任务也能正常运行,如用串口打MPU6050的波形发回到上位机,也没有观察到有卡顿的现象,就是按键点亮LED灯反应有点慢,能看出明显的延迟。 如果我把这个任务的优先级改为4,串口就完全没有数据了,CH340发送指示灯不亮,卡死在了按键处理任务中,同时,按键处理函数完全没有了延时,运行得非常快,跟跑裸机没区别。
所以是不是证明了我的想法:UCOSIII中,除去系统任务之外,自己写的最低优先级任务在不调用任务切换函数的情况下,也能进行任务切换?
另外再问一个问题:如果调用软件定时器,在系统中有阻塞任务的时候,如等待信号量,是否能准时的执行回调函数?我想用它来喂看门狗。

回帖(5)

王萍

2020-3-17 06:57:00
任务切换很多地方都可以发生。
当你的任务没有任何延时,发送 邮箱,等待信号量什么的等可以引起任务调度的代码时,那就是通过systick中断来调度了。
当你的任务有其他方式引起调度的时候,那就是随着你的流程来调度的。
举报

谢辅仁

2020-3-17 07:12:43
滴答定时器中断服务函数会调用任务切换函数的。
举报

刘琪琛

2020-3-17 07:17:50
滴答定时器中断服务函数每5ms运行一次,那为什么只有在自定义优先级最低的时候才会进行任务切换呢?因为在系统里,他的优先不是最低的,还是空闲任务和统计任务。
举报

刘斌

2020-3-17 07:32:00
那原子哥,是因为高优先级的任务可以占有CPU,所以如果在低优先级的任务中不自己调用任务切换函数,每5ms进行一次任务调度,所以高优先级也能运行,但是如果在高优先级里面写死while(1)的话,他就会一直占有CPU,下面的低优先级就无法运行了吗?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分