H HRTOS 示例
Scheduling Core

优先级调度演示

HRTOS 调度器基于 READY 队列优先级选择机制,高优先级任务可在时间片边界触发抢占执行。 通过优先级调度,确保高实时性任务优先获得 CPU 执行权。

示例目标

系统运行两个任务:低优先级任务和高优先级任务,分别控制不同的 LED。 高优先级任务通过更短的延时周期体现抢占式调度的特性,展示 HRTOS 抢占式内核的核心基础。

核心API os_task_create
调度触发 优先级抢占
状态转换 Ready → Running
队列机制 READY队列扫描

核心机制

  • READY队列优先级扫描
  • 高优先级任务抢占
  • 上下文切换执行
  • 实时性任务保障
Scheduling Definition

调度机制定义

HRTOS 调度器的核心定义

调度机制是 HRTOS 抢占式内核的核心基础,通过 READY 队列扫描、优先级比较和上下文切换三个关键环节, 实现高优先级任务优先获得 CPU 执行权。

调度公式: Scheduling = READY队列扫描 + 优先级比较 + os_switch上下文切换

READY队列扫描

调度器定期扫描 READY 队列,获取所有就绪任务的优先级信息, 为优先级比较提供数据基础。

优先级比较

通过比较 READY 队列中任务的优先级,选择最高优先级任务作为下一个执行对象, 确保高实时性任务优先执行。

上下文切换

调用 os_switch 函数完成任务切换,保存当前任务上下文, 恢复目标任务上下文,实现任务间的无缝切换。

抢占执行

高优先级任务可在时间片边界触发抢占执行,确保高实时性任务能够及时获得 CPU 资源, 满足实时性要求。

Scheduling Flow

调度流程

任务从创建到调度执行的完整流程

1任务进入READY:任务创建后进入就绪队列等待调度
2优先级扫描:调度器从READY队列选择最高优先级任务
3抢占判断:高优先级READY任务触发抢占条件
4上下文切换:调用 os_switch 完成任务切换
任务创建 → READY队列 → 优先级扫描 → 抢占判断 → os_switch → 上下文切换 → 目标任务执行
Execution Model

执行模型

不同优先级任务的执行行为模型

1创建低优先级任务:进入READY队列(优先级1)
2创建高优先级任务:进入READY队列(优先级3)
3调度器运行:优先级3任务优先执行
4持续抢占:高优先级任务周期性获得CPU
低优先级任务 优先级为1,执行频率较低,体现被抢占的特性
高优先级任务 优先级为3,执行频率较高,体现抢占式调度的优势
调度策略 基于优先级的抢占式调度,确保高实时性任务优先执行
Demo Code

演示代码

优先级调度的完整实现

任务函数实现

task_low 和 task_high 任务函数,分别控制不同的 LED,体现优先级差异

#include "hrtos.h"

sbit LED_HIGH = P1^0;
sbit LED_LOW  = P1^1;

void task_low(void)
{
    while(1)
    {
        LED_LOW = ~LED_LOW;   // 慢闪
        os_delay(20);
    }
}

void task_high(void)
{
    while(1)
    {
        LED_HIGH = ~LED_HIGH; // 快闪(体现抢占更频繁)
        os_delay(5);
    }
}

系统初始化与任务创建

hrtos_main 函数,创建两个不同优先级的任务并启动调度系统

void hrtos_main(void)
{
    LED_LOW = 0;
    LED_HIGH = 0;

    os_task_create((unsigned int)task_low,  1, 1, 5);
    os_task_create((unsigned int)task_high, 2, 3, 5);
}
System Significance

系统意义

优先级调度在 HRTOS 中的重要作用

实时性保障 优先级调度确保高实时性任务优先获得CPU执行权
抢占式内核 是HRTOS抢占式内核的核心基础,支持任务抢占执行
资源分配 通过优先级机制合理分配CPU资源,提高系统效率
核心价值: 优先级调度确保高实时性任务优先获得CPU执行权,是HRTOS抢占式内核的核心基础, 为实时系统提供了可靠的调度机制。
Important Notes

注意事项

使用本示例时需要关注的关键点

优先级设置

低优先级任务使用优先级1,高优先级任务使用优先级3。 优先级数值越大,优先级越高。合理设置优先级对系统实时性至关重要。

延时参数

低优先级任务使用 os_delay(20),高优先级任务使用 os_delay(5)。 不同的延时参数体现了优先级差异,高优先级任务执行频率更高。

抢占时机

抢占发生在时间片边界,高优先级任务会在时间片到期时触发抢占。 理解抢占时机有助于优化任务调度策略。

READY队列管理

调度器通过扫描READY队列选择最高优先级任务,确保高优先级任务优先执行。 READY队列的管理效率直接影响调度性能。