[STM32F4] 仿真时,main函数的起始位置是如何确定的?

[复制链接]
947|16
 楼主| 封存into 发表于 2025-3-18 11:00 | 显示全部楼层 |阅读模式
STM32CubeIDE 项目框架生成后,我用我自己代码 main.c。当通过 STLink 仿真时,程序不在我的 main.c 中,而是跑到了原始的空 Project\Core\Src\main.c 并不是我的 Project\Src\main.c。仿真时,IDE中仅打开我的 Project/Scr/main.c。当仿真在 HAL_Init() 断点处停止时,它会将 Project/Core/Scr/main.c 加载到IDE。这如何解释,当然我没删掉Project\Core\Src\main.c?
classroom 发表于 2025-3-18 11:17 | 显示全部楼层
可能是项目文件路径冲突导致的。
laocuo1142 发表于 2025-3-18 12:00 | 显示全部楼层
构建配置残留导致的?
flycamelaaa 发表于 2025-3-18 13:20 | 显示全部楼层
检查是否有其他文件路径冲突。
powerantone 发表于 2025-3-18 14:45 | 显示全部楼层
尝试在新工作区重建项目。
stormwind123 发表于 2025-3-18 15:30 | 显示全部楼层
重新生成代码。
probedog 发表于 2025-3-18 15:59 | 显示全部楼层
清理并重新构建项目。
Wordsworth 发表于 2025-3-22 07:45 | 显示全部楼层
在 Project/Src/main.c 里加个 #error "This is my main.c",看看编译时有没有报错,如果没有,说明这个文件根本没被编译进去。
Bblythe 发表于 2025-3-22 07:47 | 显示全部楼层
看看 startup_stm32f4xx.s 里的 Reset_Handler,它最终跳转的 _start 或 main 可能并不是你期望的那个。
Pulitzer 发表于 2025-3-22 07:48 | 显示全部楼层
使用 objdump -t 检查 ELF 文件,可以看看符号表里 main 是在哪个地址定义的,是否来自你期望的 main.c。
Uriah 发表于 2025-3-22 07:49 | 显示全部楼层
检查 Makefile,看看编译时 SRCS 变量里有没有包含 Project/Src/main.c,如果没有,就需要手动添加进去。
Clyde011 发表于 2025-3-22 07:50 | 显示全部楼层
可能是 CubeMX 重新生成了默认 main.c,并把你的 main.c 覆盖或忽略了,建议把 Project/Core/Src/main.c 先移走,再重新编译看看效果。
公羊子丹 发表于 2025-3-22 07:51 | 显示全部楼层
检查工程设置,看看 C/C++ Build -> Settings -> Tool Settings -> MCU GCC Compiler -> Include Paths 里是否仍然包含 Project/Core/Src/。
周半梅 发表于 2025-3-22 07:52 | 显示全部楼层
可能 CMakeLists.txt 里优先使用了 Project/Core/Src/main.c,导致编译链接时你的 Project/Src/main.c 没有被真正编译进去。
童雨竹 发表于 2025-3-22 07:53 | 显示全部楼层
查看 map 文件,编译后生成的 *.map 文件可以帮助你确定最终链接的 main 是哪个文件里的。
帛灿灿 发表于 2025-3-22 07:54 | 显示全部楼层
尝试删除 Project/Core/Src/main.c,看看编译是否报错,如果没有报错,说明 Project/Src/main.c 没有正确加入工程。
万图 发表于 2025-3-22 07:55 | 显示全部楼层
检查 .cproject 和 .project,有时候 STM32CubeIDE 可能仍然引用旧的 main.c 路径,可以手动编辑这些 XML 配置文件修正路径。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

81

主题

139

帖子

0

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