EWARM 编译:(tools/options/message 选all,产生程序大小)
12 446 bytes of readonly code memory //代码量(FLASH)
58 bytes of readonly data memory //常量(RAM)
11 045 bytes of readwrite data memory //变量(RAM)
可能库设置(特别是printf)相关,IAR5.30,其他设置未变,改变库设置。
1.Lib Full + Printf Full
46 656 bytes of readonly code memory
11 354 bytes of readonly data memory
8 031 bytes of readwrite data memory
2.Lib Normal + Printf Full
44 894 bytes of readonly code memory
11 104 bytes of readonly data memory
6 791 bytes of readwrite data memory
2.Lib Full + Printf Samll
41 476 bytes of readonly code memory
11 265 bytes of readonly data memory
7 955 bytes of readwrite data memory
3.Lib Normal + Printf Samll
39 944 bytes of readonly code memory
11 112 bytes of readonly data memory
6 791 bytes of readwrite data memory
可见,不同的库设置,对代码影响是很大的。
特别是IAR的printf Full,包含内容全面,但是会显著增加代码长度。
startup_stm32f10x_cl.S——Connectivity line devices通讯线产品
startup_stm32f10x_hd.S——High Density Devices大容量产品
startup_stm32f10x_md.S——Medium Density Devices中等容量产品
startup_stm32f10x_ld.S——Low Density Devices小容量产品
$PROJ_DIR$不是工程文件“*.eww”所在的目录;
“..\”表示上一级目录;
所以需要根据你的实际文件目录组织结构来修改
[
5.1.1基本选项配置 |
在工作区(Workspace)中选定一个项目,单击Project下拉菜单中的Options…选项,弹出选项配置对话框,从左边Category列表框内选择General Options进入基本选项配置。
|
5.1.2 C/C++编译器选项配置 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
点击选项配置窗口左边Category列表框内的C/C++ Compiler选项,进入C/C++编译器选项配置,对应有多个选项卡,用于设定不同的配置选项。每个编译器选项卡的右上角都有一个Factory Settings按钮,单击该按钮将自动设置默认选项。每个编译器选项卡中还都有一个Multi-file Compilation复选框,选择该复选框,允许编译器将多个文件作为一个编译单元进行编译,从而实现各程序文件之间的交互优化,例如内联、交叉调用、交叉跳转等,若同时选择下面的Discard Unused Publics选项,则将丢弃未使用的公共变量及公共函数。 图5.6所示为编译器选项配置中的Language选项卡,其中各选项的含义及用法如下: ? Language选项区域用于设置希望采用的编程语言,默认为C。如果选择Automatic复选框,则根据源程序文件的扩展名自动选择,扩展名为“.C”时作为C源程序进行编译,扩展名为“.CPP”时作为扩展嵌入式C++源程序进行编译。? ? Require Prototypes复选框用于强制编译器检查所有函数是否具有合适的原型。调用未声明过的函数、定义未声明原型的公共函数、采用未包含原型的函数指针进行直接函数调用等都将导致编译出错。 ? Language Conformance选项区域用于设置是否允许IAR C/C++语言扩展,默认为允许。选择Relaxed ISO/ANSI复选框将禁止IAR C/C++语言扩展,但并不要求严格符合ISO/ANSI标准。选择Strict ISO/ANSI将禁止IAR C/C++语言扩展,且要求严格符合ISO/ANSI标准。 ? Plain ‘char’ is选项区域用于设置char类型数据的符号。通常编译器将char作为无符号类型对待,若选择Signed复选框则作为带符号类型对待。需要注意的是运行库是按无符号类型编译的,因此链接运行库时选择Signed复选框可能导致类型不匹配错误。 ? 选择Enable multibyte surport复选框允许在C或C++源程序文件中使用多字节字符,默认状态下不允许在C或C++源程序文件中使用多字节字符。 图5.6 编译器选项配置中的Language选项卡 图5.7所示为编译器选项配置中的Code选项卡,选择Generate interwork code复选框可在编译时生成ARM及Thumb混合代码,并且可以调用混合库函数。Processor mode选项区域用于选择处理器模式,默认为Thumb模式。 图5.7 编译器选项配置中的Code选项卡 图5.8所示为编译器选项配置中的Optimization选项卡,用于设置编译器的优化方法和优化级别。通过Level选项区域可选择不同的优化级别:None(不优化,对调试支持最好)、Low(低级优化)、Medium(中级优化)和High(高级优化);若选择的优化级别为High,还可通过下拉列表框选择Balanced(平衡)、Size(代码大小)或Speed(运行速度),来决定高级优化方法。根据所选择的优化级别,Enabled选项框内将自动选择不同的优化项目。 图5.8 编译器选项配置中的Optimizations选项卡 图5.9所示为编译器选项配置中的Output选项卡。选择Generate debug information复选框,将使编译器在生成的目标代码中包含适用于C-SPY和其它调试器所需要的附加信息,这会使目标代码的长度增加,若不想要这些附加信息,请不要选中该复选框。 图5.9 编译器选项配置中的Output选项卡 IAR C/C++编译器将函数代码放入指定的存储器段中,供ILINK链接器使用。默认情况下函数代码被放置在名为“.text”的存储器段中。如果不想使用默认的存储器段,可在Code section name文本框内输入以点号“.”开头的其它存储器段名,这对于希望将应用程序代码放置在不同地址范围时特别有用。采用非默认存储器段名时应特别小心,避免与编译器或链接器的默认设置发生冲突而产生错误,通常修改存储器段名之后还需要修改相应的链接器配置文件。 图5.10 编译器选项配置中的List选项卡 图5.10所示为编译器选项配置中的List选项卡,用于设置是否生成列表文件,以及列表文件所包含的信息。编译器默认为不生成列表文件。选择Output list file方形复选框将生成输出列表文件,Assembler mnemonics圆形复选框规定列表文件中包含汇编指令助记符,Diagnostics圆形复选框规定列表文件中包含诊断信息。 选择Output assembler file方形复选框将生成输出汇编文件,Include source圆形复选框规定汇编文件中包含源代码,Include call information圆形复选框规定汇编文件中包含编译器生成的运行模块属性、调用帧以及帧大小等信息。 列表文件以“.lst”作为扩展名,存放在List目录下。用户可以通过工作区窗口的Output目录打开列表文件。 图5.11所示为编译器选项配置中的Preprocessor选项卡,用于符号定义以及规定包含文件所在的目录路径。选项卡中各项的含义及用法如下: ? 若选择Ignore standard include directory复选框,在对项目进行创建时将不使用标准包含文件。 ? Additional include directories文本框用于添加包含文件路径。添加时应输入包含文件所在的完整路径名,可以采用参数变量,当前项目所在路径为“$PROJ_DIR$”,IAR EWARM软件的安装目录路径为“$TOOLKIT_DIR$”。 ? Preinclude文本框用于指定编译器读入源文件之前的包含文件,这对于源代码中某处的整体修改特别有用,如定义某个新符号等。 ? Defined symbols文本框用于指定原本应在源程序文件中定义的符号,直接在文本框内输入希望定义的符号即可,该选项的作用与在源程序文件开始处使用#define语句相同。 默认状态下编译器不生成预处理器输出文件,若希望生成预处理器输出文件可以选择Preprocessor output to file复选框,同时可通过其下面的preserve comments复选框和generate #line directives复选框,决定是否在生成的预处理器输出文件中保留注释或产生行号。 图5.11 编译器选项配置中的Preprocessor选项卡 图5.12 编译器选项配置中的Diagnostics选项卡 图5.12所示为编译器选项配置中的Diagnostics选项卡,用于规定诊断信息的分类和显示。编译过程中可能产生三种错误诊断信息:remark(注意)、waining(警告)和error(错误)。remark是一种次要的诊断信息,表明按源程序结构生成的代码可能出现不正常。warning表示源程序中存在错误,但编译过程不会停止。error表示源程序中存在违反C/C++语言规则的现象,将导致无法生成目标代码。error信息不能被禁止,也不能重新分类。Diagnostics选项卡中各项的含义及用法如下: ? 编译器在默认状态不产生remark诊断信息,若选择Enable remarks复选框则允许编译器产生remark诊断信息。 ? Suppress these diagnostics文本框用于设定禁止输出诊断信息的标签记号,例如希望禁止waining信息Pe117和Pe177,直接在文本框内输入“Pe117,Pe177”即可。 ? Treat these as remarks文本框用于将一些诊断信息作为remark处理,例如希望将waining信息Pe177作为remark处理,直接在文本框内输入“Pe177”即可。 ? Treat these as wainings文本框用于将一些诊断信息作为waining处理,例如希望将remark信息Pe826作为waining处理,直接在文本框内输入Pe826即可。 ? Treat these as errors文本框用于将一些诊断信息作为error处理,例如希望将waining信息Pe117作为error处理,直接在文本框内输入Pe117即可。 ? 若选中Treat all warnings as errors复选框,编译器将所有waining都作为error处理。 图5.13 编译器选项配置中的Extra Options选项卡 IAR C/C++编译器的大多数命令都可以通过前面介绍的配置选项卡直接设置,还有一些命令则需要通过如图5.13所示的Extra Options选项卡进行设置。先在选项卡中选择Use command line options复选框,然后直接在下面文本框内逐行输入命令选项。 命令选项可以使用短名或长名,某些选项同时使用短名和长名。短名选项由1个短划线开始,后面跟一个单字符组成,如-e、-z等。长名选项由2个短划线开始,后面跟单个字符或多个字符组成,如--char_is_signed。 命令选项还可以带有参数,如-z3、--diagnostics_tables=文件名 等。 表5-1列出了需要通过如图5.13所示Extra Options选项卡进行设置的IAR C/C++编译器命令选项。 表5-1 需要通过Extra Options选项卡进行设置的IAR C/C++编译器命令选项
|
用户120337 2011-2-14 15:15
用户120337 2011-2-14 14:00