H HRTOS 示例
Task Execution Core

任务状态

在 HRTOS v2 中,任务状态不是静态分类,而是调度器基于 READY 与 WAIT 系统动态推导的运行结果。 本示例深入分析任务在 READY、RUNNING 与 WAIT 阻塞之间的调度转换行为。

示例目标

系统创建 task_demo 单任务系统,任务周期性翻转 LED,并通过 delay 进入 WAIT 阻塞状态。 验证 HRTOS v2 的统一 WAIT 模型:任务状态简化为调度结果,所有阻塞来源统一管理。

核心API os_task_get_state
阻塞机制 os_delay / os_wait
状态转换 Ready ↔ Running ↔ Wait
统一模型 WAIT 队列管理

核心机制

  • READY ↔ RUNNING 调度转换
  • WAIT 统一阻塞模型
  • 资源系统恢复机制
  • 任务生命周期管理
State Model

状态模型(v2真实定义)

HRTOS v2 统一阻塞模型

核心模型: RUNNING ←→ READY ←→ WAIT(统一阻塞模型)

核心API: os_task_get_state · os_delay · os_wait · os_task_yield

状态本质

READY:可调度
RUNNING:正在执行
WAIT:因 delay / event / mutex 等统一阻塞

设计核心

HRTOS v2 不再区分多种 BLOCKED 子状态,而统一进入 WAIT 队列,由资源系统恢复。

State Transitions

状态转换行为

任务状态之间的转换关系

1RUNNING → WAIT:调用 os_delay / os_wait / mutex 等
2WAIT → READY:时间到或事件满足
3READY → RUNNING:调度器选择最高优先级任务
4RUNNING → READY:os_task_yield 或时间片抢占
RUNNING → WAIT → READY → RUNNING(循环转换)
Demo Code

演示代码

任务状态转换的完整实现

任务状态演示

task_demo 任务函数,展示 RUNNING ↔ WAIT 状态转换

#include "hrtos.h"

sbit LED_RUN = P1^0;

/* 任务:状态演示 */
void task_demo(void)
{
    while(1)
    {
        /* 运行态:进入CPU */
        LED_RUN = 1;

        os_delay(3);   // 进入延时 → 阻塞态

        /* 从延时恢复 */
        LED_RUN = 0;

        os_delay(3);
    }
}

/* 系统入口 */
void hrtos_main(void)
{
    LED_RUN = 0;

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

系统意义

统一 WAIT 模型的核心价值

任务状态机制的核心价值在于:用统一 WAIT 模型替代传统多分类阻塞状态。

核心优势: ✔ 状态简化为调度结果
✔ WAIT统一管理所有阻塞来源
✔ READY仅表示"可运行"