0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PiL测试实战(上)| 单元级代码的PiL测试

北汇信息POLELINK 2022-11-22 10:19 次阅读


作者:酷兔本兔小编:吃不饱
对于嵌入式代码,为了测试软件能否在目标芯片上实现预期的功能,通常需要进行PiL测试(Processor-in-the-Loop-Testing)。目前市面上较为常见的嵌入式软件调试工具有PLS UDE和LAUTERBACH Trace32等。UDE和Trace32可以很好的完成软件调试的工作,当然,我们也可以通过将TPT(基于模型的自动化测试工具,可覆盖MiL到ViL全阶段的测试)和这些调试工具进行集成,更高效、快捷的实施PiL阶段的自动化测试。

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

2d45b574-6857-11ed-b116-dac502259ad0.gif2d58b570-6857-11ed-b116-dac502259ad0.png2d45b574-6857-11ed-b116-dac502259ad0.gif图1 TPT与调试器集成
01测试准备
本次被测代码是基于模型开发的单元级软件,将模型转成代码后编译成elf文件刷写到目标板进行测试。涉及到的测试环境及版本信息如下:
①测试工程:MiL阶段搭建的单元测试工程(TPT工程可完全复用)②测试工具:TPT + PLS UDE③调试器:PLS UAD2Next④目标板:Infineon TC233LP其中目标板和UAD之间使用JTAG口通讯,UAD和PC端通过USB进行连接。2d45b574-6857-11ed-b116-dac502259ad0.gif2d974e7a-6857-11ed-b116-dac502259ad0.png2d45b574-6857-11ed-b116-dac502259ad0.gif图2 硬件连接

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

2d45b574-6857-11ed-b116-dac502259ad0.gif2eb68348-6857-11ed-b116-dac502259ad0.png
2d45b574-6857-11ed-b116-dac502259ad0.gif图3 搭建的UDE工程
02配置测试环境
在PiL测试过程中,TPT需要将测试用例数据发送到UDE,并读取UDE从目标板读到的输出信号数据进行评估。因此,我们需要搭建测试环境将TPT和UDE链接起来。为方便测试环境的搭建,TPT提供了能满足各阶段测试的测试平台,这里我们需要配置一个PLS UDE Platform。2d45b574-6857-11ed-b116-dac502259ad0.gif2f0d34f4-6857-11ed-b116-dac502259ad0.png2d45b574-6857-11ed-b116-dac502259ad0.gif图4 TPT PLS UDE Platform
设置用例运行步长(和MiL保持一致)及用例最大运行时间加载搭建好的UDE工程加载被测的elf文件选择源代码所在文件夹设置断点设置信号读/写动作03设置断点
为方便对代码中的变量进行读/写操作,需要在程序中设置一些断点。这里我们可以在TPT端直接进行断点的设置,TPT会将断点信息发送至UDE。TPT可以支持诸如普通断点(指定断点位置)、条件断点等类型,并支持多控制器、多核断点的设置。

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

①程序入口(step_in):进入Step函数时的断点,用于Write;②程序出口(step_out):跳出Step函数时的断点,用于Read2d45b574-6857-11ed-b116-dac502259ad0.gif2f639970-6857-11ed-b116-dac502259ad0.png2d45b574-6857-11ed-b116-dac502259ad0.gif图5 设置断点

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

2d45b574-6857-11ed-b116-dac502259ad0.gif308edf80-6857-11ed-b116-dac502259ad0.png
2d45b574-6857-11ed-b116-dac502259ad0.gif图6 断点循环过程


2d45b574-6857-11ed-b116-dac502259ad0.gif30b5e922-6857-11ed-b116-dac502259ad0.png
2d45b574-6857-11ed-b116-dac502259ad0.gif图7 TPT中设置断点循环动作

04设置信号读/写动作
设置好断点之后,我们需要在TPT中设置输入/输出信号的动作。这里我们在断点step_in的位置把输入信号设置为write,在断点step_out的位置把输出信号设置为read。设置好后,TPT即可把测试用例信息在断点step_in灌入目标板,当step函数运行完成后在断点step_out把输出信号回采进行评估。2d45b574-6857-11ed-b116-dac502259ad0.gif30e1a4d6-6857-11ed-b116-dac502259ad0.png2d45b574-6857-11ed-b116-dac502259ad0.gif图8 TPT中设置信号动作
05MiL/SiL测试工程的快速复用

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

2d45b574-6857-11ed-b116-dac502259ad0.gif30fe728c-6857-11ed-b116-dac502259ad0.png
2d45b574-6857-11ed-b116-dac502259ad0.gif图9 TPT中信号mapping

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

2d45b574-6857-11ed-b116-dac502259ad0.gif3142d4fe-6857-11ed-b116-dac502259ad0.png2d45b574-6857-11ed-b116-dac502259ad0.gif图10 测试执行
通过对该单元级代码的测试,不难发现,TPT在实现不同测试阶段的测试工程复用方面有着巨大的优势——单元级软件测试可实现同一测试工程覆盖MiL/SiL/PiL所有阶段,这无疑大大降低了我们的测试成本和周期。并且TPT在复杂测试用例信号编写、复杂场景评估、创建回归测试、实现自动化测试等方面都有着很大的优势。敬请期待下篇:带有Plant Model的PiL测试该如何做?

316e2280-6857-11ed-b116-dac502259ad0.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 测试
    +关注

    关注

    8

    文章

    4454

    浏览量

    125128
