C++ 嵌入式裸金属的单元测试ISR
虽然taht可以在目标硬件上运行不同的单元测试系统,但我有一个非常不同的问题 我想单元测试ISR和主(也是唯一)线程之间的数据同步,可能是在PC端 概念非常简单:由于ISR不能被中断,我构建了一个小型的main,而不是在一个循环中使用/生成ISR所需的数据,对于每个循环,main将在下一行中断(或者更好,对于每个原子指令),并验证结果的结果/一致性 暴力强制所有可能的组合应该花费很少的时间,并提供一个体面的测试覆盖率,而不需要在硬件上运行,并错过一些“几乎永远不会,但当它发生时,它会繁荣”的情况 到目前为止,我有几个想法:C++ 嵌入式裸金属的单元测试ISR,c++,c,unit-testing,embedded,bare-metal,C++,C,Unit Testing,Embedded,Bare Metal,虽然taht可以在目标硬件上运行不同的单元测试系统,但我有一个非常不同的问题 我想单元测试ISR和主(也是唯一)线程之间的数据同步,可能是在PC端 概念非常简单:由于ISR不能被中断,我构建了一个小型的main,而不是在一个循环中使用/生成ISR所需的数据,对于每个循环,main将在下一行中断(或者更好,对于每个原子指令),并验证结果的结果/一致性 暴力强制所有可能的组合应该花费很少的时间,并提供一个体面的测试覆盖率,而不需要在硬件上运行,并错过一些“几乎永远不会,但当它发生时,它会繁荣”的情况
外面有什么东西吗?如果没有,他的方法是否存在本质问题?您是否在测试ISR的周期或其功能?在大多数系统上,ISR是可以由任何其他函数调用的常规函数。如果没有,您可以更改ISR,使其调用处理函数。从
main
或您的单元测试函数测试处理函数。@ThomasMatthews否,在绝大多数系统上,ISR是ISR,软件很难调用它!正常的调用约定是CPU硬件堆栈在调用ISR时注册。若你们从软件中调用它,这一部分就丢失了,你们必须自己用内联汇编程序手工完成。否则,由于普通ISA从中断返回的指令与从函数返回的指令不同,因此当ISR试图从堆栈中恢复硬件未放置的内容时,从ISR返回的指令将出现堆栈损坏。@ThomasMatthews您是在描述我的想法吗#1?因为“从main或您的单元测试函数测试处理函数”对我来说毫无意义,所以发生在那里的“魔力”是问题的重点。如果您想问如何通过构建代码覆盖工具来重新发明轮子,那么这个问题对本网站来说太广泛了。如果您要求工具建议,那么这显然是离题的。如果中断不能从其他函数调用,那么中断应该调用可以从其他函数调用的另一个函数。这可以实现更好的单元测试(或代码覆盖率)。