时间片轮转演示(Round Robin)
时间片轮转用于验证同优先级任务的公平调度机制。 在相同优先级下,通过Tick驱动实现任务轮流执行。
机制定义
Round Robin = 同优先级Ready队列 + 时间片计数 + Tick触发调度 + os_switch切换
相关API(API_V2): os_switch · os_dispatch_id · os_delay · os_tick_get
调度特性
同优先级任务队列
多个任务进入同一Ready链表。
时间片轮转执行
每个任务占用固定时间片运行。
Tick驱动切换
系统Tick触发调度器重新选择任务。
公平调度模型
所有任务平均获得CPU时间。
RR链路:Ready Queue → Time Slice → Tick Interrupt → os_dispatch_id → os_switch → Next Task
执行流程
任务创建
三个同优先级任务进入系统。
调度启动
系统进入Round Robin模式。
时间片运行
每个任务按Tick轮流执行。
持续循环
任务不断在CPU之间切换。
演示代码
#include "hrtos.h"
sbit LED_A = P1^0;
sbit LED_B = P1^1;
sbit LED_C = P1^2;
void task_a(void)
{
while(1)
{
LED_A = ~LED_A;
os_task_yield();
}
}
void task_b(void)
{
while(1)
{
LED_B = ~LED_B;
os_task_yield();
}
}
void task_c(void)
{
while(1)
{
LED_C = ~LED_C;
os_task_yield();
}
}
void hrtos_main(void)
{
LED_A = LED_B = LED_C = 0;
os_task_create((unsigned int)task_a, 1, 1, 5);
os_task_create((unsigned int)task_b, 2, 1, 5);
os_task_create((unsigned int)task_c, 3, 1, 5);
}
系统意义
时间片轮转解决同优先级任务饥饿问题,实现CPU资源公平分配与稳定响应。
内核机制: os_switch · Round Robin · Scheduling Flow