H HRTOS 示例
Real-Time Core

实时调度演示

HRTOS v2 的实时性建立在 Tick 驱动 + WAIT恢复机制之上, 任务在周期性 WAIT/READY 切换中形成可预测执行节奏。 通过 Tick 驱动和 WAIT 恢复机制,保证任务响应能力和执行节奏的稳定性。

示例目标

系统运行一个实时任务,通过周期性的 WAIT/READY 切换展示 HRTOS v2 的实时调度机制。 任务在运行窗口和等待周期之间循环,体现可预测的执行节奏,验证 Tick + WAIT 恢复机制的有效性。

核心API os_delay
驱动机制 Tick驱动
状态转换 WAIT ↔ READY
执行节奏 周期性可预测

核心机制

  • Tick驱动调度
  • WAIT周期阻塞
  • READY窗口执行
  • 可预测执行节奏
Real-Time Model

实时模型定义(v2)

HRTOS v2 实时调度的核心定义

HRTOS v2 的实时性不依赖独立调度器,而是由 Tick 驱动和 WAIT 恢复机制共同保证执行节奏的稳定性。 通过这三个关键环节,实现可预测的实时任务调度。

实时公式: Real-Time = Tick驱动 + WAIT周期阻塞 + READY窗口执行

Tick驱动

系统时钟 Tick 提供时间基准,驱动整个调度系统。 Tick 中断定期触发,为任务调度提供时间精度保障。

WAIT周期阻塞

任务通过 os_delay 进入 WAIT 状态,在阻塞队列中等待。 WAIT 状态下任务不占用 CPU,允许其他任务执行。

READY窗口执行

Tick 计数到期后,任务从 WAIT 恢复到 READY 状态, 进入就绪队列等待调度器选择执行。

可预测节奏

通过周期性的 WAIT/READY 切换,任务形成稳定的执行节奏。 这种可预测性是实时系统的重要特征。

Execution Behavior

执行行为

实时任务的完整执行周期

1RUNNING阶段:任务占用CPU执行逻辑
2WAIT阶段:调用 os_delay 进入阻塞队列
3Tick恢复:系统Tick递减等待计数
4READY重新调度:恢复后进入READY队列等待执行
Tick → WAIT计数更新 → READY恢复 → os_dispatch → os_switch
RUNNING状态 任务占用CPU执行核心逻辑,这是任务的活跃执行阶段
WAIT状态 任务进入阻塞队列,不占用CPU,等待Tick计数到期
READY恢复 Tick计数到期后,任务从WAIT恢复到READY状态
Demo Code

演示代码

实时调度的完整实现

实时任务函数实现

task_rt 任务函数,通过周期性的 WAIT/READY 切换展示实时调度特性

#include "hrtos.h"

sbit LED_RT = P1^0;

void task_rt(void)
{
    while(1)
    {
        LED_RT = 1;      // 运行窗口
        os_delay(10);     // 模拟实时执行窗口

        LED_RT = 0;      // 等待周期
        os_delay(40);
    }
}

系统初始化与任务创建

hrtos_main 函数,创建实时任务并启动调度系统

void hrtos_main(void)
{
    LED_RT = 0;

    os_task_create((unsigned int)task_rt, 1, 2, 5);
}
System Significance

系统意义

实时调度在 HRTOS 中的重要作用

不依赖独立调度器 实时性在 HRTOS v2 中不依赖独立调度器,简化系统设计
Tick + WAIT机制 由 Tick + WAIT恢复机制共同保证执行节奏稳定性
可预测执行 任务在周期性 WAIT/READY 切换中形成可预测执行节奏
核心价值: 实时性在 HRTOS v2 中不依赖独立调度器,而由 Tick + WAIT恢复机制共同保证执行节奏稳定性, 为实时系统提供了简洁而可靠的调度机制。
Important Notes

注意事项

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

Tick 配置

系统 Tick 频率直接影响实时任务的精度。合理配置 Tick 频率对保证实时性至关重要, 过高会增加系统开销,过低会影响调度精度。

延时参数

示例中使用 os_delay(10) 和 os_delay(40) 分别模拟运行窗口和等待周期。 实际应用中应根据任务需求调整延时参数,确保执行节奏满足实时性要求。

WAIT 阻塞机制

WAIT 状态下任务不占用 CPU,这是实现多任务并发的基础。 理解 WAIT 阻塞机制有助于优化任务设计和系统性能。

READY 窗口执行

任务恢复到 READY 状态后,需要等待调度器选择才能执行。 READY 窗口的长度取决于系统负载和调度策略,需要合理规划。