在实时操作系统中,任务优先级直接影响任务的运行顺序和抢占关系。
HRTOS 针对 8051 平台设计了明确的优先级体系,并将普通任务、高速任务、中断任务以及中断嵌套任务划分到不同的优先级区间。
本文对 HRTOS 的任务优先级定义、指定任务优先级、时间片模式以及优先级模式进行说明。
一、HRTOS 优先级定义
HRTOS 采用:
优先级数值越大,优先级越高。
当前优先级划分如下:
| 优先级 | 类型 | 说明 |
|---|---|---|
| 0 | Idle | 空闲任务 |
| 1~7 | 普通任务 | 普通应用任务 |
| 8 | 高速任务 | 高速任务 |
| 9 | 中断任务 | 中断处理 |
| 10 | 中断嵌套任务 | 嵌套中断处理 |
可以直观表示为:
优先级 10 ── 中断嵌套任务 优先级 9 ── 中断任务 优先级 8 ── 高速任务 优先级 1~7 ── 普通任务 优先级 0 ── Idle因此:
10 > 9 > 8 > 7 > ... > 1 > 0需要注意的是,优先级 9 和 10 并不是普通意义上的应用任务优先级,而是 HRTOS 内部对中断处理过程进行管理时使用的运行级别。
二、优先级 0:Idle 任务
优先级 0 专用于 Idle 任务。
当系统中没有其他可以运行的任务时,CPU 进入 Idle 任务。
因此,Idle 位于整个 HRTOS 优先级体系的最低位置:
普通任务 > Idle 高速任务 > Idle 中断任务 > Idle 中断嵌套任务 > IdleIdle 也可以作为系统空闲时间的基础,用于执行相应的空闲处理机制。
三、优先级 1~7:普通任务
优先级 1~7 用于普通任务。
例如:
任务A → 优先级2 任务B → 优先级5 任务C → 优先级7在优先级模式下:
任务C ↓ 优先级 7 ↓ 可以抢占 ↓ 任务B ↓ 优先级 5因此,在优先级模式下,优先级越高的普通任务具有越高的运行权。
四、优先级 8:高速任务
优先级 8 专用于 HRTOS 高速任务。
高速任务位于普通任务和中断任务之间:
普通任务 ↓ 优先级 1~7 ↓ 高速任务 ↓ 优先级 8 ↓ 中断任务 ↓ 优先级 9这样设计可以使高速任务具有明显高于普通任务的运行级别,同时仍然低于中断处理过程。
高速任务同时结合 8051 独立寄存器组机制,可以进一步降低部分任务切换开销。
五、优先级 9:中断任务
优先级 9 用于 HRTOS 的中断处理过程。
当系统正在执行普通任务,而外部中断等中断事件发生时,可以进入中断处理过程。
例如:
普通任务 ↓ 外部中断0触发 ↓ 进入中断任务 ↓ 优先级 9因此,中断处理优先级高于普通任务以及高速任务。
六、优先级 10:中断嵌套任务
优先级 10 是 HRTOS 优先级体系中的最高级别,用于中断嵌套处理。
但这里有一个非常重要的机制:
优先级 10 并不是任何时候发生中断都会进入。
中断嵌套只有在系统当前已经处于:
中断处理过程
HRTOS 内核运行过程
时,才会进入对应的嵌套中断处理级别。
七、普通任务运行时发生中断
假设当前 CPU 正在运行普通任务:
普通任务 优先级 1~7此时外部中断 0 触发。
系统进入:
普通任务 ↓ 外部中断0 ↓ 中断任务 ↓ 优先级9此时不会直接进入优先级 10 的中断嵌套任务。
也就是说:
普通任务运行期间发生中断,进入的是中断任务,而不是中断嵌套任务。
八、中断处理期间再次发生高优先级中断
假设系统已经处于中断处理过程:
普通任务 ↓ 中断任务 ↓ 优先级9此时,如果再次发生满足条件的高优先级中断,则可以进入中断嵌套处理:
中断任务 ↓ 高优先级中断触发 ↓ 中断嵌套任务 ↓ 优先级10此时系统运行级别变为最高的优先级 10。
可以理解为:
普通任务 ↓ 中断 ↓ 中断任务(9) ↓ 再次发生高优先级中断 ↓ 中断嵌套任务(10)九、内核运行期间发生中断
HRTOS 内核运行期间,同样可能进入中断嵌套处理级别。
也就是说,中断嵌套的触发条件不仅包括:
当前正在执行中断还包括:
当前正在执行 HRTOS 内核因此,中断嵌套主要服务于已经处于中断或内核运行环境下的更高优先级中断事件。
十、指定任务优先级
HRTOS 还存在指定任务优先级的调度方式。
在这种情况下,指定任务的优先级位于:
高速任务 ↓ 指定任务优先级 ↓ 中断任务也就是说,它处于高速任务与中断任务之间的优先级区域。
这种机制与普通的 1~7 级应用任务不同,主要用于需要进行更明确调度控制的场景。
十一、时间片模式与优先级模式
HRTOS 的任务运行还涉及两种不同的调度思路:
时间片模式
优先级模式
两种模式的核心区别是:
优先级模式强调优先级抢占,时间片模式强调不同优先级之间的运行时间分配。
因此,不能简单地认为“优先级越高,任务就一定一直运行”。
两种模式的运行规则不同。
十二、优先级模式
在优先级模式下:
高优先级任务可以抢占低优先级任务。
例如:
任务A → 优先级3 任务B → 优先级6当任务 A 正在运行时,如果任务 B 满足运行条件:
任务A(3) ↓ 任务B(6)就绪 ↓ 任务B抢占任务A因为:
6 > 3所以任务 B 获得运行权。
这种模式更加突出实时系统中经典的优先级抢占机制。
十三、时间片模式
时间片模式并不是完全按照优先级高低来决定运行顺序。
在时间片模式下:
优先级越高的任务,可以获得更多的时间片。
例如系统中存在:
任务A → 优先级2 任务B → 优先级4 任务C → 优先级6时间片模式并不是简单地:
C一直运行 ↓ B一直运行 ↓ A一直运行而是根据任务优先级分配不同的运行时间。
可以理解为:
优先级6 → 获得较多时间片 优先级4 → 获得中等时间片 优先级2 → 获得较少时间片因此,时间片模式兼顾了任务优先级和任务运行机会。
十四、两种模式的核心区别
可以通过下面的方式理解:
| 调度模式 | 核心特点 |
|---|---|
| 优先级模式 | 高优先级任务可以抢占低优先级任务 |
| 时间片模式 | 不完全按照优先级运行,高优先级任务获得更多时间片 |
因此,两种模式适用于不同的应用需求。
如果应用更加关注:
谁的优先级最高 ↓ 谁立即获得运行权则更符合优先级模式的特点。
如果应用希望多个就绪任务都获得一定运行机会,同时让高优先级任务获得更多 CPU 时间,则时间片模式更加符合这种调度思路。
十五、HRTOS 完整优先级体系
综合来看,HRTOS 可以形成如下运行级别:
优先级最高 │ ▼ ┌──────────────┐ │ 中断嵌套 10 │ ├──────────────┤ │ 中断任务 9 │ ├──────────────┤ │ 高速任务 8 │ ├──────────────┤ │ 普通任务 1~7 │ ├──────────────┤ │ Idle 0 │ └──────────────┘ ▲ │ 优先级最低其中,中断嵌套任务并不是普通任务,而是只有在特定运行环境下才会进入的最高优先级处理级别。
十六、总结
HRTOS 的优先级体系并不是简单地给每个任务分配一个数字,而是结合 8051 的任务调度、中断处理和实时响应机制进行了划分。
其基本优先级关系为:
10 → 中断嵌套 9 → 中断 8 → 高速任务 1~7 → 普通任务 0 → Idle同时需要注意:
优先级数值越大,优先级越高
普通任务使用 1~7 级
高速任务使用 8 级
中断任务使用 9 级
中断嵌套使用 10 级
普通任务运行时发生中断,进入中断任务
只有在中断或 HRTOS 内核运行期间发生满足条件的高优先级中断,才进入中断嵌套任务
优先级模式以高优先级抢占低优先级为主要特征
时间片模式不会完全按照优先级运行,而是根据优先级分配不同的时间片
指定任务优先级位于高速任务和中断任务之间
通过这种分层方式,HRTOS 将普通任务、高速任务、中断以及中断嵌套纳入统一的运行级别体系,同时针对不同应用需求提供优先级调度和时间片调度机制。
这也是 HRTOS 面向 8051 实时应用进行底层调度设计的重要组成部分。