【问题标题】:embedded c code and unit tests without cross compile无需交叉编译的嵌入式 c 代码和单元测试
【发布时间】:2015-03-12 00:37:38
【问题描述】:

我开始学习单元测试。我使用统一,它适用于 windows 上的 eclipse 中的 mingw。我使用不同的配置进行调试、发布和测试。这适用于 cdt-plugin。

但我的目标是对我的嵌入式代码进行单元测试以获取 stm。所以我使用 arm-gcc 和 arm-gcc eclipse 插件。我计划有一个配置来编译目标的调试和发布代码,并使用 mingw 来编译和执行 pc 上的测试(只是硬件独立部分)。

使用 eclipse 插件,我无法编译不使用 arm-gcc 的代码。

有没有办法让一个项目具有对嵌入式目标和 PC 的配置和支持?

谢谢

【问题讨论】:

  • 这比预期的要容易得多。我在我的 arm gcc 项目中添加了一个新配置。此配置使用 MinGW 工具链。另外,我创建了一个新的主文件来执行测试。对于我必须选择的所有配置,应该执行哪些文件夹(对于测试,我必须排除主文件夹和我的硬件相关文件夹)。所以我可以让makefile失去焦点。谢谢大家。

标签: c eclipse unit-testing cross-compiling stm32


【解决方案1】:

如上所述,您需要一个 makefile 指向两个不同的目标,并根据目标使用不同的编译器选项。

您需要确保代码的可移植性。

我最常使用 CMake 完成此任务,并为单元测试与目标概述了不同的编译器路径和链接器标志。这样,我还可以轻松地链接到任何单元测试库,同时将它们保持在我的目标之外。最后 CMake 会生成一个 Makefile,但我不会花时间担心 make 语法,虽然我可以经常阅读,但它看起来像是巫术。

完全在单个 Eclipse 项目中执行此操作是可能的。您需要为多个目标配置您的项目,每个目标使用不同的编译器,并且需要一些哄骗才能让 eclipse 正常运行。

如果您的目标是完全在 Eclipse 中完成,我建议您阅读 this 作为入门。

如果你想走另一条路,这里是CMake primer

【讨论】:

    【解决方案2】:

    简答:Makefile。

    但我猜 NEON 组件是一个更大的问题。

    使用内部函数至少可以链接到模拟器库,并且确实有很多这样的库是用标准 C 编写的,允许带有内部函数的代码是可移植的。

    但是 GCC Neon 内在函数的糟糕性能迫使很多人为了性能而牺牲可移植性。

    如果您的代码不幸包含程序集,您甚至无法在将程序集转换回标准 C 之前编译代码。

    【讨论】:

    • 如果您有相应的计划,内联组装就不必如此艰难。您对待它的方式与处理内存映射外围设备的方式基本相同。当您达到目标时围绕它构建您的测试工具,并在主机上使用 C 模拟它。对于内存映射外设,使用内联函数访问它们使它们更容易模拟。但是,如果每次对与内存映射外围设备相对应的某个符号进行按位操作时都必须遍历并跟踪,并将其替换为对内联函数的调用,那么在大型代码库上可能会非常乏味。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 2018-09-20
    • 1970-01-01
    • 2018-05-26
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多