S32DS 使用 tips--工程属性配置(编译选项和C编译器、汇编器及链接器设置)
1赞内容提要
引言
1. 如何打开S32DS应用工程的属性设置
2. 设置Cross Settings
2.1 配置Create flash image
2.2 配置print size
3. 配置Target Processor
4. 配置Standard S32DS C Compiler(C编译器)
4.1预处理器设置(Preprocessor)
4.2 包含路径(Includes)
4.3设置优化等级(Optimization)
4.4 配置调试信息(debugging)
5. 配置Standard S32DS C Linker(C链接器)
5.1 添加/设置链接文件
5.2 添加用户库
6. 配置Standard S32DS Assembler (汇编器)
总结
引言
本文详细介绍S32DS应用工程的工程属性配置,包括汇编器(Assembler)、C编译器(Compiler)、链接器(Linker)以及编译器所使用的C标准库、链接完成后输出Flash编程文件格式和memory使用统计结果的配置。
1. 如何打开S32DS应用工程的属性设置
在工程管理器(Project Explorer)中选中工程,右键-->Properities或者快捷键Alt + Enter;
Tips:同一个可以有多个编译目标(Bulid Target),不同的编译目标可以设置不同的属性配置
2. 设置Cross Settings
勾选使能两个比较有用的工具
−Create flash image-->生成编程文件工具使能
−Print Size-->控制台打印编译链接输出结果大小
2.1 配置Create flash image
通过配置Create flash image,我们可以控制编译结果elf生成的编程文件Output file format(输出文件格式)
-Motorola S-record-->摩托罗拉S19文件
-Intel HEX-->英特尔HEX文件
-Raw binary-->二进制BIN文件
Tips:设置输出文件格式为Motorola S-record,重新编译生成的S19文件其文件名后缀默认为.srec而非.s19,所以需要手动修改其后缀为.s19才能被某些编程器或者软件工具识别。
2.2 配置print size
−Size Format-->Berkely/SysV
−HEX-->输出16进制结果/十进制结果
−Show totals-->输出总大小
配置使能print size之后重新编译S32DS应用工程,编译结束后将在其控制台(console)会输出编译结果所占RAM和Flash的大小统计结果:
其中:
RAM size = .data + .bss(不包含堆栈(heap and stack)大小)
Flash size = .text + .data
上述编译结果的S19文件(S19文件中只包含要下载到Flash的代码和数据)结果如下:
Tips:heap和stack的大小可以从工程的链接文件(.ld)或者编译结果map文件中获得:
3. 配置Target Processor
用于设置工程目标MCU内核处理器配置选项
-内核架构(Architecture)
-大小端(Endianess)
-Float支持(Float ABI)
-FPU支持(FPU Type)
-非对齐访问(Unligned access)
-C标准库(Library support)
Tips:工程创建好了之后还可以通过工程属性的Target Processor对目标MCU的处理器选项进行重新配置,使能FPU硬件加速,选择不同的C标准库,从而实现优化。
4. 配置Standard S32DS C Compiler(C编译器)
4.1预处理器设置(Preprocessor)
在此可以添加全局宏定义/标志,对整个工程的.c和.h文件起作用
4.2 包含路径(Includes)
添加C编译器可以访问的路径,所有需要编译的.c和.h文件所在的目录都必须在此添加,编译的时候才能找到相应的文件
Tips:a. 新建工程是创建的目录都默认添加到Includes下了,但用户自己创建的目录,不会自动添加,必须手段添加,否则编译的时候会报找不到文件的错误;
b.推荐添加相对路径(通过Workspace选择添加),绝对路径(通过File system..添加)在其他电脑上不一定能正常工作:
4.3设置优化等级(Optimization)
-None(-O0):无优化,推荐使用
-其他优化等级:需要客户自己测试保证优化结果的正确性
4.4 配置调试信息(debugging)
通过配置调试等级设置(Debug Level)可以选择elf文件中所包含调试信息的多少:
-等级越高elf文件中包含的调试信息越丰富,推荐使用Maximum(-g3)
-该设置不影响最终Flash编程文件的大小,仅影响elf文件的大小
5. 配置Standard S32DS C Linker(C链接器)
5.1 添加/设置链接文件
−在通用(General)中添加/设置工程的链接文件,同一个工程目录下可以有多个链接文件,具体某个编译目标使用哪一个链接文件选在在此指定,默认新建S32DS工程的编译目标Debug/release-->S32K144_64_flash.ld,Debug_RAM-->S32K144_64_ram.ld,用户也可以使用其他的链接文件,完成对memory的个性化定义。
•推荐添加相对路径
•绝对路径在其他电脑上不一定能正常工作
5.2 添加用户库
如果在应用工程中需要使用到用户库(比如算法库,驱动库等),比如我们的AMCLIB.a这个电机驱动库,则需要在Libraries选项中配置相应的.a库文件和库文件及头文件搜索路径:
•推荐添加相对路径
•绝对路径在其他电脑上不一定能正常工作
•引用的库和相应的API定义头文件必须也同时添加到工程目录下在可以正常调用
6. 配置Standard S32DS Assembler (汇编器)
与C编译器类似,提供针对汇编代码的:
General:添加文件路径
Symbols:全局符号定义
Optimization:优化等级设置
Debugging:调试信息配置
总结
嵌入式应用工程开发,从用户输入的汇编和C源代码到最终生成可下载调试的elf文件和Flash编程文件,需要经过预处理-->编译-->汇编-->链接这四个工程,对应的会使用到IDE里面集成的预处理器-->C编译器-->汇编器-->链接器,通过S32DS的工程属性选项配置,我们可以对其进行详细的配置和控制,同时通过S32DS集成的print size和create flash image两个使用工具,可以得到编译结果所占用memory资源的大小和生成不同格式的Flash编程文件。
本文虽然以S32DS for ARM v2.0的应用工程为例进行的介绍,但其设置适用于S32DS for Power v1.1/2以及同样基于eclipse的CodeWarrior 10.6/7 IDE。
胡恩伟
NXP汽车电子FAE
若对本文观点有任何意见和建议欢迎留言指出。
如果喜欢,可以关注本人公众号,阅读更多精彩内容。