收藏 人收藏

    评论

    相关推荐

    STM32F429做的PIL仿真速度非常慢的原因?

    各位大神好, 本人用MATLAB/SIMULINK搭建了小型直流电力系统。系统包含三个直流转换器。相关三个控制器被载入STM32F429中,从而与SIMULINK构成PIL仿真。仿真运行一切正常
    发表于 04-11 07:28

    如何实现PIL和OpenCV之间图像数据的转换呢?

    PIL图像数据格式转换成OpenCV图像数据格式
    的头像 发表于 02-25 13:43 517次阅读

    使用VectorCAST MATLAB Toolbox获取代码覆盖度的基本步骤

    不同阶段的常用方法,用于有效验证生成的嵌入式代码。SIL测试目的是验证嵌入式代码的正确性,甄别潜在的问题,并评估程序的初步性能,一般在PC上即可执行;PIL则须运行在物理目标板上,主要
    的头像 发表于 10-26 11:06 482次阅读
    使用VectorCAST MATLAB Toolbox获取<b class='flag-5'>代码</b>覆盖度的基本步骤

    如何安装Python图像处理PIL

    安装PIL库 要使用PIL库,我们首先需要安装它。有两种方法可以安装PIL库: 方法一:使用pip命令,在终端或命令行中输入以下代码: pip install Pillow 方法二:从
    的头像 发表于 09-12 17:15 1348次阅读
    如何安装Python图像处理<b class='flag-5'>PIL</b>库

    如何提高嵌入式软件单元测试效率

    单元测试是回归测试套件的关键组件。 这是因为单元测试确保了作为产品的构建块的小代码片段能够按预期工作。 简化单元测试很重要。 这是因为
    发表于 08-28 06:31

    软件代码结构化覆盖测试-语句覆盖

    本篇将深入到代码层面,讲解单元测试中的一项重要工作-软件代码测试
    的头像 发表于 08-25 11:50 389次阅读
    软件<b class='flag-5'>代码</b>结构化覆盖<b class='flag-5'>测试</b>-语句覆盖

    从TPT看汽车测试术语(上)

    作者|冰糖葡萄皮小编|吃不饱汽车世界在不断发展,“软件定义的汽车”等新术语证明了软件对当今汽车的重要性。无论是MiL、SiL、PiL、HiL、还是单元测试、集成测试,汽车软件测试的世界
    的头像 发表于 06-13 10:45 514次阅读
    从TPT看汽车<b class='flag-5'>测试</b>术语(上)

    如何设置PIL模拟的环境以及在哪里包含我的C代码项目?

    我看到 MBDT 用于生成基于 Simulink 模块的 C代码,以减少原型设计过程。就我而言,我想 在 Simulink 中的 PIL(处理器在环)仿真中测试我自己的 C 代码项目。
    发表于 06-08 08:47

    自动驾驶测试:MIL、SIL、PIL、HIL

    1. 基于模型的设计 基于模型的设计方法(MBD,Model Based Design)采用图形化设计和自动化代码生成,不同于基于手工编程和纸上规范的传统编程方法,具有如下优点: 在统一的开发测试
    发表于 06-07 10:31 0次下载
    自动驾驶<b class='flag-5'>测试</b>:MIL、SIL、<b class='flag-5'>PIL</b>、HIL

    执行PIL时弹出\'m_data_2\' overflowed by 0 bytes的错误如何解决?

    我目前正在尝试使用探查器函数来测量不同函数调用中的滴答数。 但是,在所附图像中会弹出一个错误并阻止 PIL 的进一步发展。 如何克服这个?? \'m_data_2\' 溢出 0 个字节
    发表于 06-06 08:32

    嵌入式代码单元测试如何完成?

    软件开发中,每次需求的变更基本都需要改写代码,而代码变更后就需要进行功能测试,当然在功能测试之前需要代码
    发表于 06-05 12:28 585次阅读

    为什么无法为“State_Machine”执行处理器在环 (PIL) 仿真?

    使用测试框架启动模型的 PIL 测试时,出现以下错误: 无法为“State_Machine”执行处理器在环 (PIL) 仿真。修复此错误,更新配置参数或创建支持的连接配置。请参阅产品帮
    发表于 05-22 07:44

    NXPs32k144 evbPIL仿真问题如何解决?

    确信所有的设置选项都是正确的(求解器,我配置硬件实现的设置,目标块是正确的......),但我不知道为什么我会遇到这个错误。 奇怪的是,如果我通过嵌入式编码器应用程序构建代码,我在刷新 evb 时不会遇到任何问题。 使用 harnest 和 SIL/PIL
    发表于 05-19 07:50

    S32K144如何禁用FreeMaster并启用PIL模式?

    尝试连接免费主机,但没有通信直流总线测量等。是否有任何特定的 freemaster 配置文件是从 simulink 代码生成生成的,需要加载到 FreeMaster 中? 否则如何禁用 FreeMaster 并启用 PIL 模式?
    发表于 05-06 07:38

    TPT19新特性之在虚拟环境中执行PiL测试

    使用TPT 19,您可以获得一些PiL测试(处理器在循环测试)的新特性。在C平台上,您现在可以直接为您的PiL构建目标代码,并在目标板上或仿
    的头像 发表于 05-05 15:54 351次阅读
    TPT19新特性之在虚拟环境中执行<b class='flag-5'>PiL</b><b class='flag-5'>测试</b>