11 c testing embedded interrupt
我有一个中断处理模块,它控制嵌入式处理器上的中断控制器硬件.现在我想为它添加更多测试.目前,测试仅测试中断嵌套是否有效,方法是在ISR中进行两次软件中断,一次是低优先级,另一次是高优先级.如何进一步测试该模块?
我建议你尝试创造其他刺激.
通常,硬件中断也可以通过软件(自动测试)或调试器通过设置标志来触发.或者通过I/O作为中断.或者是定时器中断.或者,您可以在单步执行时通过调试器在中断控制器中设置中断位.
您可以对不应发生的事情添加一些运行时检查.有时候我会选择设置输出引脚进行外部监控(如果你有示波器或逻辑分析仪那就很好......)
low_prio_isr(void)
{
LOW_PRIO_ISR=1;
if (1 == HIGH_PRIO_ISR)
{ this may never happen. dummy statement to allow breakpoint in debugger }
}
high_prio_isr(void)
{
HIGH_PRIO_ISR=1
}
Run Code Online (Sandbox Code Playgroud)
软件中断的缺点是时刻是固定的; 总是一样的指令.我相信你希望看到它始终有效的证据; 无死锁.
对于中断服务程序,我发现代码评论非常有价值.最后,您只能测试您想象的情况,并且在某些时候测试的努力将非常高.众所周知,ISR难以调试.
我认为这是非常有用的,以提供测试如下: - ISR不被打断低优先级的中断 - ISR不被中断的相同优先级的中断 - 堆限制范围内最大嵌套计数 - ISR被更高优先级的中断打断.
您的一些测试可能会作为检测保留在代码中(因此您可以监视最大嵌套级别).
哦,还有一件事:我一般都设法让ISR保持如此短暂以至于我可以避免嵌套......如果可以,这将为您带来额外的简单性和更高的性能.
[编辑] 当然,ISR也需要在系统硬件上进行测试.除了逐位,逐步的方法,您可能需要证明: - 系统在最大中断负载下的稳定性(最好是预测的最大负载的几倍;如果您的115kbps串行驱动器也可以处理2MBps,那么您将会没问题!) - 启用/禁用isr的正确时刻,特别是如果系统也进入睡眠模式 - 中断数.如果添加机械开关,机械旋转(在达到稳定状态之前有数百个断开/接触时刻),可能会令人惊讶