UCOS任务与任务之间是怎样切换的?
答案:2 悬赏:0 手机版
解决时间 2021-12-01 06:01
- 提问者网友:骨子里的高雅
- 2021-11-30 12:40
UCOS任务与任务之间是怎样切换的?
最佳答案
- 五星知识达人网友:猎心人
- 2021-11-30 13:56
- UCOS有一个任务调度机制,根据任务的优先级进行调度,具体的调度方式你可以看邵贝贝的书,关于交出CPU使用权的问题主要有二个方面
一个是硬件中断,那么系统会将当前任务有关变量入栈,然后执行中断服务程序,执行完成后出栈返回.
另一个是任务之间的切换,使用的方法就是任务调度,每一个任务有自己的栈,顺度也是一样的入栈,然后执行另一个程序,然后出线返回.
全部回答
- 1楼网友:污到你湿
- 2021-11-30 15:28
假如有a b c三个任务,任务优先级a>b>c,由于a优先级最高,故而一开始ucOS会挑a来先运行。
a运行期间,b、c任务都不会被运行,除非a任务主动进行等待(可以是等待:延时、信号、消息等),a任务调用等待函数时,实际上是把a任务的堆栈给切出去,同时换上次一级的任务b的堆栈环境,然后执行b任务。
任务b执行期间,c任务不能被运行,但若a任务可以抢夺其执行权(在a任务等待结束时)。
故而并非是每一任务按优先级顺序轮流执行的,而是高优先级的任务独占运行,除非其主动放弃执行,否则低优先级任务不能抢占,同时高优先级可以把放出去给低优先级任务使用的CPU占用权抢回来。所以ucos的任务间要注意插入等待延时,以便ucos切出去让低优先级任务执行。
a运行期间,b、c任务都不会被运行,除非a任务主动进行等待(可以是等待:延时、信号、消息等),a任务调用等待函数时,实际上是把a任务的堆栈给切出去,同时换上次一级的任务b的堆栈环境,然后执行b任务。
任务b执行期间,c任务不能被运行,但若a任务可以抢夺其执行权(在a任务等待结束时)。
故而并非是每一任务按优先级顺序轮流执行的,而是高优先级的任务独占运行,除非其主动放弃执行,否则低优先级任务不能抢占,同时高优先级可以把放出去给低优先级任务使用的CPU占用权抢回来。所以ucos的任务间要注意插入等待延时,以便ucos切出去让低优先级任务执行。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