首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你如何测试你的中断处理模块?

你如何测试你的中断处理模块?
EN

Stack Overflow用户
提问于 2009-08-06 07:08:52
回答 4查看 4.6K关注 0票数 12

我有一个中断处理模块,它控制嵌入式处理器上的中断控制器硬件。现在我想给它添加更多的测试。目前,测试仅测试中断嵌套是否通过从ISR中创建两个软件中断来工作,一个具有低优先级,另一个具有高优先级。如何进一步测试此模块?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-06 10:02:37

我建议你也试着创造其他刺激。

通常,硬件中断也可以由软件(自动测试)或调试器通过设置标志来触发。或作为通过I/O的中断或定时器中断。或者,您可以在单步执行时通过调试器在中断控制器中设置中断位。

你可以在不应该发生的事情上添加一些运行时检查。有时我选择将输出引脚设置为外部监视(如果您有示波器或逻辑分析仪,则更好……)

代码语言:javascript
复制
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如此简短,以至于我可以克制自己不去嵌套……如果可以,这将为您带来额外的简单性和更高的性能。

编辑当然,ISR也需要在系统的硬件上进行测试。除了逐位、一步一步的方法之外,你可能想要证明:-系统在最大中断负载下的稳定性(最好是预测最大负载的几倍;如果你的115kbps串行驱动程序也可以处理2 2MBps,你就可以了!)-启用/禁用isr的正确时机,特别是如果系统还进入休眠模式-中断数量。如果您添加了机械开关、机械旋转(在达到稳定状态之前的数百个断开/接触时刻),您可能会感到惊讶。

票数 7
EN

Stack Overflow用户

发布于 2009-08-06 16:41:17

我推荐使用真正的硬件测试。中断处理本质上是随机和不可预测的。

使用信号发生器并将方波馈入相应的中断引脚。使用多个生成器(或具有多个输出的生成器)来测试多个IRQ线路并验证优先级处理。

尝试在信号发生器上向上和向下拨打频率(改变它们之间的速率),看看会发生什么。有许多诊断代码来验证中断控制器在各种状态下的状态。

替代方案:如果您的平台具有可以触发中断的计时器,则可以使用它们而不是外部硬件。

票数 3
EN

Stack Overflow用户

发布于 2009-08-06 09:28:01

我不是嵌入式开发人员,所以我不知道这是否可能,但是如何将处理中断的代码与回调注册机制解耦?这将允许您随心所欲地编写触发中断事件的模拟器代码……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1237368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档