UCOS任务与任务之间是怎样切换的?
比如现在正在运行一个任务,不考虑中断发生,那任务是怎么进行切换的?是不是每一个任务按照优先级顺序轮流执行一次?...
比如现在正在运行一个任务,不考虑中断发生,那任务是怎么进行切换的?是不是每一个任务按照优先级顺序轮流执行一次?
展开
2个回答
展开全部
假如有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切出去让低优先级任务执行。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询