系统节拍机制(Tick System)
Tick System 是 HRTOS 的唯一时间基准源,由硬件定时器中断驱动, 用于调度触发、延时递减与系统时间推进。
机制定义
Tick = Hardware Timer Interrupt + Kernel Time Base + Scheduler Trigger
所有时间行为(delay / timeout / wait)均依赖 Tick 驱动,而不是软件轮询。
核心作用
时间基准
提供统一系统时间源(os_tick_get / uptime)。
调度触发
Tick 中断结束后触发调度检查。
延时递减
delay 队列在 Tick 中自动递减。
时间片控制
支持抢占式时间片轮转调度。
执行流程
1. 硬件定时器触发
Timer1 周期性产生 Tick 中断。
2. Tick计数更新
系统时间递增(kernel time base)。
3. 阻塞队列处理
delay / wait timeout 递减。
4. 调度器检查
判断是否发生任务切换。
演示代码
#include "hrtos.h"
sbit LED_TICK = P1^0;
sbit LED_1S = P1^1;
sbit LED_RUN = P1^2;
static volatile u32 g_tick = 0;
/* Timer1 ISR = Tick Source */
void timer1_isr(void)
{
g_tick++;
LED_TICK = ~LED_TICK;
os_interrupt_exit(); // 触发调度点
}
/* uptime API */
u32 os_uptime_ms(void)
{
return g_tick;
}
/* busy delay(仅用于演示,不推荐生产) */
void task_delay_ms(u16 ms)
{
u32 start = g_tick;
while ((g_tick - start) < ms);
}
void task_led_demo(void)
{
u32 t1 = 0, t2 = 0;
while(1)
{
u32 now = os_uptime_ms();
if(now - t2 >= 1)
{
t2 = now;
LED_RUN = ~LED_RUN;
}
if(now - t1 >= 10)
{
t1 = now;
LED_1S = ~LED_1S;
}
task_delay_ms(1);
}
}
/* system entry */
void hrtos_main(void)
{
LED_TICK = 0;
LED_1S = 0;
LED_RUN = 0;
g_tick = 0;
/* Timer1 init */
TMOD |= 0x10;
TH1 = 0xFC;
TL1 = 0x66;
ET1 = 1;
EA = 1;
TR1 = 1;
/* Tick ISR as kernel task */
os_task_create((unsigned int)timer1_isr, 0, 9, 0);
/* demo task */
os_task_create((unsigned int)task_led_demo, 1, 2, 5);
}
API 对照(v2)
Time Core API
Interrupt Core
系统意义
Tick 是 HRTOS 的“唯一时间源”,所有调度行为最终都回归 Tick 驱动。
这是实时系统确定性的基础。