其他
【连载】嵌入式测试驱动开发(5)
/***双目标具体过程***/
我们上一小节说过双目标开发,我们也知道双目标开发要做的事情是代码具有很好的跨平台作用,也就是能够支持跨平台运行(至少是您的开发平台和目标平台两个平台)。
我们要实现双目标大概经历如下过程:
1)我们在自己熟悉的平台上面进行编码,并写出相应的测试驱动代码进行测试;这个阶段主要写的代码基本上与硬件关系不大,或者是通过模拟硬件的方式来进行编程。
2)采用目标的编译器兼容性检查,因为我们确定了硬件处理器,那么我们的代码编译环境也就确定下来了!我们可以把第一步编写的代码移植到目标编译器中编译并解决问题。
3)在评估板上运行我们的代码,并执行相关测试单元。可以尽早排查出一些与我们第一步环境的差别,因为用到了相似的平台硬件上能排查出90%的与目标系统的差异问题!
4)最后一步在目标系统上进行单元测试,可能我们目标系统相对来说资源有限,如果和评估板处理器一致的话,基本上直接可以进行测试!如果目标系统资源有限的话,可能无法装载所有的测试单元(比如内存有限等),需要我们分批进行测试!
如上就是双目标开发的一个大体过程,可能有时候会有差异,比如存在评估板可以1-2步都可以在评估板上开发! /***双目标的问题1,2***/
1)所用的库的差异,比如同样是去掉字符串中的空格函数,有些库中的函数会把头尾的空格也去掉,而有些库只去掉字符串中间的!这样就带来了差异!所以一方面我们尽量少用库函数,可以自己去实现该函数!另一方面通过调用库函数进行判断以后进行补丁修护!
2)头文件的差异问题,比如说有些编译器中使用的头文件是abc()函数,而有些库中使用的是_abc()函数,这样就造成我们在目标系统中编译会存在错误。这个问题可能大家处理方式都不一样:
1、有些通过用预编译根据编译环境不同选择不同的函数;
2、有些通过宏定义#define abc _abc 来定义;
3、像uboot那样会把不同硬件平台的代码放在不同的文件中,或者是目录中,我们通过makefile用编译器和连接器进行区分,推荐使用。
/***聊一聊硬件测试***/
我们做测试驱动开发中,硬件能够很好的反馈测试ok的话,我们可以直接自动化硬件测试;不过有些测试还是需要我们手动去测试,不过那仅仅是很小的部分,我们可以先进行部分的自动化测试,部分手动测试结合开展;还有一部分可能根本无法直接进行硬件测试,需要我们通过借助在不设备,比如示波器等等来进行外部间接测试!
好了,这里是公众号“最后一个bug”,感谢大家的关注,也希望大家多多分享!下期我会为大家带来测试驱动程序开发过程中我们相关问题的解答,因为测试驱动毕竟引入嵌入式还是需要有足够的理由!后面还要带来多个模块联合测试的系统测试!