code blocks 代码颜色_S32DS GNU GCC编译优化选项与配置方法详解及S32 SDK代码编译优化选项设置建议...
内容提要
引言
1. GNU GCC编译器的优化选项详解
1.1 何为编译器的优化选项
1.2 编译器优化选项的工作原理
1.3 GNU GCC编译器的-O/O1优化等级
1.4 GNU GCC编译器的-O2优化等级
1.5 GNU GCC编译器的-O3优化等级
1.6 GNU GCC编译器的-O0优化等级
1.7 GNU GCC编译器的Os优化等级
1.8 GNU GCC编译器的-Ofast优化等级
1.9 GNU GCC编译器的-Og优化等级
2. S32DS IDE中GNU GCC编译器的优化选项配置方法
2.1 设置整个应用工程/静态库编译工程的全局GNU GCC编译器优化
2.2 设置应用工程/静态库编译工程指定文件目录的GNU GCC编译器优化选项
2.3 设置应用工程/静态库编译工程特定源文件的GNU GCC编译器优化选项
2.4 查看编译优化选项设置结果和优化选项设置的优先级
3. 使用S32K SDK的S32DS应用工程的代码优化建议
3.1 S32K SDK代码支持编译优化等级
3.2 通过S32DS应用工程的文件目录编译优化选项设置配置SDK代码编译优化等级为-O1
3.3 用户代码的优化选项配置建议
总结
引言
很多S32DS和S32K SDK的用户反馈说,使用S32K SDK的S32DS应用工程编译结果比较差--编译结果代码量太大,运行速度慢。比如在S32DS for ARM v2018.R1新建的使用S32K SDK RTM3.0.1的S32K144测试工程,其添加了默认的PinSettings组件、Clock_Manager组件和interrupt_manager组件,分别完成引脚功能配置、时钟配置和中断管理,以及osif组件做软件延时功能。在main函数中,仅调用了时钟初始化和引脚初始化,以及OSIF_TimeDelay()和引脚翻转API函数实现一个LED的toggle功能:
其编译的结果就需要占用14856字节Flash和3456字节SRAM存储器。
Tips:S32DS应用工程编译结果占用MCU存储器资源大小的计算方法如下:
占用的Flash大小(size) = .text(代码段) + .data(有初始化值的全局/静态变量) = 14520 + 336 = 14856字节 = 14.5KB;
占用的Flash大小(size) = .bss(未初始化或者初始值为0的全局变量/静态段) + .data(有初始化值的全局/静态变量) = 3120+ 336 = 3456字节 = 3.375KB;
此时,可以看到新建的S32DS应用工程,默认的GCC编译器优化等级为-O0,即无任何优化:
若开启GCC编译器的优化,将优化等级设置为-O1:
重新编译工程,编译结果如下,只用Flash 8020字节,SRAM 3456字节:
相较而言,开启优化()比默认不开优化时,编译结果可以节省46%((14856-8020)/14856)的Flash存储器空间。
另外一个实际的S32K142电机控制应用工程,不开优化与开优化之后的结果如下:
优化选项为-O0,关闭优化: