说说我对uCOS-II任务调度的理解,大家看看对不,不对请指教

2019-07-20 22:20发布

OS:uCOS-II

以前我一直认为是一个任务只要在运行,只有中断才可以打断它继续运行;但是最近测试发现只要比它优先级高的任务都可以打断它继续运行。只要高优先级的任务满足运行的条件,不管低优先级任务是否在运行,它都可以打断它来抢先运行自己。


总结:
1、中断可以打断任何任务而抢先运行,不管任务是否在运行都没有关系,即中断来了它就要使用CPU
2、高优先级的任务只要满足运行的条件,不管低优先级的任务是否在运行都没有关系,即使低优先级任务在运行,高优先级任务也可以打断它【类似中断的现象】而运行自己


这样理解对吗?不对请指点
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
49条回答
特朗姆斯
1楼-- · 2019-07-25 10:56
 精彩回答 2  元偷偷看……
gangzilife
2楼-- · 2019-07-25 14:27
特朗姆斯 发表于 2016-5-12 09:18
freertos的中断就可以不用写OSIntExit函数,照样没有问题

只有在调度的时候才会任务切换吧,如果时间片没有耗完,systick没有中断,系统没有调度,怎么切换呢?所以我感觉只有在调度的时候才会切换任务,不知道对不对?
天山狐狸
3楼-- · 2019-07-25 19:36
特朗姆斯 发表于 2016-5-12 08:56
如果高优先级的任务是通过获得信号量来进行,这个信号量由中断给出,恰好中断服务程序的最后没有调用进入 ...

这种情况的话,高优先级的任务就有一些延时了。

因为你没有在中断退出时做任务调度,哪里中断了,中断后系统又回原来的那里执行了。所以原来的那个任务的优先级在你看来比这个刚才的高优先级任务的优先级还高。
特朗姆斯
4楼-- · 2019-07-26 01:30
gangzilife 发表于 2016-5-12 10:11
只有在调度的时候才会任务切换吧,如果时间片没有耗完,systick没有中断,系统没有调度,怎么切换呢?所 ...

你看38楼我描述的情况

如果不出现调度就不能发生任务切换的话,实际理论上高优先级的任务并不能打断低优先级的任务。
特朗姆斯
5楼-- · 2019-07-26 05:03
 精彩回答 2  元偷偷看……
gangzilife
6楼-- · 2019-07-26 07:59
特朗姆斯 发表于 2016-5-8 22:04
我有一个疑问

假设systick的中断间隔是10ms,所有的任务执行一遍至多需要4ms。那么在没有滴答定时器中 ...

不会吧!都没有调度,高优先级任务怎么抢占的?应该把时间片耗完,才调度的吧!

抢占的意思应该是说假如一个任务需要2ms,但系统1ms调度一次,任务才运行了一半,有可能被其他的任务抢占了CPU吧!

一周热门 更多>