什么是中断延迟
中断延迟是从中断触发到任务响应的完整时间链,包括 ISR 处理、事件投递、调度切换、任务唤醒等阶段。 在事件驱动模型中,延迟 = ISR 触发 → event 投递 → task 唤醒 → task 执行。
在 HRTOS v2 中,中断延迟测试用于评估从 ISR 触发到任务响应的系统级延迟。 通过事件驱动模型,测量在不同负载条件下的调度延迟稳定性,验证实时系统的性能指标。
系统运行三个任务:ISR 极简处理、response_task 响应中断事件、load_task 模拟调度压力。 通过统计 ISR 计数和任务计数,测量中断触发到任务响应的延迟时间。 验证 HRTOS 在不同负载下的实时性能和调度稳定性。
中断延迟是实时系统性能验证的核心指标
中断延迟(Interrupt Latency)是指从硬件中断触发到任务开始执行响应逻辑之间的时间间隔。 在 HRTOS 中,延迟包含 ISR 执行时间、事件投递时间、调度器切换时间和任务唤醒时间。 低延迟是实时系统的关键要求,直接影响系统的实时性和可预测性。
中断延迟是从中断触发到任务响应的完整时间链,包括 ISR 处理、事件投递、调度切换、任务唤醒等阶段。 在事件驱动模型中,延迟 = ISR 触发 → event 投递 → task 唤醒 → task 执行。
实时系统对响应时间有严格要求,延迟过高会导致系统无法及时响应外部事件。 通过延迟测试,可以评估系统在不同负载下的性能表现,验证调度器的实时性和稳定性。
延迟受多个因素影响:ISR 执行时间、调度器算法、任务优先级、系统负载、中断嵌套等。 通过优化这些因素,可以显著降低中断延迟,提高系统的实时响应能力。
HRTOS 通过 ISR 最小化、高效调度算法、优先级抢占等设计,实现低延迟响应。 事件驱动模型确保中断处理快速完成,任务层执行复杂逻辑,平衡实时性和功能性。
HRTOS 如何实现中断延迟测试
在 HRTOS v2 中,中断延迟测试的实现围绕 ISR 极简处理、事件投递机制、延迟测量统计和负载压力模拟四个核心环节展开。 每个环节都经过精心设计,确保测试结果的准确性和可靠性。
处理内容:统计 ISR 计数、翻转 LED、投递事件
处理原则:最小化 ISR 执行时间
执行限制:不执行复杂逻辑
设计目标:减少 ISR 对延迟的影响
投递方式:通过 os_event_set_from_isr() 投递事件
事件类型:使用 EVENT_IRQ 标志位
唤醒机制:自动唤醒等待的任务
通信模型:ISR 到任务的异步通信
测量方法:统计 ISR 计数和任务计数
计数变量:isr_cnt 和 task_cnt
延迟计算:通过计数差值评估延迟
LED 指示:通过 LED 翻转观察响应
负载任务:load_task 执行计算循环
压力来源:占用 CPU 时间
测试目的:模拟系统高负载场景
验证目标:评估负载对延迟的影响
中断延迟测试的完整执行路径
中断延迟测试的完整实现
INT0_ISR 中断服务程序,极简处理并投递事件
#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);
}
response_task 任务函数,等待中断事件并统计延迟
/* 响应任务(测延迟点) */
void response_task(void)
{
while(1)
{
os_event_wait(EVENT_IRQ, 0);
task_cnt++;
LED_TASK = ~LED_TASK;
}
}
load_task 任务函数,模拟系统调度压力
/* 负载任务(压力测试) */
void load_task(void)
{
volatile u16 i;
while(1)
{
LED_LOAD = ~LED_LOAD;
for(i = 0; i < 20000; i++);
}
}
hrtos_main 函数,初始化事件、使能中断并创建任务
/* 系统入口 */
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);
}
示例执行后的预期行为
使用本示例时需要关注的关键点
ISR 必须保持极简,仅执行必要的统计和事件投递。 ISR 执行时间过长会直接影响延迟测量结果,无法准确评估系统的实时性能。
response_task 使用中等优先级(优先级 5),load_task 使用低优先级(优先级 3)。 优先级设置需要合理,确保负载任务不会阻塞响应任务的及时执行。
load_task 的计算循环次数需要根据实际硬件调整,以模拟合适的系统负载。 负载过轻无法体现调度压力,负载过重可能导致系统响应过慢。
本示例通过计数统计评估延迟,实际应用中可以使用硬件定时器或高精度时钟进行精确测量。 计数方法适用于相对延迟评估,精确测量需要更专业的工具。
深入学习的相关资源