[STM32G4] Ceedling 与 STM32CubeIDE 报错cannot find entry symbol Reset_Handler;

[复制链接]
489|14
WHALEE 发表于 2025-11-8 09:37 | 显示全部楼层 |阅读模式
我正为 STM32CubeIDE 项目创建基于 Ceedling/Unity/CMock 的单元测试。
项目已开始构建,但出现如下错误:
Linking test_functions_STM32G474RB.out... /Applications/STMicroelectronics/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.10.3-2021.10.macos64_1.0.0.202111181127/tools/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld: warning: cannot find entry symbol Reset_Handler; defaulting to 0000000008000000 Running test_functions_STM32G474RB.out...
ERROR: Test executable "test_functions_STM32G474RB.out" failed.
这通常是源文件或测试代码中存在非法内存访问的现象。
[color=rgba(0, 0, 0, 0.85)]我在编译器 / 链接器标志中添加了那个 .S 文件,是操作方法不对,还是这种方式根本行不通。

公羊子丹 发表于 2025-12-9 08:17 | 显示全部楼层
这种报错多半是你把 MCU 的启动文件也拉进测试工程里了,Ceedling 本来就不跑目标芯片,只跑 PC 模拟环境。你把 startup 和链接脚本都去掉试试,测试代码就能正常跑。
周半梅 发表于 2025-12-9 08:30 | 显示全部楼层
你试着检查一下 test.yml 里面的 link flags,有没有把 CubeIDE 的 ld 脚本混进来。单测项目不需要 STM32 的 FLASH 段之类的东西,导致 Reset_Handler 找不到很正常。
帛灿灿 发表于 2025-12-9 08:30 | 显示全部楼层
我之前也犯过类似错误,把全工程一起给 Ceedling 编译,结果各种 ISR、HAL 自带的弱符号都冲突。建议只把你要测试的 C 模块放进去,其余 HAL 函数都 mock。
童雨竹 发表于 2025-12-9 08:31 | 显示全部楼层
你那个 warning 很典型,就是 Ceedling 链接器在 PC 平台找不到 ARM 的入口点。如果你真需要跑 ARM 环境,那 Ceedling 这套就不适用了,得换个硬件在环测试。
万图 发表于 2025-12-9 08:33 | 显示全部楼层
我建议你把 .S 文件从测试编译里移除,单元测试不需要跑真实的中断向量表,保留了反而会让链接器乱配段,导致执行时直接 crash。
Wordsworth 发表于 2025-12-9 08:33 | 显示全部楼层
如果是非法内存访问,也有可能是你在测试里直接调用 HAL 初始化,HAL 在 PC 上跑必然炸。看下是不是漏写 mock,某些函数不该真的运行。
Bblythe 发表于 2025-12-9 08:34 | 显示全部楼层
你看下 Ceedling 的 map 文件,Reset_Handler 默认被指向了某个奇怪地址,说明你当前的目标根本不是 STM32,要不你就换成 native 模式构建,不要用 ARM 工具链。
Pulitzer 发表于 2025-12-9 08:36 | 显示全部楼层
我怀疑你可能启用了 CubeIDE 的 build tools 路径,让 Ceedling 用的是 arm-none-eabi-gcc 而不是 host gcc。单元测试最好还是用系统 gcc,省去很多奇怪的链接问题。
Uriah 发表于 2025-12-9 08:37 | 显示全部楼层
试试看在 test/test_helper.c 里面写个最简单的空 main,让 Ceedling 有一个正确的入口点。因为它默认会自己生成 main,但有时候会被别的文件覆盖。
Clyde011 发表于 2025-12-9 08:38 | 显示全部楼层
如果你想保留 markdown 的启动文件,你至少要在测试工程里定义一个假的 Reset_Handler,比如空函数,这样链接器就不会报错,但不建议这么干,会把问题搞更复杂。
solty 发表于 2025-12-9 16:16 | 显示全部楼层
启动文件未被正确包含或配置。
spicy 发表于 2025-12-9 17:17 | 显示全部楼层
直接添加.S文件到编译器标志可能无效
yiy 发表于 2025-12-10 08:51 | 显示全部楼层
单元测试最好还是用系统 gcc
wahahaheihei 发表于 2025-12-11 08:56 | 显示全部楼层
检查一下 test.yml 里面的 link flags,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

206

主题

207

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0