我有一个中断处理模块,其控制的嵌入式处理器上的中断控制器硬件。现在,我想更多的测试添加到它。目前,如果中断嵌套的工作原理是使两个软件测试只测试从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事件,只要你喜欢它......

对于这样的东西,我强烈建议类似的 SPIN模型检测。你拉闸测试的算法,而不是代码,但测试的详尽的。早在一天,我发现gdb 错误使用这种技术。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top