首页 > 解决方案 > 如何在 Eclipse CDT 中实现模块化硬件单元测试?

问题描述

我使用嵌入式系统,我正在做裸机编程。对于我的目标微控制器,制造商建议使用 C 或 C++ 编写代码,并使用他们定制的 Eclipse 版本来编译代码、对芯片进行编程和调试。

作为开发技术,我正在尝试使用TDD,因此我在编写模块的同时为该模块创建单元测试。

而且,由于嵌入式系统的性质,我将测试分为两个不同的组:

  1. 软件单元测试:在这些测试中,我创建软件模拟或伪造品来模拟所有硬件访问。这样,我可以使用任何我想要的测试框架在 PC 上运行测试。这些测试工作正常。
  2. 硬件单元测试:在这些测试中,我检查我是否真的了解制造商提供的用于进行硬件访问的库和/或我检查我是否可以正确控制我板上的硬件。这些测试需要在目标处理器中运行,所以我需要在 Eclipse 中编译。<--在这里我遇到了问题

为了编写与硬件交互的第一个模块,我创建了一个新的 eclipse 项目,专门用于编译相应的硬件单元测试。在这个新项目中,我创建了指向模块所需文件夹的链接,从构建与模块无关的代码中排除,然后我创建了一个新文件,然后main()按预期运行测试。那很好。

为了实现第二个模块,我做了与第一个模块相同的操作,并且测试也按预期运行。但是,在实施第二个模块后,第一个项目停止编译。

第一个项目的问题出现了,因为 Eclipse 在共享目录中检测到一个新的源文件(在第二个模块中使用),试图编译这个入侵源文件,然后由于依赖错误而崩溃。

由于 Eclipse 似乎编译了目录中的所有内容,并且为了推进我的开发,我需要继续在共享目录中插入文件,我不知道如何继续实现这些模块化硬件测试,而无需为每个新模块重新进行先前的测试。有人知道吗?

问题示例

下面我展示了一个简化的问题示例,因为有些模块已经在没有单元测试的情况下实现了。

第一个模块:SPI

当我完成 SPI 模块时,文件是:

my_project
├── src/
│   ├── config/
│   │   ├── config_clk.c
│   │   ├── config_spi.c
│   │   └── config_spi.h
│   └── hal/
│       └── spi/
│           ├── spi.c
│           └── spi.h
└── test/
    └── spi/    (Location of the SPI test project)
        ├── .cproject
        ├── .project
        ├── test_spi_custom_config_clk.c
        └── test_spi_main.cpp

我创建了一个新项目,创建了指向文件夹的链接src/hal/spisrc/config并排除了该文件src/config/config_clk.c,并且运行良好。

第二个模块:EEPROM

当我完成 EEPROM 模块时,文件是:

my_project
├── src/
│   ├── config/
│   │   ├── config_clk.c
│   │   ├── config_eeprom.c
│   │   ├── config_eeprom.h
│   │   ├── config_spi.c
│   │   └── config_spi.h
│   └── hal/
│       ├── eeprom/
│       │   ├── eeprom.c
│       │   └── eeprom.h
│       └── spi/
│           ├── spi.c
│           └── spi.h
└── test/
    ├── eeprom/    (Location of the EEPROM test project)
    │   ├── .cproject
    │   ├── .project
        ├── test_eeprom_custom_config_eeprom.c
    │   └── test_eeprom_main.cpp
    └── spi/    (Location of the SPI test project)
        ├── .cproject
        ├── .project
        ├── test_spi_custom_config_clk.c
        └── test_spi_main.cpp

我创建了一个新项目,创建了指向文件夹src/hal/eeprom和的链接src/config,排除了文件src/config/config_clk.csrc/config/config_spi.c并且运行良好。

但是,当我尝试运行第一个测试时,Eclipse 尝试编译src/config/config_eeprom.c并中断,因为 config_eeprom.c 依赖于 eeprom.h 或其他东西。

所以很明显,这不是一种可持续的方法。

标签: eclipseunit-testingembeddedtddeclipse-cdt

解决方案


推荐阅读