MDK版本:5.24.2.0
工程已经用ARMCC编译通过,复制MDK工程文件开始将编译器改为GCC arm。
1. 将编译器改为GCC arm.
2. 修改项目编译条件
CC子项:
Preprocessor Symbols中的Define项和ARMCC相同:USE_STDPERIPH_DRIVER,STM32F0XX,
Misc Controls的配置:-mcpu=cortex-m0 -mthumb -fdata-sections -ffunction-sections
可以根据MCU调整-mcpu=cortex-m0配置
Assembler子项:
Misc Controls的配置:-mcpu=cortex-m0 -mthumb
Link子项:
Misc Controls的配置:-Wl,-gc-sections
3. 获取ld文件和startup文件
使用ST的STM32CubeMX生成一个makefile工程
STM32CubeMX版本:5.3.0
在生成的工程文件夹内拷贝startup和ld文件到自己的工程,其中startup.s文件替换原来的startup文件,在link子项中的Linker Script File选择该ld文件
PS:修改堆栈的大小是在ld文件中
/* Highest address of the user mode stack */
_estack = 0x20002000; /* end of RAM */
/* Generate a link error if heap and stack don't fit into RAM */
_Min_Heap_Size = 0x200; /* required amount of heap */
_Min_Stack_Size = 0x400; /* required amount of stack */
使用gcc编译MDK并不会像ARMCC一样生成ROM和RAM的使用情况,自己写了一个map文件分析工具,计算ROM和RAM的使用情况,然后在user选项中在编译完成后运行该工具,参数是map文件的文件路径,其中对应的相对地址参考地址是工程文件uvprojx所在的文件夹。
运行效果如下: