大家! 我想请求您支持使用 Ceedling 测试我的嵌入式软件。
我是这个世界的新人,所以请温柔一点!
我已经使用 Ceedling 设置了一个 Docker 容器,由 throwtheswitch.org 提供。我可以导入“src”目录中的每个源文件,包括供应商驱动程序和 ARM 库,并且能够运行我的第一个测试。
最难的部分来了:我必须测试一个与底层硬件交互的函数,所以当我尝试测试它时,它失败了,因为我在 Windows 上访问了非法地址。
因此,我将 UNIT_TESTING_OCN 定义添加到 Ceedling 的 project.yml 文件中的“common_defines”下。在 VSCode 上,我包含了相同的定义,正如您从屏幕截图中看到的,原始定义变暗了。
然而,当运行“ceedling test:all”时,链接器加载程序找不到引用:
如果我在 VSCode 中按 F12,它会将我带到 #else 预处理器语句中包含的新定义。那么什么给出了?
为什么 Ceedling 无法正常运行?
请询问更多信息,我确信我错过了您可能需要的东西。
提前致谢!
您的新代码只需为这些符号声明
extern
,以便编译器相信它们存在。您实际上根本没有定义任何变量。这就是为什么链接失败。
您应该在使用它们的测试代码中定义实际变量。
例如我的一个项目中有一个 test_rtc.c 文件,其中包含:
RTC_HandleTypeDef hrtc;
ADC_HandleTypeDef hadc1;
听起来您可能希望在测试中包含类似以下内容:
ADC1_Type MyADC1;
ADC1_Type *ADC1 = &MyADC1;