gpt4 book ai didi

c++ - 我应该使用什么结构来模拟用于桌面测试的嵌入式系统类?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:38:36 25 4
gpt4 key购买 nike

我正在用 C++ 构建一个嵌入式应用程序,但我想通过传统的持续集成技术对其进行测试。我正在开发一个依赖于硬件功能的库,例如打印、输出到引脚、读取模拟数据等。让我们调用库 lib 和硬件功能 core(hardware.h)。我有一个涵盖所有这些功能的模拟类 (hardware.h)。问题是,当我为嵌入式应用程序编译代码时,我需要包含一个用于硬件定义的头文件,但是当我想进行测试时,我想将其换成模拟头文件。有没有办法让 Cmake 这样做?我应该以不同的方式这样做吗?任何建议,将不胜感激。

我已经在 IDE 等中完成了这项工作,但从未使用 cmake 和持续集成。

-Lib
--src
---button.h
---button.cpp
--test
---testButton.cpp
-core
---hardware.h
-Mock
---hardware.h
//button.h
#include hardware.h
setPinMode(Input);

有没有办法让 cmake 在调试期间将正确的 hardware.h 链接到 mock,在发布期间链接到核心?

最佳答案

我们一般是这样处理的:

--lib
---hardware_interface.h
---etc
--MCU_TYPE
---main.cpp
---hardware_mcu_type.h
---hardware_mcu_type.cpp
--test
---main.cpp
---hardware_mock.h

如您所见,我们有一个包含通用代码的通用文件夹。库中的所有代码都使用 hardware_interface.h 中的接口(interface)类(我们通常有多个 I2C、SPI、UART 等接口(interface),它们都在单独的文件中定义)。所有使用特定接口(interface)的类都有一个函数来设置接口(interface)的指针或引用。这是在 main.cpp 文件中完成的。

现在这些接口(interface)都是纯虚拟的。因此,在构建应用程序时,需要填写这些内容。这就是 hardware_mcu_type.hhardware_mock.h 的用武之地。对于实际的 mcu,主要是实际的使用硬件实现。在 PC 上测试时,使用模拟对象。

您至少需要在 CMakeLists.txt 文件中进行切换,为不同的构建构建不同的文件。

旁注:请注意内存访问和分配很难在不同的平台上测试,因为这可能会有所不同。单元测试最好侧重于测试逻辑。

关于c++ - 我应该使用什么结构来模拟用于桌面测试的嵌入式系统类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56483418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com