你怎么测试你的中断处理模块?
题
我有一个中断处理模块,其控制的嵌入式处理器上的中断控制器硬件。现在,我想更多的测试添加到它。目前,如果中断嵌套的工作原理是使两个软件测试只测试从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
}
软件中断的缺点是,当下是固定的;总是相同的指令。我相信你想看到的证据表明,它始终工作;无死锁。
有关中断服务程序,我觉得代码审查非常有价值的。最后,你只能测试你想象中的情况,在某些时候测试的工作量会非常高。中断服务程序是出了名的难以调试。
我认为这是有用的,以提供用于以下测试: - ISR不被中断低优先级的中断 - ISR不被中断的相同优先级的中断 - ISR中断更高的优先级中断 - 堆限制范围内最大嵌套数
你的一些测试可能会留在代码仪表(这样就可以监视例如最大嵌套级别。
哦,还有一件事:我一般设法保持的ISR这么短的嵌套,我可以不要....如果你可以在此将获得额外的你简单性和更高的性能。
<强> [编辑] 强> 当然,需要的ISR系统硬件进行测试了。除了逐位,一步一步的方法你可能想证明: - 在最大中断负载系统的稳定性(最好是几次的预测最大负荷;如果您的115kbps的串口驱动程序也可以处理2Mbps的你会没事的!) - 正确启用/禁用ISR,尤其是如果系统也进入睡眠模式的时刻 - 中断#。如果(达到稳态情况之前数百休息/接触的时刻)加入机械开关,机械旋转可以是令人惊讶的
其他提示
我推荐实硬件测试。中断处理本质上是随机的,不可预测的。
使用一个信号发生器和饲料的方波成适当的中断管脚。使用多个发电机(或一个具有多个输出的),以测试多个IRQ线和验证优先处理。
实验与拨叫频率向上和向下对信号发生器(变化它们之间的比率),看看会发生什么。有很多的诊断代码,以验证在各种状态的中断控制器的状态。
替代:如果您的平台具有能够触发中断,定时器,你可以用它们来代替外部硬件
我不是一个嵌入式开发人员,所以我不知道这是可能的,但关于脱钩,从回调注册机制处理中断的代码怎么样?这将允许你写代码模拟器中断fireing事件,只要你喜欢它......