HighTec 工程配置详解
编译配置
构建配置管理器
管理器内,可以创建各种不同用途的配置项。例如用于生产工程的 ROM
配置,用于调试工程的 Debug
配置。对于每个配置,所设置的工程属性是单独分开的,互相之间没有影响。
打开构建配置管理器
选中工程后,右键选择 Build Configurations --> Mange
即可打开管理器。
在管理器内,可以看到对于本工程创建的所有的配置文件,左键可以选中配置项。下方四个菜单依次是:
Set Active 设置为当前活动的配置项
New 创建一个新的配置项
Delete 删除当前选中的配置项
Rename 重命名当前选中的配置项
同一时刻,必须有且只有一个配置项是活动的。
创建一个新的构建配置
点击 New 打开构建工具,Name
和 Description
可以由开发者进行编写,下方有一个设置拷贝的来源。
来源分为:
当前工程存在的配置:
当前工作空间存在的配置:
使用预定义配置:
编译属性
编译步骤
编译步骤分为编译前和编译后,编译前后可以使用默认的库来添加编译步骤。
编译前可以输出编译器的版本到 build_version.txt
。
编译后可以生成 hex/srec
文件,或者进行其他文件的转换或者对输出文件进行分析。
编译环境变量
环境变量可以看做是在操作系统(一般是Windows)的环境变量之后,附加的变量,在编译过程中创建比较简单的makefile文件。
编译日志
编译日志是需要根据工程的实际情况,来选择是否开启编译日志输出。且输出的文件位置可以进行设置。
编译配置
下面到了重点介绍的,关于编译配置的说明。同时需要说明的是 tricore 工具链的命令行最大字符数为 8K 字节,超过之后,会导致编译文件异常(不一定会提示编译失败)。
编译设置分为 工具链设置
, link配置
, 编译步骤
, 编译结果文件格式
。
工具链设置
Global options
全局配置,可以配置 CPU TYPE。 gcov 是用来分析静态内存时可以选择使用,但是需要配合第三方软件进行使用。
TriCore C Compiler
可以看到编译命令输出的编译过程。 其中所有配置项目都是在子菜单中可以进行配置。
Tricore PCP Compiler
TriCore Assembler
TriCore GTM Assembler
TriCore C Linker
这几个也可以点击看命令行输出的编译过程,分别为PCP编译器,汇编文件编译器,GTM汇编文件编译器,链接器。
TriCore C Compiler
General
配置头文件搜索路径
-fno-short-enums : 不仅仅分配给枚举量使用的数据类型(short)
-funsigned-bitfields 位域使用无符号类型
Optimization
优化
分为5个等级
None : 无优化
Normal : 默认优化
Speed : 速度优先
Size : 尺寸优先
Balanced : 平衡速度与尺寸
Debugging
调试
调试等级分为4个
None 无调试信息
Minimal 最小调试信息
Default 默认调试信息
Maximum 最大调试信息
建议在调试阶段使用 -g3 添加最大的调试信息,以方便进行调试和解决错误。在生成Lib或者elf时,可以选择None模式,减少生成调试信息的过程,减少编译时间。且Lib也可以减小体积。
Warnings
警告
对编译过程所需要产生的警告信息进行设置,可以看到类型还是比较多。可以根据实际项目进行调整。
-W 更多的警告
-Wall 所有的警告信息
-Wdiv-by-zero 如果有除零操作
-Wcast-align 对数据指针转换时,增加对内存对齐的检查
-Wignored-qualifiers 如果函数返回类型超出范围
-Wformat 如果有个事函数使用错误
-Wnested-externs 如果函数内有外部引用函数
-Wdoble-promotion 从float到double的隐式转换
-Werror=fouble-promotion 从float到double的隐式转换变为错误
Output
输出
Symbols
符号
C语言中可以使用 #define SYSBOL 0
来产生一个宏定义。但是需要使用时,需要包含这个头文件。同样,在工程编译过程中,也可以使用 -Dsysbol 来产生一个全局的宏定义。
-D 产生的宏定义
-U 失效的宏定义
Language dependent
语言标准
分成4个,对于每个标准之间的区别,则需要自行查找。
Code Generation
代码生成
对可能使用的对象进行解释
-finline-limit= 对于行函数生成的最大字节数
-finline-is-always-inline 对所有的行函数增加 __always_inline__
-fdata-sections 对所有的数据段进行拆开生成,配合 -gc-sections 可以对不使用的变量链接时进行删除。应该只对 .data 有效
-ffunction-sections 对所有的函数段进行拆开生成,配合 -gc-sections 可以对不使用的函数在链接时进行删除,对所有函数有效
TriCore C Linker
General
通用配置
-nocrt0 不包含启动文件 crt0.o 文件。根据实际项目需要进行选择
-nostdlib 不使用标准库。根据实际项目需要进行选择
-nostartfiles 链接时,不使用系统启动文件
-T 选择链接文件
Optimization
优化
–gc-sections 删除不使用的段
–mem-holes 当前输出段(内存段的最后一个输出)已经满时,自动将输入段放入下一个输出段
Libraries
库文件
-L 库文件搜索路径,可以使用绝对路径和相对路径
-l 库文件名称。 不包括lib前缀和.a后缀 例如实际库文件是 libc.a 则此处需要填写 c 。
Output
输出文件
-Map= 输出map文件名称
link设置
选择后,可以将需要连接的目标文件放置在 iROM.object
文件内,以减少命令行的长度。
选择前后的连接命令对比
编译步骤
编译步骤和前面介绍的编译前后步骤一样,但是这里就没有提供库来使用,只能由开发者进行手动填写。还没有研究两个编译的前后顺序。
编译结果文件格式
结果文件可以分为两种类型,可执行文件(.elf)和静态库文件(.a),其中还可以设置名称和前缀、后缀。
name 可以使用宏名称 ${ProjName}
生成和工程名称一样的文件。