【008】ARM gcc编译指令

ARM gcc编译指令

关键词:gcc,ARM,Eclipse,STM32,嵌入式

  在“【002】搭建开源嵌入式集成开发环境”和“【003】使用GNU ARM工具链进行STM32开发”两篇博文中介绍了基于GUN的STM32开发环境搭建。在编译和连接的过程中,均采用系统默认的设置,生成的文件可以在嵌入式系统中正常运行,并符合预期的结果。嵌入式开发需要根据具体的需求来合理剪裁,以实现性能和成本的双赢局面。本文对于基于ARM gcc的编译和连接指令进行介绍,以方便产生紧凑可靠地文件。

ARM芯片相关设置(Machine-DependentOptions)

【008】ARM gcc编译指令_第1张图片

图1 EclipseTarget Processer 截图

  如图1所示为Eclipse创建工程中Target Processer页面的截图,下面为该页面下编译指令解析:

  -mthumb-interwork 生成支持在ATM和Thumb指令之间互相调用的代码。

  -mfloat-abi=name 指定要使用的浮点ABI。可以是“soft”生成的代码使用软件模拟浮点计算,“softfp”生成的代码使用硬件浮点指令,但是软件浮点调用规则,“hard”生成硬件浮点指令代码且使用特定FPU调用规则。(softfp的意义在哪里?)

  -mlittle-endian 采用小端模式

  -mbig-endian 采用大端模式

  -march=name 指定ARM架构,如“armv7-a”,“armv7-m”,“armv7-r”,“armv7e-m”等

  -mcpu=name 指定ARM处理器的型号,如“cortex-m4”等

  -mfpu=name 指定硬件FPU型号,如“vfpv2”等

  -mthumb 使用Thumb指令集

  -marm 使用ARM指令集

  -munaligned-access

  -mno-unaligned-access 使能(失能)从非对其的16位或32位地址处读写16为或32位数值


优化选项(Optimization)

【008】ARM gcc编译指令_第2张图片

图2优化选项页面截图

  如图2所示为Eclipse创建工程中优化页面截图,下面为相关编译指令解析:

  -00(-O1,-O2,-O3)编译优化等级,数字越大优化越多。

  -fmessage-length=n 格式化错误输出信息,如果n=0,那么每条错误信息为一行

  -fsigned-char 设置char为有符号类型

  -ffunction-sections 在编译的时候把每个函数作为一个section

  -fdata-sections 在编译的时候把每个数据作为一个section。其中每个sections名与function或data名保持一致,能够减小生成文件的大小。

  -fno-common 在编译过程中,禁止将未初始化的全局变量放到common段。

  -fno-inline忽略代码中的 inline 关键字,该选项使编译器将内联函数以普通函数对待;等同无优化选项时的处理。

  -ffreestanding 按独立环境编译,该环境可以没有标准库,且对main()函数没有要求。最典型的例子就是操作系统内核。该选项隐含设置了 -fno-builtin,且与 -fno-hosted 等价。

  -fno-builtin 不适用C语言内建函数。

  -fsingle-precision-constant 将浮点常量作为单精度常量对待。

  -fPIC 生成PIC(Position-IndependentCode),以达到动态链接的目的。

  -flto 优化连接时间。

  -fmove-loop-invariants 使能循环优化,将不变部分放在循环外执行。


Warnings设置选项

【008】ARM gcc编译指令_第3张图片

图3 Eclipse Warning配置页面

  如图3所示为Eclipse创建工程中Warning页面截图,下面为相关编译指令解析:

  -fsyntax-only 检查程序中的语法错误,但是不产生输出信息。

  -pedantic 允许发出ANSI C标准所列的全部警告信息。

  -pedantic-errors 允许发出ANSIC标准所列出的错误。

  -Wall 编译后显示所有警告

  -W 与-Wall类似,会显示警告,但是仅显示编译器认为会出现错误的警告。

  -Wunused 提升为使用的函数或变量。

  -Wuninitialised 提示为初始化的变量。

  -Wextra 打印一些额外的警告信息。

  -Wmissing-declarations 提示声明确实。

  -Wconversion 提示非显示转换。

  -Wpointer-arith 对函数指针或者void *类型的指针进行算术操作时给出警告。

  -Wpadded 打开包含padding提示。

  -Wshadow 当局部变量遮蔽了参数,全局变量时,进行提示。

  -Wlogical-op 警告表达式中逻辑运算符的可疑用法。

  -Wfloatequal 警告使用了浮点数相等判定

  -Werror 将所有的警告当做错误来处理

 

连接设置选项

【008】ARM gcc编译指令_第4张图片

图4Eclipse 连接页面

  如图4示为Eclipse创建工程中连接页面截图,下面为相关编译指令解析:

  -nostartfiles 在连接之时不使用标准的系统启动文件。

  -nodefaultlibs 在连接之时,不使用标准的系统库

  -nostdlib 在连接之时,即不使用标准的系统启动文件也不使用标准的系统库。

  -Xlinker option 传递选项作为连接器的选项,可以用来提供特定系统下GCC不能识别的连接选项





联系作者

 

 


你可能感兴趣的:(嵌入式开发)