一、下载GCC
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
二、安装GCC
把GCC解压到keil的安装目录下面H:\Keil_v5\ARM\GCC
三、KEIL5配置交叉编译工具链
四、ARM GCC交叉编译选项
配置CC编译规则,Misc Controls 填写:
-march=armv8-m.main+fp+cdecp0 -mthumb -ffunction-sections -fdata-sections -mfpu=fpv5-sp-d16 -mfloat-abi=hard
核心架构配置:
-march=armv8-m.main+fp+cdecp0
armv8-m.main:指定ARMv8-M Mainline架构(Cortex-M33/M23等)
+fp:启用浮点单元支持
+cdecp0:允许协处理器0(CP0)用于自定义指令扩展
-mthumb
生成Thumb-2指令集(16/32位混合编码),提高代码密度
浮点运算配置:
-mfpu=fpv5-sp-d16
fpv5-sp:使用FPv5-SP浮点单元(单精度)
d16:限制浮点寄存器使用量为16个(D0-D15)
-mfloat-abi=hard
强制硬件浮点ABI,函数调用通过浮点寄存器传参
需与FPU型号严格匹配,否则引发非法指令异常
若目标芯片无FPv5单元,需改为 -mfloat-abi=softfp 回退到软件浮点
代码优化选项:
-ffunction-sections/-fdata-sections
将函数/数据分配到独立section,配合链接脚本实现精准裁剪
显著减少固件体积(尤其裸机开发场景)
Assembler规则,Misc Controls 填写:
-mcpu=cortex-m33 -mthumb
cortex-m33:指定目标处理器为ARM Cortex-M33架构,启用该CPU特有的指令集优化
自动启用TrustZone安全扩展和DSP指令支持(若芯片支持)
-mthumb:强制生成Thumb-2指令集(16/32位混合编码),相比ARM模式可减少约30%代码体积
与Cortex-M33的纯Thumb执行模式完全兼容
Linker规则,Misc Controls 填写:
-mcpu=cortex-m33 -mthumb -mfpu=fpv5-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections –specs=nosys.specs –specs=nano.specs -u _printf_float -Wl,–no-warn-rwx-segments
核心架构配置:
-mcpu=cortex-m33:指定目标为Cortex-M33处理器,启用TrustZone安全扩展和DSP指令支持
-mthumb:强制生成Thumb-2指令集,减少约30%代码体积
浮点运算配置:
-mfpu=fpv5-sp-d16:启用FPv5单精度浮点单元,限制使用16个浮点寄存器
-mfloat-abi=hard:强制硬件浮点ABI,通过浮点寄存器传参
代码优化选项:
-ffunction-sections/-fdata-sections:将函数/数据分配到独立段,便于链接时裁剪无用代码
–specs=nano.specs:使用newlib-nano库减小内存占用
–specs=nosys.specs:禁用系统调用,适用于裸机环境
特殊功能配置:
-u _printf_float:强制链接浮点版printf,支持%f格式化输出
-Wl,–no-warn-rwx-segments:抑制可写可执行段的警告(常见于RTOS内存布局)
暂无评论内容