ARM GCC编译STM32F4项目生成有效二进制文件失败求助
STM32F401RE(Cortex-M4)在CodeBlocks+arm-none-eabi GCC环境下运行异常求助
我正在将所有STM32项目迁移到CodeBlocks IDE + arm-none-eabi GCC编译器环境,流程为:用STM32CubeMX生成基础代码,再合并到包含CodeBlocks项目文件、.s启动文件、.ld链接脚本等的指定目录。目前Cortex-M0架构的项目编译运行完全正常,但针对STM32F401RE(Cortex-M4架构)的项目,编译生成的可执行文件运行时出现大量异常,怀疑是GCC调用方式或配置错误导致,特此求助。
当前配置
预定义宏:STM32F401xE
编译器选项:
(注:目标架构为Cortex-M4,当前错误设置为cortex-m0)
-mcpu=cortex-m0-ffunction-sections-fdata-sections-fno-common-s
链接器选项:
-Wl,--gc-sections-Wl,-Map,default/ggmeg.map-T ./STM32F401RETx_FLASH.ld-Wl,--print-memory-usage,--gc-sections,--relax
调试限制与步骤
使用旧版Segger Jlink作为SWD接口,无法进行实时调试。调试步骤为:在HAL_Init(); SystemClock_Config(); MX_GPIO_Init();之后将某GPIO置1并进入while(1){}循环,以此确认代码执行进度。
异常现象
- 使用
-mcpu=cortex-m4编译时,代码在到达调试步骤前崩溃; - 错误使用
-mcpu=cortex-m0编译(目标为M4架构)时,情况稍好但仍存在问题; - 若在
MX_GPIO_Init()内部末尾将GPIO置1,GPIO成功被置1,运行正常; - 若在
MX_GPIO_Init()之后将GPIO置1,代码在到达该步骤前崩溃。
初步结论
MX_GPIO_Init()函数返回时发生崩溃,存在严重问题。
内容的提问来源于stack exchange,提问作者ggadde29
相关产品推荐
相关产品推荐

