定时器(Timer)
基于 Tick + wait_tick 的延时与超时机制(HRTOS 实现)
概述
HRTOS 中没有独立的 timer 对象体系(如 create/start/stop API), 定时功能由 Tick System + wait_tick + 调度标志统一实现。
Timer 的本质是“任务阻塞时间控制 + Tick递减唤醒机制”, 同时 Fast Task 使用独立计数数组实现轻量延时。
核心机制
Tick ISR
↓
遍历 OS_TASK[]
↓
wait_tick--
↓
==0 ?
↓
READY + 唤醒任务
↓
进入调度
Timer 不存在独立队列结构,所有延时统一由 OS_TASK.wait_tick 驱动。
你的系统本质是:Tick 驱动的“任务级软件定时器”,而不是独立 timer 模块。
实际实现结构
typedef struct {
u8 state;
u8 wait_type;
u8 wait_obj;
u16 wait_tick;
u8 wait_flag;
} OS_TCB;
Timer = OS_TCB.wait_tick + WAIT 状态机
Tick驱动逻辑
for(all tasks)
{
if(state == WAIT)
{
if(wait_tick > 0)
wait_tick--;
if(wait_tick == 0)
{
wait_flag = TIMEOUT;
state = READY;
}
}
}
Tick ISR 是唯一驱动源,Timer 不单独存在。
快速任务延时
OS_WAIT_DI2[0]--;
OS_WAIT_DI2[1]--;
if(OS_WAIT_DI2[i] == 0)
{
OS_KUAI_PROCESS_A = 1;
}
Fast Task 是独立于 OS_TASK 的轻量计时通道,用于极短延迟控制。
阻塞机制(Timer相关)
os_wait(WAIT_DELAY, ..., tick)
{
OS_TASK[tid].wait_tick = tick;
OS_TASK[tid].state = WAIT;
OS_PROCESS_OK[tid] = 0;
TF0 = 1; // 触发调度
}
Timer 的入口是 os_wait(),而不是独立 timer API。
时间系统结构
Time System
├─ Tick System
├─ Delay (wait_tick)
└─ Timer (same mechanism)
Delay / Timer / Timeout 在实现上完全统一。
© 2017–2026 HRTOS