中断延迟测试(ISR → Task Latency)

测量HRTOS从中断触发到任务响应之间的系统级延迟(事件驱动模型)。

机制定义

Latency = ISR触发 → event投递 → task唤醒 → task执行

测试模型

ISR只负责事件投递
任务负责统计与处理
负载任务用于模拟调度压力

相关 API(v2)

事件初始化

os_event_init()

ISR事件投递

os_event_set_from_isr()

事件等待

os_event_wait()

时间系统

os_tick_get()

执行流程

IRQ → ISR → os_event_set_from_isr → Scheduler → Task Wake → Measurement

演示代码

#include "hrtos.h"

sbit LED_ISR  = P1^0;
sbit LED_TASK = P1^1;
sbit LED_LOAD = P1^2;

#define EVENT_IRQ 1

static u16 isr_cnt = 0;
static u16 task_cnt = 0;

/* =========================
 * ISR(极简)
 * ========================= */
void INT0_ISR(void)
{
    isr_cnt++;

    LED_ISR = ~LED_ISR;

    os_event_set_from_isr(EVENT_IRQ);
}

/* =========================
 * 响应任务(测延迟点)
 * ========================= */
void response_task(void)
{
    while(1)
    {
        os_event_wait(EVENT_IRQ, 0);

        task_cnt++;

        LED_TASK = ~LED_TASK;
    }
}

/* =========================
 * 负载任务(压力测试)
 * ========================= */
void load_task(void)
{
    volatile u16 i;

    while(1)
    {
        LED_LOAD = ~LED_LOAD;

        for(i = 0; i < 20000; i++);
    }
}

/* =========================
 * 系统入口
 * ========================= */
void hrtos_main(void)
{
    os_event_init(EVENT_IRQ);

    IT0 = 1;
    EX0 = 1;

    os_task_create(INT0_ISR, 1, 9, 5);
    os_task_create(response_task, 2, 5, 5);
    os_task_create(load_task, 3, 3, 5);
}

系统意义

该测试用于评估 HRTOS 在不同负载下的调度延迟稳定性,是实时系统性能验证核心指标。