Task Execution Core

上下文切换(Context Switch)

在 HRTOS v2 中,上下文切换由调度器触发,用于在 task_A 与 task_B 之间保存与恢复执行状态, 实现 LED 任务的交替运行。

本示例行为定义(基于实际代码)

系统运行两个任务:task_A 与 task_B
每个任务独立控制一个 LED,并通过延时循环形成可观察的切换效果。

相关API: os_task_create · os_task_yield · kernel task create

任务执行模型

task_A 与 task_B 均为无限循环任务,通过 LED 翻转 + 软件延时维持运行节奏, 调度器在任务切换点(yield / 时间片)进行上下文切换。

上下文切换触发点

本示例中主要触发来源为:
• 时间片调度(系统Tick)
• task yield 主动让出CPU

执行状态变化

Running → Ready → Running 的循环切换,使 LED_A 与 LED_B 交替变化。

运行流程(基于该示例真实行为)

1. 任务创建

hrtos_main 中创建 task_A 与 task_B,进入 Ready 状态。

2. 调度启动

调度器选择一个任务进入 Running 状态。

3. LED运行阶段

任务控制 LED 翻转,并执行软件延时循环。

4. 时间片/切换点触发

Tick 或 yield 导致 CPU 让出。

5. 上下文保存与恢复

保存当前任务状态,切换到另一个任务继续执行。

相关API: os_task_yield · os_delay · os_task_create

演示代码


#include "hrtos.h"

#define TASK_A 1
#define TASK_B 2

sbit LED_A = P1^0;
sbit LED_B = P1^1;

/* Task A */
void task_A(void)
{
	u16 i;
	P1=0XFF;
    while(1)
    {
        LED_A = ~LED_A;   // Çл»AµÆ×´Ì¬
        i=2000;
		while(i--);

    }
}

/* Task B */
void task_B(void)
{
	u16 i;
    while(1)
    {
        LED_B = ~LED_B;   // Çл»BµÆ×´Ì¬        
        i=2000;
		while(i--);        
		
    }
}

/* 系统入口页 */
void hrtos_main(void)
{

    os_task_create((unsigned int)task_A, TASK_A, 3, 2);
    os_task_create((unsigned int)task_B, TASK_B, 3, 2);
	
}

系统本质说明

本示例的核心不是 LED,而是验证 HRTOS v2 中: 两个独立任务在同一CPU上通过调度器实现交替执行

关键机制:
• task_A / task_B 独立栈
• 调度器基于Ready队列选择任务
• 上下文切换保存寄存器 + 恢复执行点