中断入口机制(ISR → Task Model)
HRTOS采用“中断事件化”设计:ISR仅负责投递事件,实际逻辑由高优先级任务执行。
机制定义
Interrupt Entry = 硬件触发 → ISR最小化处理 → 事件投递 → 任务接管执行
设计原则
ISR只做三件事:采样 / 投递 / 退出
禁止ISR中执行复杂逻辑
中断逻辑统一迁移至Task层处理
相关 API(v2)
ISR事件投递
中断状态查询
中断调度请求
执行流程
IRQ Trigger → ISR Entry → os_event_set_from_isr() → ISR Exit → Scheduler → Task Run
演示代码
#include "hrtos.h"
sbit LED_INT = P1^0;
sbit LED_TASK = P1^1;
#define TASK_WAIT 1
#define TASK_INT 2
#define PRIO_WAIT 6
#define PRIO_INT 9
#define STACK_SIZE 5
#define EVENT_IRQ 1
static u16 irq_count = 0;
/* =========================
* 任务:处理IRQ事件
* ========================= */
void wait_task(void)
{
while(1)
{
os_event_wait(EVENT_IRQ, 0);
irq_count++;
LED_TASK = ~LED_TASK;
}
}
/* =========================
* INT0 ISR(极简)
* ========================= */
void INT0_ISR(void)
{
os_event_set_from_isr(EVENT_IRQ);
LED_INT = ~LED_INT;
os_schedule_request(); // 可选:请求调度
}
/* =========================
* 系统入口
* ========================= */
void hrtos_main(void)
{
LED_INT = 0;
LED_TASK = 0;
os_event_init(EVENT_IRQ);
os_task_create(wait_task, TASK_WAIT, PRIO_WAIT, STACK_SIZE);
IT0 = 1;
EX0 = 1;
}
系统意义
将中断处理从“执行逻辑”转为“事件触发”,显著降低ISR执行时间,提高系统实时性与可预测性。