创建任务
在 HRTOS v2 中,任务创建是调度系统的入口点。 任务在创建后立即进入就绪队列,并由调度器参与CPU分配。
本示例行为(基于实际代码)
系统创建 task_demo 单任务系统
任务周期性翻转 LED,并通过 yield 触发调度切换
任务周期性翻转 LED,并通过 yield 触发调度切换
核心API: os_task_create · os_task_yield · task module
任务运行模型
task_demo 在无限循环中运行,每次循环执行 LED 翻转, 然后主动调用 yield 触发调度器重新选择任务。
调度触发方式
本示例的上下文切换来源于:
• os_task_yield(主动让出CPU)
• 系统调度点检测
任务执行流程
1. 系统初始化
hrtos_main 启动任务创建流程
2. TCB生成
创建 task_demo 对应任务控制块
3. 加入就绪队列
任务进入 Ready 状态等待调度
4. CPU分配
调度器选择 task_demo 进入 Running
5. 主循环执行
LED翻转 + 延时 + yield循环
相关API: os_task_get_state · os_task_yield · os_tick_get
演示代码
#include "hrtos.h"
#define TASK_ID 1
sbit LED = P1^0;
/* 任务函数 */
void task_demo(void)
{
u16 i;
while(1)
{
LED = ~LED; // 任务运行心跳灯
os_task_yield();
i=20000;
while(i--);
}
}
/* 系统初始化 */
void hrtos_main(void)
{
/* 创建任务 */
os_task_create((unsigned int)task_demo, TASK_ID, 3, 5);
}
系统本质
该示例验证 HRTOS v2 的基本调度能力: 单任务创建后进入调度系统,并通过 yield 触发上下文切换点。
核心机制:
• task_demo 独立任务栈
• Ready → Running 状态转换
• yield 触发调度重新选择
• task_demo 独立任务栈
• Ready → Running 状态转换
• yield 触发调度重新选择