为什么加载器找不到定义的引用? (Ceedling嵌入式测试)

问题描述 投票:0回答:1

大家! 我想请求您支持使用 Ceedling 测试我的嵌入式软件。

我是这个世界的新人,所以请温柔一点!

我已经使用 Ceedling 设置了一个 Docker 容器,由 throwtheswitch.org 提供。我可以导入“src”目录中的每个源文件,包括供应商驱动程序和 ARM 库,并且能够运行我的第一个测试。

最难的部分来了:我必须测试一个与底层硬件交互的函数,所以当我尝试测试它时,它失败了,因为我在 Windows 上访问了非法地址。

我注意到驱动程序的供应商已包含针对此类情况的本机测试定义:

因此,我将 UNIT_TESTING_OCN 定义添加到 Ceedling 的 project.yml 文件中的“common_defines”下。在 VSCode 上,我包含了相同的定义,正如您从屏幕截图中看到的,原始定义变暗了。

然而,当运行“ceedling test:all”时,链接器加载程序找不到引用:

如果我在 VSCode 中按 F12,它会将我带到 #else 预处理器语句中包含的新定义。那么什么给出了?

为什么 Ceedling 无法正常运行?

请询问更多信息,我确信我错过了您可能需要的东西。

提前致谢!

c unit-testing embedded ceedling
1个回答
0
投票

您的新代码只需为这些符号声明

extern
,以便编译器相信它们存在。您实际上根本没有定义任何变量。这就是为什么链接失败。

您应该在使用它们的测试代码中定义实际变量。

例如我的一个项目中有一个 test_rtc.c 文件,其中包含:

RTC_HandleTypeDef      hrtc;
ADC_HandleTypeDef      hadc1;

听起来您可能希望在测试中包含类似以下内容:

ADC1_Type MyADC1;
ADC1_Type *ADC1 = &MyADC1;
© www.soinside.com 2019 - 2024. All rights reserved.