中文  |  English
所在位置:市场活动 > 客户案例与技术文章

PiL测试实战(上)| 模型生成代码的单元级PiL测试

前言



对于嵌入式代码,为了测试软件能否在目标芯片上实现预期的功能,通常需要进行PiL测试(Processor-in-the-Loop-Testing)。

目前市面上较为常见的嵌入式软件调试工具有PLS UDE和LAUTERBACH Trace32等。UDE和Trace32可以很好的完成软件调试的工作,当然,我们也可以通过将TPT(基于模型的自动化测试工具,可覆盖MiL到ViL全阶段的测试)和这些调试工具进行集成,更高效、快捷的实施PiL阶段的自动化测试。

通过TPT我们可以很方便的实现MiL/SiL的测试工程在PiL阶段的完全复用。下面,我将以lights_control(车灯控制)模型生成的代码为例,为大家演示如何基于TPT进行单元级代码的PiL测试。

图片1.png

图1 TPT与调试器集成



测试准备



本次被测代码是基于模型开发的单元级软件,将模型转成代码后编译成elf文件刷写到目标板进行测试。涉及到的测试环境及版本信息如下:

①测试工程:MiL阶段搭建的单元测试工程(TPT工程可完全复用)

②测试工具:TPT + PLS UDE

③调试器:PLS UAD2Next

④目标板:Infineon TC233LP

其中目标板和UAD之间使用JTAG口通讯,UAD和PC端通过USB进行连接。

图片2.png

图2 硬件连接


首先我们需要搭建一个可以正常运行的UDE工程,以便于后面通过TPT调用进行PiL测试。

图片3.png

图3 搭建的UDE工程




配置测试环境



在PiL测试过程中,TPT需要将测试用例数据发送到UDE,并读取UDE从目标板读到的输出信号数据进行评估。因此,我们需要搭建测试环境将TPT和UDE链接起来。为方便测试环境的搭建,TPT提供了能满足各阶段测试的测试平台,这里我们需要配置一个PLS UDE Platform。

图片4.png

图4 TPT PLS UDE Platform


①设置用例运行步长(和MiL保持一致)及用例最大运行时间

②加载搭建好的UDE工程

③加载被测的elf文件

④选择源代码所在文件夹

⑤设置断点

⑥设置信号读/写动作



设置断点



为方便对代码中的变量进行读/写操作,需要在程序中设置一些断点。这里我们可以在TPT端直接进行断点的设置,TPT会将断点信息发送至UDE。TPT可以支持诸如普通断点(指定断点位置)、条件断点等类型,并支持多控制器、多核断点的设置。

一般来说,我们只需要设置两个简单的断点即可满足单元级别软件的测试。通过指定代码行,我们定义了如下所示的两个断点:

①程序入口(step_in):进入Step函数时的断点,用于Write;

②程序出口(step_out):跳出Step函数时的断点,用于Read。

图片5.png

图5 设置断点


为了让程序能够持续运行以便于我们能持续给入连续变化的信号,我们需要在TPT中设置一个断点的循环,防止程序在断点的位置停止。

图片6.png

图6 断点循环过程


图片7.png

图7 TPT中设置断点循环动作




设置信号读/写动作



设置好断点之后,我们需要在TPT中设置输入/输出信号的动作。这里我们在断点step_in的位置把输入信号设置为write,在断点step_out的位置把输出信号设置为read。设置好后,TPT即可把测试用例信息在断点step_in灌入目标板,当step函数运行完成后在断点step_out把输出信号回采进行评估。

图片8.png

图8 TPT中设置信号动作




MiL/SiL测试工程的快速复用



由于我们在MiL/SiL阶段已经完成了对测试工程的搭建,得益于TPT提供的信号mapping的功能,我们只需要对信号做简单的mapping即可实现测试工程的完全复用。

图片9.png

图9 TPT中信号mapping


做完这些配置工作之后,我们即可运行测试工程,完成PiL测试,并生成相应的PiL测试报告。

图片10.png

图10 测试执行


通过对该单元级代码的测试,不难发现,TPT在实现不同测试阶段的测试工程复用方面有着巨大的优势——单元级软件测试可实现同一测试工程覆盖MiL/SiL/PiL所有阶段,这无疑大大降低了我们的测试成本和周期。并且TPT在复杂测试用例信号编写、复杂场景评估、创建回归测试、实现自动化测试等方面都有着很大的优势。

敬请期待下篇:带有Plant Model的PiL测试该如何做?