微控制器C代码的单元测试模式

Ste*_*ins 24 c embedded microcontroller unit-testing

虽然有很多单元测试框架支持C,但我对如何为微控制器代码编写单元测试感到有点困难(在我的情况下是PIC,但我认为问题比这更普遍).

为微控制器编写的大部分代码都围绕将配置和数据值写入寄存器,从寄存器读取输入数据以及响应中断事件.我想知道是否有人可以提供一些最有效的方法指针.

Bil*_*ter 32

你写;

"为微控制器编写的大部分代码都围绕将配置和数据值写入寄存器,从寄存器读取输入数据以及响应中断事件".

我同意这在实践中经常出现这种情况,但我实际上并不认为这是一件好事,我认为重新思考一些事情会帮助你实现你的测试目标.

也许是因为微控制器程序员可以随时联系并触摸硬件,许多(大多数?)他们已经养成了在整个代码中做到这一点的习惯.通常这种习惯是毫无疑问的,也许是因为很多人从事这种工作的是EEs而不是计算机科学家的训练和倾向.我知道,我自己就这样开始了.

我想说的是,微控制器项目可以而且应该像任何其他软件项目一样进行良好设计.良好设计的一个非常重要的部分是限制硬件访问硬件驱动程序!将所有编写寄存器的代码分区,将中断等响应到模块中,从而为软件的其余部分提供对硬件的良好,干净,抽象的访问.使用逻辑分析仪,示波器,自定义测试装置或任何其他有意义的测试来测试目标上的驱动程序模块.

一个非常重要的一点是,现在你的软件的其余部分,绝大多数,现在只是你可以在主机系统上运行和测试的C代码.在主机系统上,硬件模块以一种方式存根,可以查看被测代码正在执行的操作.您可以在此代码上使用主流单元测试方法.这需要一些准备和工作,但如果组织良好,您可以创建一个可以应用于所有项目的可重用系统.潜在的好处是巨大的.我在这里写了一些关于这些想法的内容;

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

  • 好点子.我可以补充一下:习惯使用uint16_t,uint8_t等(而不仅仅是int,char),这样当你从嵌入式平台跳到PC,以及不同的嵌入式平台之间时,你的类型更容易预测. (4认同)
  • 这个答案的问题:硬件驱动程序抽象会产生很大的开销,通常是不可接受的,除非用汇编语言编写.但混合使用C和汇编程序是一件非常令人头痛的问题 - 不仅PIC架构是一个可以使用的PITA,编译器还会跳过不同的寄存器库,这是一个非常庞大的PITA,可以编写汇编程序. (3认同)