此页面主要包括如下及部分:
Preprocessor Symbols:预处理,主要就是预定义功能,相当于在程序中的#define xxxx。我上面预定义GD32F30X_CL,在gd32f30x.h文件中就不用定义了。
Language / Code Generation:语言或代码生成,可以理解成编译、链接到最后生成代码。这部分功能对于代码优化比较重要,初学者可以不用过多理解,对代码大小、运行速度等性能要求较高的人就需要深入理解。
Include Paths:包含路径。指定我们工程中使用文件所在的位置,让编译器找到相应的文件。是初学者、高级软件工程师都必须掌握的一项。
Misc Controls:多功能控件。不常用。
Compiler control string:编译器控制字符串。显示当前在编译器命令行指令。
Execute only Code:只生成执行代码。只生成执行代码防止编译器生成任何数据访问代码部分。
Optimization:优化选择项,优化选择项,有Level0 - Level3四个选项,初学者、在线调试建议使用Level0,也就是不优化,这样执行的效果才和代码一样。如果配置成Level3,在线调试可能有些地方优化而不能打断点。
Optimize for Time:优化时间,即优化代码中费时的地方。比如有些算法,本身代码量就比较大,运行需要很长时间(假如需要2秒),这个时候勾选上该功能,会发现运行时间有比较明显的减少(或许不到1秒时间)。
在基于AC5的程序移植到AC6时,如果原来在AC5可以正常执行的程序无法正常执行,而又找不到原因的时候,可能是由于代码优化策略不同导致。这时可以通过改变Execute only Code、Optimization、Optimize for Time的不同组合,尝试程序是否可以正常运行。
Split Load and Store Multiple:加载和存储多个分裂。非对齐数据采用多次访问方式。当 LMD/STM 指令有 4 个以上产生时,列分裂LMD 和 STM 指令,以减不中断延迟。
One ELF Section per Function:优化每一个函数 ELF 段(建议都勾选上)。每个函数都会产生一个 ELF 段,勾选上,允许优化每一个 ELF 段。这个选项可以减少潜在的共享地址、数据和函数之间的字符串。直白的意思:可以减少代码量ROM的大小(内存RAM不会减小)。
Strict ANSI C:标准(严格)的ANSI C标准。编译时严格按照标准的ANSI C进行检查。
Enum Container always int:枚举总是int型。我们枚举时成员变量类型为int型。
Plain Char is Signed:纯字符标记为字符。代码举例:char a[] = “abcd”; 也就是说将“abcd”标记为字符型。
Read-Only Position Independent:为常量生成独立的代码空间。比如:我们定义字库变量为常量,勾选该选项,会将这些字库变量放在独立的代码空间。
Read-Write Position Independent:为可读写代码生成独立的代码空间。
Warnings:警告(建议开启全部警告)。可以避免代码漏洞的产生。
No Warnings:不会有警告提示和输出
All Warnings:所有警告提示和输出。
Thumb Mode:Thumb模式。指定设置文件或文件夹(组)为Thumb模式。【注意:在工程中该模式为默认,也就是不能选择】
No Auto Includes:不自动添加头文件(一般不勾选)。不勾选该选项,编译器就会在Keil安装路径寻找你工程中.h文件。
C99 Mode:C99标准模式。