中断入口机制(ISR → Task Model)

HRTOS采用“中断事件化”设计:ISR仅负责投递事件,实际逻辑由高优先级任务执行。

机制定义

Interrupt Entry = 硬件触发 → ISR最小化处理 → 事件投递 → 任务接管执行

设计原则

ISR只做三件事:采样 / 投递 / 退出
禁止ISR中执行复杂逻辑
中断逻辑统一迁移至Task层处理

相关 API(v2)

ISR事件投递

os_event_set_from_isr()

中断状态查询

os_in_isr()

中断调度请求

os_schedule_request()

执行流程

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执行时间,提高系统实时性与可预测性。