在 HRTOS 测试框架的持续完善过程中,今天对所有普通中断验证程序进行了统一检查与修改,为中断处理入口增加中断来源校验。
这次修改的目的很明确:当实际进入的中断与当前测试预期不一致时,立即退出当前中断处理流程,避免非预期中断执行后续测试逻辑,干扰验证结果,甚至导致测试中止。
一、问题背景
在嵌入式操作系统的中断测试中,测试程序通常需要验证特定中断的响应行为,例如中断响应时间、中断嵌套、任务切换以及调度过程中的中断处理。
这些测试往往依赖 GPIO 电平变化、计数变量或其他测试标记来记录执行过程。
但在实际测试中,中断处理程序不能仅仅假设自己进入的就是预期中断。
如果中断来源与当前测试逻辑不一致,仍然继续执行后续操作,就可能污染测试数据,影响测试流程,甚至导致测试异常终止。
因此,有必要在普通中断验证程序的入口处增加明确的中断来源检查。
二、统一增加中断来源校验
本次修改采用以下代码:
/* 如果不是预期的 INT1 入口,直接退出中断 */
if(os_interrupt_id() != 2)
{
os_interrupt_exit();
}
其中,os_interrupt_id() 用于获取当前中断来源。
HRTOS 测试框架使用以下编号约定:
-
0:INT0 -
2:INT1
因此,对于预期由 INT1 触发的普通中断验证程序,首先检查当前中断来源是否为 2。
如果不是预期的 INT1,就调用 os_interrupt_exit() 退出当前中断处理流程,不再执行后续测试代码。
对于预期由 INT0 触发的验证程序,则应使用对应的判断:
/* 如果不是预期的 INT0 入口,直接退出中断 */
if(os_interrupt_id() != 0)
{
os_interrupt_exit();
}
这样可以让不同中断验证程序按照各自的预期入口执行测试逻辑,减少中断来源不匹配造成的干扰。
三、为什么要在入口处检查?
将校验放在普通中断验证程序的入口处,有三个主要作用。
1. 避免非预期中断执行测试逻辑
中断来源不符合预期时,程序立即退出,不再继续修改测试标记、计数变量或 GPIO 状态。
2. 提高测试结果的可信度
中断验证的重点是测量指定中断的响应与执行行为。如果其他中断也进入相同的测试逻辑,就可能影响测试数据。入口校验可以减少这类干扰。
3. 统一测试程序的防护规则
将同一原则应用到所有普通中断验证程序,可以减少不同测试用例之间的处理差异,使测试框架更容易维护。
需要说明的是,这项措施主要用于隔离非预期中断与当前测试逻辑,并不能单独保证整个测试一定不会中止。中断嵌套、共享变量竞争、栈空间和中断退出路径等问题,仍然需要独立验证。
四、这次修改的意义
HRTOS 测试框架的完善,不只是增加新的测试项目,也包括持续检查现有测试程序的边界条件。
对于中断验证而言,测试程序本身也必须具备清晰的入口约束。只有先确认中断来源,再执行对应的测试操作,才能更好地保证测试逻辑与实际中断行为一致。
这次修改没有改变内核的中断调度机制,而是在测试层增加统一的中断来源校验,属于针对测试可靠性的防护性改进。
五、总结
本次 HRTOS 测试框架更新,对所有普通中断验证程序统一增加了中断来源检查。
通过 os_interrupt_id() 判断当前中断是否符合预期,并在不匹配时调用 os_interrupt_exit() 退出当前中断处理流程,可以避免非预期中断继续执行测试逻辑,减少测试数据受到干扰的风险。
对于实时操作系统,可靠性验证不仅需要关注内核是否正确运行,也需要关注测试程序能否准确识别并隔离非预期情况。
持续完善这些细节,才能让 HRTOS 的中断验证体系更加规范、可靠。