仿真时,main函数的起始位置是如何确定的?
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?可能是项目文件路径冲突导致的。 构建配置残留导致的? 检查是否有其他文件路径冲突。 尝试在新工作区重建项目。 重新生成代码。 清理并重新构建项目。 在 Project/Src/main.c 里加个 #error "This is my main.c",看看编译时有没有报错,如果没有,说明这个文件根本没被编译进去。 看看 startup_stm32f4xx.s 里的 Reset_Handler,它最终跳转的 _start 或 main 可能并不是你期望的那个。 使用 objdump -t 检查 ELF 文件,可以看看符号表里 main 是在哪个地址定义的,是否来自你期望的 main.c。 检查 Makefile,看看编译时 SRCS 变量里有没有包含 Project/Src/main.c,如果没有,就需要手动添加进去。 可能是 CubeMX 重新生成了默认 main.c,并把你的 main.c 覆盖或忽略了,建议把 Project/Core/Src/main.c 先移走,再重新编译看看效果。 检查工程设置,看看 C/C++ Build -> Settings -> Tool Settings -> MCU GCC Compiler -> Include Paths 里是否仍然包含 Project/Core/Src/。 可能 CMakeLists.txt 里优先使用了 Project/Core/Src/main.c,导致编译链接时你的 Project/Src/main.c 没有被真正编译进去。 查看 map 文件,编译后生成的 *.map 文件可以帮助你确定最终链接的 main 是哪个文件里的。 尝试删除 Project/Core/Src/main.c,看看编译是否报错,如果没有报错,说明 Project/Src/main.c 没有正确加入工程。 检查 .cproject 和 .project,有时候 STM32CubeIDE 可能仍然引用旧的 main.c 路径,可以手动编辑这些 XML 配置文件修正路径。
页:
[1]