IAREmbeddedWorkbench用户指南IAREmbeddedWorkbenchforARM是IARSystems公司为ARM微处理器开发的一个集成开发环境(下面简称IAREWARM)。比较其他的ARM开发环境,IAREWARM具有入门容易、使用方便和代码紧凑等特点。故在这里介绍给打算学习使用或正在使用ARM芯片的朋友们共同探讨。IARSystems公司目前推出的昀新版本是IAREmbeddedWorkbenchforARMversion4.30,并提供一个32k代码限制、但没有时间限制的免费评估版。有兴趣的朋友可以到IAR公司的网站或南京万利电子的网站(本地网站)去寻找和下载。IAREWARM中包含一个全软件的模拟程序(simulator)。用户不需要任何硬件支持就可以模拟各种ARM内核、外部设备甚至中断的软件运行环境。从中可以了解和评估IAREWARM的功能和使用方法。我们编译整理的这本快速用户指南采用评估版软件安装目录C:\Programfiles\IARSystem\Embeddedworkbench4.0\ARM\tutor下的教程为例,一步一步介绍IAREWARM的使用方法。该教程采用了两个C语言程序,tutor.c和utilities.c。它们不和任何特定的硬件关联,所以介绍中的全部操作都是用模拟程序完成的。如果用户已经购买了IAR的JTAG仿真器J-Link,则可以在真实的目标板上运行。IAREWARM的主要特点如下:z高度优化的IARARMC/C++CompilerzIARARMAssemblerz一个通用的IARXLINKLinkerzIARXAR和XLIB建库程序和IARDLIBC/C++运行库z功能强大的编辑器z项目管理器z命令行实用程序zIARC-SPY调试器(先进的高级语言调试器)下面我们分步介绍如何使用IAREWARM一.生成一个新项目EWARM是按项目进行管理的,它提供了应用程序和库程序的项目模板。项目下面可以分级或分类管理源文件。允许为每个项目定义一个或多个编译连接(build)配置。在生成新项目之前,必须建立一个新的工作区(Workspace)。一个工作区中允许存放一个或多个项目。另外用户昀好建立一个专用的目录存放自己的项目文件。例如在本指南中我们生成一1个C:\Programfiles\IARSystem\Myproject目录。现在双击桌面上的IAREmbeddedWorkbench图标,出现IAREWARM开发环境窗口。1.生成新的工作区(Workspace)选择主菜单FileNewWorkspace生成新工作区。2.生成新项目①选择主菜单ProjectCreateNewProject,弹出生成新项目窗口,见图1。图1.生成新项目窗口本例选择项目模板(Projecttemplate)中的Emptyproject。②在Toolchain栏中选择ARM,然后点击OK按钮。③在弹出的另存为窗口中浏览和选择新建的Myprojects目录,输入文件名project1,然后保存。这时在屏幕左边的Workspace窗口中将显示新建的项目名。见图2所示。图2.Workspace窗口IAREWARM提供两种缺省的项目生成配置,即Debug和Release。本例在Workspace窗口顶部的下拉菜单中选取Debug。现在Myprojects目录下已生成一个project1.ewp文件。该文件中包含与project1项目设置有关的信息,如build选件等。项目名后缀上的*号表示该工作区有改变但还没有被保存。本例调用printf库函数,这是在C-SPY模拟器中的一个低级write函数。如果用户2希望在真实硬件上以release配置运行例子,就必须提供与硬件相适配的write函数。④保存工作区。先选择主菜单FileSaveWorkspace,浏览并选择Myprojects目录。然将工作区取名为tutorials输进Filename输入框,按保存按钮退出。这时在Myprojects目录下将生成一个tutorials.eww文件,该文件中保存了用户添加到tutorials工作区中的所有项目。窗口和断点放置等与当前操作有关的其他信息则被存储在Myprojects\settings目录下的文件中。3.给项目添加文件本例我们将采用arm\tutor目录下的两个源文件,Tutor.c和Utilities.c。Tutor.c是一个只用到标准C语言的简单程序。它用Fibonacci数列的前十个数初始化一个数组,并把结果打印到stdout。Utilities.c包含计算Fibonacci数列的实用程序。IAREWARM允许生成若干个源文件组。用户可以根据项目需要来组织自己的源文件。但在本例中没有必要。①在Workspace中选择希望添加文件的目的地,可以是项目或源文件组。本例直接选project1。②选择主菜单ProjectAddFiles打开标准浏览窗口,见图3。选择安装目录ARM\tutor下的上述2个文件,点击打开按钮,把它们添加到Project1目录下。图3.添加文件窗口4.设置项目选件生成新项目和添加文件后就应该为项目设置选件。IAREWARM允许为任何一级目录和文件单独设置选件,但是用户必须为整个项目设置通用的编译连接(build)选件。①选择通用选件选中Workspace中的project1–Debug,然后选择主菜单ProjectOptions。也可以先选择project1–Debug,然后选择鼠标右键命令中的Options。3图4.项目通用选件窗口在打开的Options窗口左边的Category中选择GeneralOptions。然后分别在:Target页面中,Core条目下选择ARM7TDMI-S。Output页面中,Outputfile条目下选择Executable。LibraryConfiguration页面中,Library条目下选择Normal。②选择编译器选件在Options窗口的Category中选择C/C++Compiler,见图5。4图5.C/C++Compiler选件窗口然后在:Language页面中,选择C,AllowIARextensions等。Optimization页面中,选择Generatedebuginformation。Output页面中,选择Outputlistfile和Assemblemnemonics。List页面中,选择Outputlistfile。并选择Assemblermnemonics和Diagnostics。点击OK按钮,确认选择的选件。在设置项目选件窗口中有许多其他信息。由于本例比较简单,所以不涉及这些内容。二.编译和连接应用程序这一步编译和连接(build)项目程序。同时生成一个编译器列表文件(compilerlistfile)和一个连接器存储器分配文件(linkermapfile)。1.编译源文件①选中workspace中utilities.c文件。②选择主菜单ProjectCompile,或工具条中的Compile按钮,或按右键后选择Compile命令。编译结束后在消息窗口中出现如图6中的信息。图6.Build窗口中的编译处理消息③用同样的方法编译tutor.c。编译完成后在Myprojects目录下将生成一批新子目录。因为我们在建立新项目时选择Debug配置,所以在Myprojects目录下自动生成一个Debug子目录。Debug子目录下又包含另3个子目录,名字分别为List、Obj、Exe。它们的用途如下:zList目录存下放列表文件。列表文件的后缀是lst。zObj目录下存放Compiler和Assembler生成的目标文件。这些文件的后缀为r79,可以用作IARXLINK连接器的输入文件。zExe目录下存放可执行文件。这些文件的后缀为d79,可以用作IARC-SPY调试器的输入文件。注意在执行连接处理之前这个目录是空的。点击project1–Debug前面的+号将目录展开。你可以从自动生成的Output目录中看5到所有生成的输出文件名以及反映相互依赖关系的的头文件名。图7.编译处理后的文件结构2.查看编译器列表文件现在我们通过改变编译器选件中的优化级别(Optimization)来观察list文件是如何自动更新生成的代码量的。①list文件的结构双击Workspace窗口中的Utilities.lst,打开list文件,它包含以下信息:z文件头——显示编译器的版本信息,列表文件生成时间,source文件、list文件和object文件的名字和路径,编译命令行及选件等信息。z文件体——显示为每条源语句生成的汇编代码和二进制代码,以及变量如何被分配到不同的段。z文件尾——显示所需的堆栈、程序代码以及数据存储器的总量,同时报告错误和警告信息。②选择主菜单ToolsOptions弹出IDEOptions对话窗口,选择Editor页面。选择ScanforChangeFiles选件。此选件将自动打开编辑窗口中的文件,目前是Utilities.lst文件。按OK按钮。6图8.IDEOption窗口③选中Workspace窗口中的Utilities.c,按鼠标右键选择弹出框中的Options…。从弹出的对话框左边的Category中选择C/C++Compiler并确定Overrideinheritedsettings。打开Optimization页面,把优化级别从None改定为High。然后按OK按钮。④重新编译Utilities.c,请注意这时编辑窗口中的Utilities.lst文件已经自动被刷新。文件尾显示的代码大小已经因优化级别的升高而减小。⑤对本例而言,Optimization应选择None。所以在连接处理前应该将优化级别恢复到原来的设置。这时应选中Utilities.c,按鼠标右键选择弹出框中的Options…。选择C/C++Compiler并取消Overrideinheritedsettings。然后重新编译Utilities.c。3.连接应用程序①先选中Workspace窗口中的Project1–Debug,然后选择主菜单ProjectOptions,弹出Options对话窗口,见图9。在左边的Category中选择Linker,显示IARXLINK的各选件页面。7图9.XLINK参数选件窗口本例全部采用缺省的连接处理选件。但是仍需要强调一下输出文件格式和Linker命令行文件的选择方法。z输出格式选择合适的输出格式十分重要。你可能需要将输出文件送给一个调试器进行调试,这时就要求输出格式带有调试信息。本例采用适合C-SPY调试器的缺省输出选件,它们是DebuginformationforC-SPY、Withruntimecontrolmodules和WithI/Oemulationmodules。指示需要连接将stdin和stdout指向C-SPY的I/O窗口的低级例程。如果用户希望把应用下载到一个PROM编程器时,则其输出格式不需要带调试信息,如Intel-hex或MotorolaS-records。在list页面中选择GenerateLinkerlisting和Segmentmap(见图10)。允许生成存储器分配MAP文件。注意:本例连接器命令文件中的定义不与任何特定的硬件相关联。EWARM提供的连接器命令文件模板都可以在模拟器(simulator)中使用。但是如果要把它们用于目标系统时必须与实际的硬件存储器分布相适配。用户可以从src\examples目录中找到与评估板相关的连接器命令文件。z连接器命令文件在连接器命令文件中,用于段(segment)控制的XLINK命令行是用来放置段的。熟悉连接器命令文件和段的放置十分重要。用户可以从ARMIARC/C++CompilerReference8Guide中了解更多信息。本例使用缺省的