This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/TI-RTOS-MCU:是否有针对启用 SYS/BIOS 的代码运行单元测试的推荐方法?

Guru**** 2337870 points
Other Parts Discussed in Thread: SYSBIOS
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/601287/rtos-ti-rtos-mcu-is-there-a-recommended-method-for-running-unit-tests-on-sys-bios-enabled-code

器件型号:TI-RTOS-MCU
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

团队成员、 我有一位客户在使用 Tiva 时遇到 TI-RTOS 问题、希望在他们的代码库中添加单元测试。 它们的许多模块包括某种 SysBIOS 包括( 和 相当常见)。 因此、客户在构建单元测试时遇到很多问题、因为所有这些都包括大量使用 XDC。 是否有推荐的方法可以在启用 SYSBIOS 的代码上运行单元测试?

"看起来我只有几个选项:

  1. 创建新的假头文件/有条件地将所有 XDC 头文件从单元测试中编译(大量工作)
  2. 适用于主机操作系统的目标 XDC 工具(x86 Linux、甚至不确定是否可以这样做)

我们实际上并不是在为主机构建 SysBIOS,而是需要在必要时存根/假密钥函数。 据我所知,我们还没有什么可以利用的设备进行测试,但我想检查一下您是否知道其他项目是如何处理的,或者是否有使用 TI-RTOS 的设备测试项目的标准方法。”

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不是 TI-RTOS、但我可以告诉您我用于单元测试 C 的内容

    Googleetest 用于测试框架、FFF (假自由函数)用于木块。 相当简单、FFF 使这些接口盒易于写入。 使用存根文件中的全局变量可轻松仿真硬件寄存器(如果需要)。

    我们对其进行了设置、以便每个模块都具有匹配的子目录和测试文件。 确保在模块发生更改时自动运行测试、如果缺少测试文件、则会生成错误。 在允许编译之前运行测试。

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们以前为 XDC 目标支持 Linux 和 Windows。 它可能仍然存在(我需要深入探究以确保)、但我们不再支持 TI-RTOS (例如 SYS/BIOS)代码。 根本没有足够的兴趣来支持它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引述 user="ToddMullanix"]没有足够的兴趣来证明这一点。

    然而,"这种利益"(或缺乏这种利益)现在不可能保持静止状态,并到达这里。

    所有这些"决定"是否都是"基石"?    而且-这种"缺乏兴趣"可能会指向(赦免)"非供应商特定实施"-由于其(大幅)更大的用户群和"广泛的服务"、因此确保获得"更高的兴趣"?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没有任何东西被抛在石头上,但除非我们的管理链中的高层颁布法令,否则今后没有计划支持这一点。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当然、这都不是"你的错/做的。"   也就是说、任何"供应商锁定"实施的"缺陷"都(非常)显示良好...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    只是为了提供我用于 TIVAWare 的入库图示。 这来自测试设置

    假_void_FUNT2 (GPIOPinTypeGPIOOutput、uint32_t、uint8_t);
    假_void_FUNT2 (GPIOPinTypeADC、uint32_t、uint8_t);
    
    假_void_FUNCH3 (GPIOPinWrite、UINT32_t、 uint8_t、uint8_t);
    假_value_FUNF1 (bool、SysCtlPeripheralReady、UINT32_t);
    
    #define RESET_FFF (){RESET_FASK (SysCtlPeripheralEnable);\
    RESET_FANGAN (GPIOPinTypeGPIOOutput);\
    RESET_FANGAN (GPIOPinTypeADC);\
    RESET_FANGY (GPIOPinWrite);\
    FFF_RESET_history();}
    

    可检查通过此模拟接口定义的每个函数的调用历史记录。 例如、要检查代码是否启用了特定外设、我将此检查添加到测试中

    //实用程序功能,用于检查外设是否已启用。
    bool CheckPeripheralEnabled (uint32_t periph、int line)
    {
    bool ioport_configured;
    
    //确保存储历史记录
    预期_LT (SysCtlPeripheralEnable_fake.call_count、
    SysCtlPeripheralEnable_fularg_history_len)<<
    "太多 SysCtlPeripheralEnable 无法分析--行"<<行;
    
    ioport_configured = false;
    for (int i=0;i < SysCtlPeripheralEnable_fake.call_count; i++){
    if (SysCtlPeripheralEnable_fan.arg0_history[i]=periph){
    ioport_configured = true;
    }
    }
    返回 ioport_configured;
    }
    
    

    和检查本身

    EASE_TRUE (CheckPeripheralEnabled (SYSCTL_Periph_ADC0、LINE))<<"SYSCTL_Periph_ADC0 not enabled -- Line "<< line;
    

    简单明了、您无需依赖供应商为您提供与您的环境匹配的测试功能。

    Robert