MCU测试软件不同于常规的PC机或基于SOC的嵌入式软件,其一般情况下,与底层硬件耦合度高,资源有限,如何进行单元测试的问题困扰我很久。
MCU测试解决方案
根据目前已知如下3种类型的方案:
-
在目标板上运行
此方案下,在程序代码中加入单元测试的代码,编译完成后,在目标板上跑单元测试的用例,并通过目标板输入单元测试的结果。此种方案下,测试用例会额外的消耗RAM和ROM空间,在资源吃紧的情况下,可能无法运行。
-
在模拟器中运行
此方案下,可以采用交叉编译工具对代码进行编译,并在模拟器(如QEMU)中运行,该方案使用方便,并且可以快速验证,避免反复烧录程序,同时可以与持续集成环境关联。
-
在PC中运行
此方案下,主要测试硬件无关部分的代码,将硬件相关的接口mock掉,主要测试中间件和应用部分的代码,此方案运行方便快捷。
单元测试框架
下面介绍几个针对C语言的单元测试框架
- zUnit
- Unity
- CppUTest
- CUnit
- yunit(AliOS-Things组件)
- CU从生产出来到封装出货的每个不同的阶段会有不同的测试方法,其中主要会有两种:中测和成测。
所谓中测即是WAFER的测试,它会包含产品的功能验证及AC、DC的测试。项目相当繁多,以HOLTEK产品为例主要的几项如下:
 接续性测试:检测每一根I/OPIN内接的保护用二极管是否功能无误。
 功能测试:以产品设计者所提供测试资料(TEST PATTERN)灌入IC,检查其结果是否与当时SIMULATION时状态一样。
 STANDBY电流测试:测量IC处于HALT模式时即每一个接点(PAD)在1态0态或Z态保持不变时的漏电流是否符合低之规格。
 耗电测试:整颗IC的静态耗电与动态耗电。
 输入电压测试:测量每个输入接脚的输入电压反应特性。
 输出电压测试:测量每个输出接脚的输出电压位准。
 相关频率特性(AC)测试,也是通过外灌一定频率,从I/O口来看输出是否与之匹配。
 为了保证IC生产的*且稳定品质,还会做产品的可靠性测试,这些测试包括ESD测试,LATCH UP测试,温度循环测试,高温贮存测试,湿度贮存测试等。
成测则是产品封装好后的测试,即PACKAGE测试。即是所有通过中测的产品封装后的测试,方法主要是机台自动测试,但测试项目仍与WAFER TEST相同。PACKAGE TEST的目的是在确定IC在封装过程中是否有任何损坏。