voidx 发表于 2009-12-7 16:12:12

优先级反转会不会导致 任务一直不能运行,或者更严重后果,系统直接崩溃?

优先级反转会不会导致 任务一直不能运行,或者更严重后果,系统直接崩溃?

ffxz 发表于 2009-12-7 16:18:07

通常不会,但如果关键任务因为这个而翻转,后果是非常严重的,所以通常RTOS中会提供相应机制来避免这种情况的发生。

ralfak 发表于 2009-12-16 00:41:12

优先级反转只影响实时性,并不会使系统崩溃,但造成的后果是无法预料的。
ucos中采用一种封顶优先级的方式,freertos好像支持优先级继承,具体怎么实现忘了

voidx 发表于 2009-12-16 18:08:40

决定采用 更改优先级(需要手动更改)的办法 防止优先级反转。

ralfak 发表于 2009-12-16 20:13:27

你这个不能采用优先级继承
因为你每个优先级只对应了一个任务
可以采用UCOS那种设一个最大优先级的办法

voidx 发表于 2009-12-16 20:34:26

每个优先级只对应了一个任务
-------------------------------

任务优先级可以相同。
优先级相同的任务执行顺序是 先就绪先执行。

假设3个任务A,B,C都就绪,且是就绪任务最高优先级,A先于B就绪(先进就绪队列),
B先于C就绪,那么在就绪队列排列顺序是A->B->C,
A最先执行,再当切换任务,A再进入就绪队列,排列顺序B->C->A,
B任务执行,再当切换任务,B再进入就绪队列,排列顺序C->A->B,
C任务执行,再当切换任务,C再进入就绪队列,排列顺序A->B->C,

ralfak 发表于 2009-12-16 22:02:13

嗯,你那个VOIDtask确实是这样,
这样就可以支持优先级继承了,
一般是在互斥量需要优先级继承
ABC三个任务,优先级由高到低,当A需要的互斥量被C拿着时,此时就应该提升互斥量占有者C的优先级与A相同,等C释放互斥量的时候把优先级还原,这个就是freertos的做法,voidtask也可以这么做
页: [1]
查看完整版本: 优先级反转会不会导致 任务一直不能运行,或者更严重后果,系统直接崩溃?