关于ucos中系统的任务运行的原理

2019-10-15 05:16发布

我记得
不是说好有任务优先级的吗?系统执行任务是先执行完高优先级的;(我的理解是,期间低优先级的任务完全不执行。)

然后去执行低优先级的。
然后任务调度不是只发生在面对同一优先级的任务的吗?(这是系统分配时间片)

不知道我的理解是不是错了……
那为什么在考虑到信号量的时候,高优先级的task请求信号量(高优先级的task内第一行代码就是delay,然后才请求信号量),
低优先级的task也是(低优先级的task内第一行代码直接请求信号量),反而是低优先级的任务先执行。。。。

不是很懂,求助。
(问题出处在ucos开发手册--第十章·信号量--优先级反转实验)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
来俩不甜的
1楼-- · 2019-10-15 10:22
高优先级请求失败,低优先级请求成功了,故运行低优先级任务。此种特殊情况下,优先级已经无法决定哪个任务先运行了,此时是由信号量决定了。所以,ucosiii引进了互斥信号量
wszdxmh
2楼-- · 2019-10-15 13:41
如果优先级高的任务进行就绪状态,或者优先级高的任务在运行状态而没有调用任务切换函数,如系统级延时函数等,那么高优先级的任务就会一直占用CPU,低优先级的任务无法执行。而低优先级的任务就算没有调用任务切换函数,只要高优先级的任务进入了就绪状态,那高优先级的任务也可以被执行。你可以看一下任务状态切换表那张图
在LS参考系
3楼-- · 2019-10-15 16:42
来俩不甜的 发表于 2017-2-1 21:35
高优先级请求失败,低优先级请求成功了,故运行低优先级任务。此种特殊情况下,优先级已经无法决定哪个任务 ...

为什么会出现高优先级任务请求失败、低优先级任务请求成功的情况呢?
在LS参考系
4楼-- · 2019-10-15 21:45
wszdxmh 发表于 2017-2-2 14:18
如果优先级高的任务进行就绪状态,或者优先级高的任务在运行状态而没有调用任务切换函数,如系统级延时函数 ...

那张图确实不错,感谢啊
来俩不甜的
5楼-- · 2019-10-15 23:47
 精彩回答 2  元偷偷看……

一周热门 更多>