经过两周的努力,使用ARM-GCC编译出来的文件终于可以下载到板子上跑起来了,关于编译器的配置解释如下:
编译环境: windows+cygwin
使用编译器:arm-none-eabi-gcc-4.6:https://launchpad.net/gcc-arm-embedded/4.6/2011-q4-major
编译选项:
-Wall 打开waring
-fsigned-char 将char做为signed
-fno-builtin 不使用build in函数(glibc函数)
-ffunction-sections 将函数放到自己的section中(链接时配合--gc-sections可以移除没有使用的函数)
-fdata-sections 将data放到自己的section中(链接时配合--gc-sections可以移除没有使用的data)
-mcpu=cortex-m0 cpu类型cortex-m0
-mthumb 指定arm指令集 thumb(16bit/32bit混合指令集)
链接选项:
-mcpu=cortex-m0 cpu类型cortex-m0
-mthumb 指定arm指令集 thumb(16bit/32bit混合指令集)
-nostartfiles 不使用编译器默认的ld文件和startup文件
-Wl,-Map=$(IMG_PATH)/$(IMG_MAP) 生成指定的map文件
-Wl,--gc-sections 移除唯有链接的内容
-Wl,-T$(L_SCRIPT) 指定ld文件
出现过的问题:
编译选项忘了使用-mcpu=cortex-m0 –mthumb,导致编译后的文件无法运行。
链接时gcc -Map=$(IMG_PATH)/$(IMG_MAP) --gc-sections 会直接报不能识别选项,需要使用-Wl,--gc-sections来指定是链接选项即可
其它的几个命令:
elf 转bin: arm-none-eabi-objcopy -O binary –S file.elf file.bin
分析elf size: arm-none-eabi-size file.elf