封存into 发表于 2025-3-18 11:00

仿真时,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?

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 配置文件修正路径。
页: [1]
查看完整版本: 仿真时,main函数的起始位置是如何确定的?