虽然有大量的单元测试框架的支持C,我对如何写微控制器代码单元测试有点难倒(PIC在我的情况,但我认为这个问题比这更普遍)。

许多用于微控制器写入的代码的围绕着写的配置和数据值到寄存器,来自寄存器读取的输入数据和响应中断事件。我想知道如果任何人都可以提供最有效的方法来一些这方面的指针。

有帮助吗?

解决方案

您写;

“非常为微控制器写入的代码的围绕着写的配置和数据值到寄存器,读出从寄存器输入数据和响应中断事件”。

我同意,这是在实践中经常如此,但我真的不认为这是一件好事,我觉得反思的东西一点会帮助你与你的测试目标。

也许是因为微控制器编程的可以的伸手触摸硬件任何他们喜欢的时候,许多(大多数?)的人都陷入正是这样做的,在他们的代码的习惯。通常这种习惯是毫无疑问地跟着,也许是因为如此多的人在做这样的工作是电气工程师不是计算机科学家通过训练和倾斜度。我知道,我开始了这种方式自己。

我想指出的一点是,微控制器的项目能够并且应该精心设计就像任何其他的软件项目。良好的设计一个非常重要的部分是限制硬件驱动程序的硬件访问!分区关闭所有写入寄存器,响应中断等成提供软件与漂亮的,干净的,抽象访问硬件的其他模块的代码。使用逻辑分析仪,示波器,定制测试台或任何其他有意义测试目标上的那些驱动模块。

有一个很重要的一点是,现在你的软件的其余部分,希望绝大多数的它,现在只是C代码,你可以在主机系统上运行和测试。在主机系统中的硬件模块以提供可视性什么被测代码是干什么的方式灭掉。您可以在此代码中使用主流的单元测试方法。这需要一些准备工作,但如果你有良好的组织,你可以创建适用于所有项目的可重复使用的系统。潜在的好处是巨大的。我写了一个小此处详细了解这些想法;

[ http://discuss.joelonsoftware.com/default .ASP?joel.3.530964.12] [1]

其他提示

一种方法,这可能是使用一个仿真器。我一直在工作的AVR仿真器和的想法,使用它一个确实是单元测试代码。仿真器实现了CPU和寄存器,中断和各种外设,以及(在我的情况)字节写入到模拟的UART到仿真器的常规stdout。以这种方式,单元测试代码可以在仿真器上运行,并写入其测试结果到控制台。

当然,还必须确保该仿真器被正确地执行实际CPU的行为,否则在其顶部的单元测试不能被信任。

写您的寄存器访问函数/宏的模拟版本。请注意,这是假定您的代码使用一组通用的寄存器访问功能,而不是临时的东西像*(volatile int*)0xDEADBEEF = 0xBADF00D无处不在。

直接从你的测试代码中调用你的中断处理程序,如果你需要他们异步执行(可能是在一些architectures¹问题),“软件中断”(如果可用),或定时器中断处理程序。这可能需要在功能/宏,你可以嘲笑了包装纸的中断使能/禁用代码。

8051¹想到:至少使用Keil 8051编译器,你不能直接调用中断函数。这可能是与C预处理虽然制定。

有可能是任何形式的环回模式,这样就可以使用控制器本身产生,你可以测试反对?

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