定时器(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