EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-637586500EWARM快速用户快速用户快速用户快速用户指南指南指南指南EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-637586501目目目目录录录录前前前前言言言言2第一章第一章第一章第一章EWARM集成开发环境及配套仿真器集成开发环境及配套仿真器集成开发环境及配套仿真器集成开发环境及配套仿真器…3第二章第二章第二章第二章在在在在EWARM中生成一个新项目中生成一个新项目中生成一个新项目中生成一个新项目.
11第三章第三章第三章第三章编译和连接应用程序编译和连接应用程序编译和连接应用程序编译和连接应用程序.
15第四章第四章第四章第四章用用用用C-SPY调试应用程序调试应用程序调试应用程序调试应用程序.
22第五章第五章第五章第五章EWARMFlashLoader开发指南开发指南开发指南开发指南…30第六章第六章第六章第六章ADS工程移植指南工程移植指南工程移植指南工程移植指南((((上上上上)))41第七章第七章第七章第七章ADS工程移植指南工程移植指南工程移植指南工程移植指南((((下下下下)))57EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-637586502前前前前言言言言IAREmbeddedWorkbenchforARM是IARSystems公司为ARM微处理器开发的一个集成开发环境(下面简称IAREWARM).
比较其他的ARM开发环境,IAREWARM具有入门容易、使用方便和代码紧凑等特点.
故在这里介绍给打算学习使用或正在使用ARM芯片的朋友们共同探讨.
IARSystems公司目前推出的最新版本是IAREmbeddedWorkbenchforARMversion4.
42,并提供一个32k代码限制学习版或30天时间限制的免费评估版,可以到IAR公司的网站www.
iar.
com/ewarm下载.
IAREWARM中包含一个全软件的模拟程序(simulator).
用户不需要任何硬件支持就可以模拟各种ARM内核、外部设备甚至中断的软件运行环境.
从中可以了解和评估IAREWARM的功能和使用方法.
我们编译整理的这本快速用户指南采用评估版软件安装目录C:\Programfiles\IARSystem\Embeddedworkbench4.
0\ARM\tutor下的教程为例,一步一步介绍IAREWARM的使用方法.
该教程采用了两个C语言程序,tutor.
c和utilities.
c.
它们不和任何特定的硬件关联,所以介绍中的全部操作都是用模拟程序完成的.
在以后的章节里,我们将具体介绍EWARM软件及配套硬件工具、如何使用EWARM集成开发环境以及在EWARM下烧写Flash的方法.
如果用户希望在真实的目标板上进行代码运行和调试,请到万利电子全国各直销点购买IAR的JTAG仿真器J-Link.
附附附附::::EWARM的的的的学习步骤学习步骤学习步骤学习步骤①下载安装EWARM32K学习版软件;②进入www.
iar.
com/ewarm->OnlineDemos,下载Flash格式的软件使用动画演示;③以本入门手册结合软件使用的动画演示,进行软件使用的入门学习;④在软件安装目录.
.
.
\arm\src\examples下,寻找感兴趣的芯片例程学习;⑤可选项1:购买J-Link仿真器和开发板,实现在硬件上的代码运行和调试;⑥可选项2:购买由北航出版社的《IAREWARM嵌入式系统编程与实践》一书,深入学习;⑦学习"可选项1或2"的随附光盘中《ConvertingADSProjectstoEWARMProjects》白皮书,实践如何移植一个ADS工程到EWARM格式的工程.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-637586503第一章第一章第一章第一章EWARM集成开发环境及配套仿真器集成开发环境及配套仿真器集成开发环境及配套仿真器集成开发环境及配套仿真器IAREmbeddedWorkbenchforARMversion4.
42是一个针对ARM处理器的集成开发环境,包含项目管理器、编辑器、编译连接工具和支持RTOS的调试工具,在该环境下可以使用C/C++和汇编语言方便地开发嵌入式应用程序.
IAREWARM的主要模块如下:项目管理器功能强大的编辑器高度优化的IARARMC/C++CompilerIARARMAssembler1个通用的IARXLINKLinkerIARXAR和XLIB建库程序和IARDLIBC/C++运行库IARC-SPY调试器(先进的高级语言调试器)命令行实用程序以下介绍一下EWARM4.
42版本及其相关配套硬件的一些特点:1.
IAREWAM软件的特点①EWARM4.
42版基本特点完善的ARM内核支持-最新支持到ARM11及及及及CortexM3内核-早已支持的其他ARM内核ARM7(ARM7TDMI,ARM7TDMI-S,ARM720T)ARM9(ARM9TDMI,ARM920T,ARM922T,ARM940T,ARM9E,ARM9E-S,ARM926EJ-S,ARM946E-S,ARM966E-S,ARM968E-S)ARM10(ARM10E,ARM1020E,ARM1022E,ARM1026EJ-S)XScale(XScale,XScale-IR7)更加客户化地提供芯片级的支持-完备的各厂商ARM处理器的C/C++和汇编语言外设寄存器定义文件支持的芯片厂商有AnalogDevices、ARM、Atmel、CirrusLogic、Freescale、Intel、NetSilicon、OKI、Philips、Samsung、Sharp、ST和TI等-支持AnalogDevices、Atmel、Freescale、OKI、Philips、ST和TI等厂商的ARM处理器的FlashLoader程序-软件集成了400余个代码例程,对应于各种不同的芯片,位于.
.
.
\arm\src\examples目录下进一步改进了编译器速度优化,重写了的浮点运算库对更多嵌入式操作系统的支持EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-637586504-新增支持OSEK类操作系统的OSEKRun-TimeInterface(ORTI)-新增支持OSEEpsilonRTOS的KernelAwareness调试-新增支持embOS、SMX、NORTi等的支持调试器的增强功能-对堆栈运行的监测堆栈运行的监测堆栈运行的监测堆栈运行的监测功能-配合IARJ-Link仿真器的新增功能J-LinkTCP/IP服务器调试器和IARJ-Link仿真器协同配合,实现对ARM处理器的多核调试-对IARJ-Trace仿真器仿真器仿真器仿真器提供全面的支持-在C-SPY模拟器中可执行Trace的模拟-支持同一芯片上多颗Flash的FlashLoader程序,以及通用的FlashLoader开发指南②EWARM软件在芯片级支持方面的特色完备的各厂商ARM处理器的C/C++和汇编语言外设寄存器定义文件大量适合于嵌入式代码的编程语言扩展特性,包括存储器关键字,本征函数,中断函数,存储器映射I/O等针对评估板的例程,包含IAR、AnalogDevices、AijiSystem、ARM、Atmel、CirrusLogic、Freescale、Keil、OKI、Olimex、Pasat、Philips、Phytec、ST和TI等厂家的开发板支持ARM或Thumb模式下大至4G字节的应用程序每个函数都能选择在ARM或Thumb模式下编译可生成VFP向量浮点协处理器代码支持AnalogDevices、Atmel、Freescale、OKI、Philips、ST和TI等厂商的ARM处理器的FlashLoader程序支持ARMAngelDebugmonitor③EWARM编译器的软件特色先进的通用编译器优化和针对特定处理器的速度优化及存储器优化功能轻量运行库,用户可以根据需要自行配置,提供全部源代码灵活的存储器控制,允许详细地为代码和数据分配地址去除不需要的函数和变量C/C++变量和函数连接时全局类型检查可选的校验和生成功能,用于运行时映象校验自动将代码和数据放置到非连续的存储器区域强大的可重定位宏汇编器,支持丰富的命令集和操作符EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-637586505④EWARM调试器的软件特色完全集成的源代码和反汇编程序调试器非常细化的执行控制(函数调用级步进)复杂的代码和数据断点丰富的数据监视功能Locals,Watch,Auto,LiveWatch和QuickWatch等变量查看窗口寄存器和存储器查看窗口支持STL容器C/C++调用栈窗口,同时还可以显示将要进入的函数双击调用链上的任何函数将更新编辑器、局部变量、寄存器、变量查看和反汇编窗口,以显示在该函数调用时的状态跟踪功能,可以检查执行的历史记录.
在跟踪窗口中移动时将更新编辑器和反汇编窗口以显示合适的位置控制台I/O仿真中断和I/O模拟仿真类似C语言的宏系统,可扩充调试器的功能由主机执行的应用程序系统调用仿真代码覆盖率和执行时间分析工具通用的FlashLoader程序及开发指南同时支持多颗Flash的FlashLoader程序支持OSEKRun-TimeInterface(ORTI)提供为调试器扩充第三方功能的软件开发包,如RTOS调试扩充和仿真器驱动扩充命令行调试工具⑤IARC-SPY支持的调试方法IARJ-LinkJTAG接口(支持所有ARM7和ARM9核,通过USB或TCP/IP连接)IARJ-TraceJTAG接口(支持所有ARM7和ARM9核,通过USB或TCP/IP连接)RDI接口类的第三方仿真器(AbatronBDI1000&BDI2000,EPIMajic,AshlingOpella,AijiOpenICE,SignumJTAGjet,ARMMulti-ICE等)MacraigorWiggler,Raven,mpDemon和USBdemon等调试接口EPIJeeni仿真器支持IAR的ROM-MonitorARM公司的AngelROM-Monitor(用于Atmel和CirrusLogic的评估板)EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-637586506⑥IAR对嵌入式实时操作系统的KernelAwareness调试支持操作系统IAREWARM内置的插件由第三方RTOS厂商提供的插件CMA-RXXCMX-Tiny+XuC/OS-IIXThreadXXRTXCQuadrosXFusionRTOSXOSEK(ORTI)XENEAOSEEpsilonXMiSPONORTiXMicroDigitalSMXXSeggerembOSX每种RTOS插件都会在C-SPY中安装一批新的窗口,其中最重要的是任务或线程列表窗口,在此窗口中可以在指定的任务上设置断点和执行程序.
其它不同的监测窗口可以显示RTOS内部数据结构的内容,例如定时器、队列、信号量、资源和邮箱等.
⑦EWARM图形化的集成开发环境的界面特色分层次的工程组织同一工作空间中允许存放多个工程可停靠的窗口和多视图源代码浏览创建和维护库的工具可以和源代码控制系统相集成文本编辑器-支持多字节字符(汉字)-上下文相关的帮助系统-根据句法着色-无限制的undo/redo-搜寻、替换和增量搜寻-GotoEWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-637586507-书签-错误标签:查阅前一个/下一个-自动括号配对-智能缩排-类似网页浏览器的前向/后向源码查阅-代码断点的设置/清除/使能/禁止命令行编译连接工具⑧EWARM的编程语言和标准遵循ISO/ANSIC94(带有一些从C99标准中挑选的特性)标准的C编程语言嵌入式C++扩展,支持模板、多重继承和虚拟继承、名字空间以及其它不增加执行时间或存储器开销的C++特性.
完整的嵌入式C++库还包含字符串、流等特性,以及标准模板库(STL)IEEE-754浮点运算规则MISRAC检查器支持大量工业标准的调试和映象文件格式(如ELF/DWARF),与大多数常见的调试器和仿真器兼容⑨用户帮助完备的例程和工程模板.
上下文相关的联机帮助系统,带有库函数查阅功能印刷好的用户指南,带有详细的step-by-step教程友好、详尽和精确的错误信息和警告信息2.
IARJ-Link仿真器简介IARJ-Link是IAR为支持仿真ARM内核芯片推出的JTAG方式仿真器.
配合IAREWARM集成开发环境支持所有ARM7/ARM9/CortexM3内核芯片的仿真,无需安装任何驱动程序,与EWARM集成开发环境无缝连接,操作方便、连接方便、简单易学是学习开发ARM最好最实用的开发工具.
同时,最近的有关权威测试显示,J-Link目前是同类产品中下载调试速度最快的J-Tag仿真器:公司产品通讯接口支持内核下载速度对开发板供电功能备注MacraigorWigglerLPTARM7/916KB/秒无即并口仿真头KeilU-LinkUSBARM728KB/秒无IARJ-LinkUSB2.
0ARM7/9800KB/秒秒秒秒有EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-637586508①J-LinkARM主要特点IAREWARM集成开发环境无缝连接的JTAG仿真器支持所有ARM7/ARM9/CortexM3内核的芯片,包括Thumb模式免费升级至支持ARM11、Xscale支持SWD接口调试下载速度高达800kB/s最高JTAG速度12MHz目标板电压范围1.
2V–3.
3V自动速度识别功能监测所有JTAG信号和目标板电压完全即插即用使用USB电源带USB连接线和20芯扁平电缆支持多JTAG器件串行连接标准20芯JTAG仿真插头选配14芯JTAG仿真插头选配用于5V目标板的适配器带J-LinkTCP/IPserver,允许通过TCP/IP网络使用J-Link②IARJ-Link的物理连接J-LINK一端通过USB口与PC连接,另一端通过标准20芯JTAG插头与目标板连接.
建议首先连接J-LINK到PC,再连接J-LINK到目标系统,最后给目标系统供电(如果目标系统为独立供电、而非由J-TAG口供电的情况).
③IARJ-Link主要技术指标功耗吸取USB供电电力Debugger->J-Link设置页面中.
固定JTAG速度目标被锁定在固定时钟速度.
目标能执行的最大JTAG速度取决于目标自身.
一般来讲,不带JTAG同步逻辑的ARM内核(如ARM7-TDMI)能执行与CPU速度相当的JTAG速度.
而带JTAG同步逻辑的ARM内核(例如ARM7-TDMI-S,ARM946E-S,ARM966EJ-S)能执行相当CPU速度1/6的JTAG速度.
JTAG速度不应超过10MHz.
自动JTAG速度由TAP控制器选择最大的JTAG速度.
要注意,不带同步逻辑的ARM内核可能会工作不稳定.
因为CPU内核时钟可能慢于最大JTAG速度.
附附附附::::J-Link全国分销点全国分销点全国分销点全国分销点地区地区地区地区销售销售销售销售点点点点地地地地址址址址电电电电话话话话华北北京万利北京海淀区知春路118号知春电子城B193柜010-62562744/62526647天津万利天津南开区鞍山西道323号增1号022-27376292/27471810华南深圳万利深圳深南中路赛格电子市场3楼3B35柜0755-83681644/83681644深圳深南中路华强电子世界一楼20A257柜0755-83687350/83665281广州万利广州天河区天河路龙苑大厦3栋506室020-87588300/87543761华东上海万利上海北京东路赛格电子市场2A19-2A20柜021-53081472/53082644上海太平洋电脑城三楼347室021-54904533/54901862南京万利南京珠江路雄狮电子商城A529柜025-83615784/83675529南京中山东路110号华龙电子商城二楼96#柜025-84412638/84412638杭州万利杭州登云路639号杭州电子市场1C205柜0571-89901205西北西安万利西安西部电子商城2楼C区2C033-035029-88221873/88270877东北沈阳万利沈阳三好街90号甲百脑汇科技广场B区-W35024-83991288/83990602华中武汉万利武汉武昌珞瑜路158号华中数码城3098室027-87654225长沙万利长沙人民路9号百脑汇商城二楼H23-250731-4175141/4175141香港香港万利香港九龙上海街67号10楼00852-27303434EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865011第二章第二章第二章第二章在在在在EWARM中生成中生成中生成中生成一个新项目一个新项目一个新项目一个新项目EWARM是按项目进行管理的,它提供了应用程序和库程序的项目模板.
项目下面可以分级或分类管理源文件.
允许为每个项目定义一个或多个编译连接(build)配置.
在生成新项目之前,必须建立一个新的工作区(Workspace).
一个工作区中允许存放一个或多个项目.
另外用户最好建立一个专用的目录存放自己的项目文件.
例如在本指南中我们生成一个C:\Programfiles\IARSystem\Myproject目录.
现在双击桌面上的IAREmbeddedWorkbench图标,出现IAREWARM开发环境窗口.
1.
生成新的工作区(Workspace)选择主菜单File>New>Workspace生成新工作区.
2.
生成新项目①选择主菜单Project>CreateNewProject,弹出生成新项目窗口,见图1.
本例选择项目模板(Projecttemplate)中的Emptyproject.
图1.
生成新项目窗口②在Toolchain栏中选择ARM,然后点击OK按钮.
③在弹出的另存为窗口中浏览和选择新建的Myprojects目录,输入文件名project1,然后保存.
这时在屏幕左边的Workspace窗口中将显示新建的项目名.
见图2所示:EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865012图2.
Workspace窗口IAREWARM提供两种缺省的项目生成配置,即Debug和Release.
本例在Workspace窗口顶部的下拉菜单中选取Debug.
现在Myprojects目录下已生成一个project1.
ewp文件.
该文件中包含与project1项目设置有关的信息,如build选件等.
项目名后缀上的*号表示该工作区有改变但还没有被保存.
本例调用printf库函数,这是在C-SPY模拟器中的一个低级write函数.
如果用户希望在真实硬件上以release配置运行例子,就必须提供与硬件相适配的write函数.
④保存工作区先选择主菜单File>SaveWorkspace,浏览并选择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.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865013②选择主菜单Project>AddFiles打开标准浏览窗口,见图3.
选择安装目录ARM\tutor下的上述2个文件,点击打开按钮,把它们添加到Project1目录下.
图3.
添加文件窗口4.
设置项目选件生成新项目和添加文件后就应该为项目设置选件.
IAREWARM允许为任何一级目录和文件单独设置选件,但是用户必须为整个项目设置通用的编译连接(build)选件.
①选择通用选件选中Workspace中的project1–Debug,然后选择主菜单Project>Options.
也可以先选择project1–Debug,然后选择鼠标右键命令中的Options.
图4.
项目通用选件窗口EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865014在打开的Options窗口左边的Category中选择GeneralOptions.
然后分别在:-Target页面/Core条目下选择ARM7TDMI-S-Output页面中,Outputfile条目下选择Executable-LibraryConfiguration页面中,Library条目下选择Normal②选择编译器选件在Options窗口的Category中选择C/C++Compiler,见图5.
图5.
C/C++Compiler选件窗口然后在:-Language页面中,选择C,AllowIARextensions等-Optimization页面中,选择Generatedebuginformation-Output页面中,选择Outputlistfile和Assemblemnemonics-List页面中,选择Outputlistfile.
并选择Assemblermnemonics和Diagnostics-点击OK按钮,确认选择的选件在设置项目选件窗口中有许多其他信息.
由于本例比较简单,所以不涉及这些内容.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865015第三章第三章第三章第三章编译和连接应用程序编译和连接应用程序编译和连接应用程序编译和连接应用程序这一步编译和连接(build)项目程序,同时生成一个编译器列表文件(compilerlistfile)和一个连接器存储器分配文件(linkermapfile).
1.
编译源文件①选中workspace中utilities.
c文件.
②选择主菜单Project>Compile,或工具条中的Compile按钮,或按右键后选择Compile命令.
编译结束后在消息窗口中出现如图6中的信息.
图6.
Build窗口中的编译处理消息③用同样的方法编译tutor.
c.
编译完成后在Myprojects目录下将生成一批新子目录.
因为我们在建立新项目时选择Debug配置,所以在Myprojects目录下自动生成一个Debug子目录.
Debug子目录下又包含另3个子目录,名字分别为List、Obj、Exe.
它们的用途如下:List目录存下放列表文件,列表文件的后缀是lst;Obj目录下存放Compiler和Assembler生成的目标文件,这些文件的后缀为r79,可以用作IARXLINK连接器的输入文件;Exe目录下存放可执行文件,这些文件的后缀为d79,可以用作IARC-SPY调试器的输入文件,注意在执行连接处理之前这个目录是空的.
点击project1–Debug前面的+号将目录展开.
你可以从自动生成的Output目录中看到所有生成的输出文件名以及反映相互依赖关系的的头文件名.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865016图7.
编译处理后的文件结构2.
查看编译器列表文件现在我们通过改变编译器选件中的优化级别(Optimization)来观察list文件是如何自动更新生成的代码量的.
①list文件的结构双击Workspace窗口中的Utilities.
lst,打开list文件,它包含以下信息:文件头—显示编译器的版本信息,列表文件生成时间,source文件、list文件和object文件的名字和路径,编译命令行及选件等信息.
文件体—显示为每条源语句生成的汇编代码和二进制代码,以及变量如何被分配到不同的段.
文件尾—显示所需的堆栈、程序代码以及数据存储器的总量,同时报告错误和警告信息.
②选择主菜单Tools>Options弹出IDEOptions对话窗口,选择Editor页面.
选择ScanforChangeFiles选件.
此选件将自动打开编辑窗口中的文件,目前是Utilities.
lst文件.
按OK按钮.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865017图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,然后选择主菜单Project>Options,弹出Options对话窗口,见图9.
在左边的Category中选择Linker,显示IARXLINK的各选件页面.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865018图9.
XLINK参数选件窗口本例全部采用缺省的连接处理选件.
但是仍需要强调一下输出文件格式和Linker命令行文件的选择方法:输出格式选择合适的输出格式十分重要.
你可能需要将输出文件送给一个调试器进行调试,这时就要求输出格式带有调试信息.
本例采用适合C-SPY调试器的缺省输出选件,它们是DebuginformationforC-SPY、Withruntimecontrolmodules和WithI/Oemulationmodules,指示需要连接将stdin和stdout指向C-SPY的I/O窗口的低级例程.
如果用户希望把应用下载到一个PROM或Flash编程器,则其输出格式不需要带调试信息,如Intel-hex或MotorolaS-records.
EWARM在生成适合C-SPY调试器的缺省输出文件的同时,还可以生成第二个输出文件,供编程器或其它调试器使用.
第二个输出文件的格式可以在ExtraOutput页面中选择.
在List页面中选择Generatelinkerlisting和Segmentmap(见图10),允许生成存储器分配MAP文件.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865019图10.
XLINK选件中的List页面连接器命令文件连接器命令文件(LinkerCommandFile)包含了连接器的各项命令行参数,主要用于控制代码段和数据段在存储器中如何分布.
本例使用缺省的连接器命令文件,请见图11中的Config页面.
图11.
XLINK选件中的Config页面EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865020注)本例连接器命令文件中的定义不与任何特定的硬件相关联.
EWARM提供的连接器命令文件模板都可以在模拟器(simulator)中使用,但是如果要把它们用于目标系统则必须与实际的硬件存储器分布相适配,因此熟悉连接器命令文件的格式和各段的定义十分重要.
用户可以从arm\src\examples目录中找到与评估板相关的连接器命令文件.
用户如果要检查连接器命令文件,需用合适的文本编辑器,例如IAREWARM的编辑器.
也可以打印出来,检查各项定义是否符合要求.
关于连接器命令文件的定制方法和连接器命令行参数的详细语法,请参阅手册IARC/C++CompilerReferenceGuide和IARLinkerandLibraryToolsReferenceGuide的相关章节.
最常用的几个连接器命令行参数包括:-c:指定目标处理器种类例:-carm-D:定义常量例:-DROMSTART=00000000-DROMEND=00100000-Z:将段放置在连续的存储器空间中例:-Z(CONST)MYSEGA,MYSEGB=008000-0FFFFF-P:将段放置在非连续的存储器空间中例:-P(DATA)MYDATA=100000-101FFF,120000-121FFF②点击OK按钮保存IARXLINK选件③选择主菜单Project>Make或鼠标右键Make命令,连接目标文件,生成可执行代码.
Build消息窗口中将显示连接处理的消息.
连接的结果将生成一个带调试信息的代码文件project1.
d79和一个存储器分配(MAP)文件project1.
map.
4.
查看MAP文件双击Workspace中的project1.
map文件名,编辑器窗口中将显示该MAP文件.
从MAP文件中我们可以了解以下内容:-文件头中显示连接器版本,输出文件名以及连接命令使用的选件.
-CROSSREFERENCE段显示程序入口地址.
-RUNTIMEMODEL段显示使用的运行时模块的属性.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865021-MODULEMAP段显示所有被连接的文件.
每个文件中,作为应用程序一部分加载的有关模块的信息,包括各段和每个段中声明的全局符号都列出来.
-SEGMENTSINADDRESSORDER段列出了组成应用程序的所有段的起始地址和结束地址,字节数,类型和对齐标准等.
-ENDOFCROSSREFERENCE段落显示总的代码和数据字节数.
到此为止,已经生成project1.
d79应用程序并可以用于在IARC-SPY中调试.
新闻新闻新闻新闻::::万利电子万利电子万利电子万利电子成为成为成为成为IARIARIARIAR公司公司公司公司8051805180518051开发工具代理商开发工具代理商开发工具代理商开发工具代理商2月23日,中国上海IAR公司今天宣布万利电子成为其8051开发工具代理商,并在其最新发布的7.
20c版的EW8051集成开发环境中,无缝集成了万利Insight仿真器的系列驱动.
双方在软硬件技术上的互补能力,使得该工具包比同类竞争产品代码效率提高代码效率提高代码效率提高代码效率提高15%-20%,并实现完全实时完全实时完全实时完全实时的在线调试.
双方同时联合宣布在中国发布一套市场售价为人民币2,900元元元元的8051开发工具包,其中包含:-1套8k代码限制版的IAREW8051集成开发软件-1个Insight8051仿真器(用户可从万利8051系列仿真器中选配1款,以适用不同的8051芯片)该工具包即日起于万利电子全国13个直销点上柜销售.
双方在技术上将紧密配合,进一步为国内外8051芯片厂商提供工具链定制工具链定制工具链定制工具链定制的服务.
新闻新闻新闻新闻::::IAR公司宣布支持公司宣布支持公司宣布支持公司宣布支持ARMCortexM32月28日,瑞典乌普萨拉IAR公司今天宣布了在集成开发环境EWARM中支持新的ARMCortexM3(CM3)架构,这在ARM第三方工具合作伙伴中,首个宣布支持该架构.
新的EWARM集成开发环境中将会包含一个高度优化Thumb2指令的C/C++编译器.
4月份,IAR将在一些选定的合作伙伴中进行该编译器的β版测试,同时还将发布新版的USB接口的J-LinkJTAG仿真器,无缝支持CortexM3新处理器的调试和flash烧写功能.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865022第四章第四章第四章第四章用用用用C-SPY调试应用程序调试应用程序调试应用程序调试应用程序本例使用C-SPY的模拟器(Simulator)来展现IARC-SPY调试器的基本特点.
前面各节生成的project1.
d79应用程序已经可以用C-SPY调试器进行调试.
用户利用调试器可以查看变量、设置断点、观察反汇编代码、监视寄存器和存储器、在TerminalI/O窗口打印输出.
1.
开始调试在开始调试之前必须设置几个C-SPY选件.
具体操作如下:①选择主菜单Project>Option,选择Category中的Debugger.
在Setup页面,在Driver的下拉菜单中选择Simulator,同时选择Runtomain,点击OK.
如果用户已经购买了IAR的JTAG仿真器,请选择J-Link.
②选择主菜单Project>Debug或工具条上的Debugger按钮.
IARC-SPY将开始装载project1.
d79.
除了已经打开的窗口外,将显示一组C-SPY专用窗口.
2.
组织窗口在EWARM中可以固定窗口(所谓dock),也可以组织成书签形式,也可以让它们浮动.
改变浮动窗口的大小时其他窗口不受影响.
注意EWARMIDE窗口最底部的状态条中包含如何安排窗口的有用信息.
详细信息请参见77页Organizingthewindowsonscreen.
在开始调试前请确认如图12所示的各窗口和内容已经显示在屏幕上.
在编辑器窗口应能看到源文件Tutor.
c和Utilities.
c以及DebugLog消息窗口.
3.
检查源语句①检查源语句,双击Workspace中的Tutor.
c;②在编辑器显示文件Tutor.
c后,用Debug>StepOver命令(或F10)步进到init_fib函数调用语句;③用Debug>StepInto命令(或F11)进入函数init_fib;注)StepOver命令用来执行源程序中的一条语句或一条指令,即使这条语句是一函数调用语句.
而StepInto命令则进入到函数或子程序调用的内部.
当执行StepInto后,活跃窗口已经切换到Utilities.
c,因为init_fib在这个文件里.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865023④继续用StepInto命令直到for循环语句;⑤再用StepOver命令回到for循环的头.
请注意,现在是在函数调用级上而不是语句级步进.
注)还有一种语句级步进的命令,Debug>Nextstatement或工具条上的Nextstatement按钮.
这条命令与StepInto和Stepover不同.
图12.
C-SPY调试窗口4.
检查变量C-SPY允许在源程序上查看变量或表达式,所以可以在执行程序过程中跟踪它们的值的变化.
查看变量的方法有几种,在源码窗口用鼠标双击变量名、然后打开Locals、LiveWatch或Auto窗口.
如何检查变量的更详细信息请看章节Workingwithvariablesandexpressions.
注)当采用None优化级时,所有的非静态变量在它们的活动范围内都是活跃的,所以这些变量是完全能够调试的.
但如果使用更高级别的优化,变量可能不能完全调试.
①利用Auto窗口查看变量选择View>Auto打开Auto窗口.
Auto窗口显示最近修改过的表达式的当前值,单步执行程序观察变量如何变化.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865024图13.
Auto窗口中检查变量②设置一个Watchpoint,利用Watch窗口查看变量选择View>Watch打开Watch窗口.
请注意Watch窗口和Auto窗口按书签形式显示.
按以下步骤在变量i上设置一个Watchpoint.
-点击Watch窗口中的虚线框,当输入区出现时输入i,然后按Enter键.
也可以从编辑器窗口拖一个变量到Watch窗口.
-双击init_fib函数中的root数组名,将其拖到Watch窗口.
Watch窗口将显示i和root的值.
将root展开观察每个元素的值.
图14.
Watch窗口-继续执行单步,观察i和root值的变化.
-从Watch窗口中除去一个变量时,只需选择它然后删除.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650255.
设置和监视断点IARC-SPY具有强大的断点功能.
详细请见手册131页Thebreakpointsystem.
设置断点最简单的方法是将光标定位到某条语句,然后按鼠标右键选择ToggleBreakpoint命令.
实验方法如下:①设置断点用下面方法在get_fib(i)语句上设置断点.
在编辑器窗口显示utilities.
c.
点击要设置断点的语句,选择主菜单Edit>ToggleBreakpoint.
也可以按工具条上的ToggleBreakpoint按钮.
这时该语句上将出现断点标记.
如果要查看刚定义的断点,选择主菜单View>Breakpoint打开Breakpoint窗口.
在DebugLog窗口也显示有关断点执行的信息.
图15.
设置断点②执行到断点选择主菜单Debug>Go或者工具条上的Go按钮都可以让程序执行到断点.
Watch窗口将显示root表达式的值.
DebugLog窗口将显示关于断点的信息.
③消除断点可用主菜单Edit>ToggleBreakpoint或按鼠标右键选择ToggleBreakpoint.
6.
在反汇编窗口上调试通常,在C\C++程序上调试应该更快速和更直接.
但是如果用户希望在反汇编程序上调试,C-SPY也提供了这种功能,而且C-SPY允许方便地在两种方式上切换.
反汇编程序的调试方法如下:①按Reset按钮复位应用程序.
②调试时反汇编窗口通常是打开的.
如果没打开可选择主菜单View>Disassembly打开反汇编窗口.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865026图16.
反汇编窗口反汇编窗口如图16所示.
可以看到汇编代码与C语句一一对应.
用上面介绍的几种单步命令执行程序观察结果.
7.
监视寄存器寄存器窗口允许用户监视和修改CPU寄存器的内容.
具体方法如下:①选择主菜单View>Register打开寄存器窗口,见图17.
图17.
寄存器窗口EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865027②用StepOver命令执行下一条指令,观察寄存器窗口中的数据如何变化.
③关闭寄存器窗口.
8.
查看存储器用户可以在存储器窗口监视所选择的存储器区域.
下面是检查与变量root有关的存储器内容.
①选择主菜单View>Memory打开存储器窗口,见图18(用8-bit显示数据).
②激活Utilities.
c窗口并双击变量root.
用鼠标将其拖到存储器窗口.
③如果希望以16-bit显示数据,在存储器窗口定部的下拉菜单中选择2xUnits命令.
如果C应用程序的init_fib函数没有初始化所有的存储器单元,继续执行单步,同时观察存储器的内容是如何修改的.
用户可以在存储器窗口修改存储单元的内容.
只需把插入点放在希望修改的地方,然后输入新值就可以了.
④关闭存储器窗口.
图18.
8-bit模式显示存储器窗口图19.
16-bit模式显示存储器窗口EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650289.
观察TerminalI/O用户有时可能希望调试应用程序中的stdin和stdout,但是又没有实际的硬件支持.
C-SPY允许用户使用TerminalI/O模拟stdin和stdout.
注)TerminalI/O只有在使用了连接输出文件选件WithI/Oemulationmodule时才可用.
也就是说,某些把stdin和stdout指向TerminalI/O的低级例程将被连接进应用程序.
①选择主菜单View>TerminalI/O显示I/O操作的输出,见图20.
TerminalI/O窗口显示的内容取决于应用程序执行了多远.
图20.
TerminalI/O窗口10.
执行程序到结束①选择主菜单Debug>Go或工具条上的Go按钮.
因为只有一个断点,所以程序一直执行到结束.
同时在DebugLog窗口显示已经到达程序exit的消息,见图21.
图21.
DebugLog窗口②如果要求复位应用程序,选择主菜单Debug>Reset或工具条上的Reset按钮.
③如果要退出C-SPY,选择Debug>StopDebugging,或工具条上的StopDebugging按钮.
C-SPY还提供许多其他的调试功能,如宏和中断模拟等,将在指南的其他章节讨论.
有关如何使用Debug功能的详细介绍请见手册Part4.
C-SPY的特点介绍请见手册Part7以及联机帮助信息.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865029新闻新闻新闻新闻::::IAR公司发布首款公司发布首款公司发布首款公司发布首款ARMTrace仿真器仿真器仿真器仿真器2月14日,德国纽伦堡IAR公司今天发布了其ARM系列调试工具中的新一代产品:硬件调试设备IARJ-Trace.
它支持所有带ETM(EmbeddedTraceMacrocell)的ARM7和ARM9处理器,通过全速USB2.
0接口与主机连接,并提供2M字节的Trace缓存,IAR公司新版EWARM能够完全支持J-Trace.
该Trace仿真器零售价仅为1195美元,由于还带有标准JTAG接口,IARJ-Trace对于绝大多数开发者而言都可以是唯一需要的ARM硬件调试设备.
技术细节技术细节技术细节技术细节Trace规格规格规格规格USB驱动的JTAG和Trace(38-pinMictor)接口;Trace支持最高200MHz全速时钟和100MHz支持所有ARM7和ARM9处理器;半速时钟无需电源,通过USB接口供电;也带有外接电源插口;Trace功能基于ARMETM(EmbeddedTrace集成在IAREmbeddedWorkbenchforARM中,易于Macrocell)设置和使用.
Trace支持带有内置Trace端口的设备2M字节Trace缓存基本性能基本性能基本性能基本性能体积紧凑,易于放置在桌面JTAG速率12MHz安静,无风扇设计自动速率识别支持cycleaccurate和compressedtracingUSB2.
0全速(12Mbit/sec)支持4位/8位/16位的Trace端口,每种端基于RTCKJTAG信号的自适应时钟口均支持全速时钟和半速时钟所有信号均可监控;目标电压可测量集成在IAREmbeddedWorkbenchforARM中,20-pin标准JTAG接口,38-pin标准TraceMictor接口易于设置和使用含USB电缆,20-pin扁平电缆和38-pinTrace电缆Trace窗口与Source和Disassembly窗口同步支持的主机操作系统:Windows2000和WindowsXPFunctionTrace能够分层次地显示被调用的函数与C-SPY调试器全面集成;进阶的调试功能都可以在C-SPY中使用"IARJ-Trace使得IARSystems为ARM开发者提供的工具链更为完整,IAR公司如今能够为我们所有不同种类的STRARM微控制器用户提供完美的服务.
"Mr.
DominiqueJugnon,意法半导体微控制器开发工具经理"IARJ-Trace对于我们的汽车客户来说将会极有价值.
在这一价位提供的功能允许大多数开发者方便地使用先进的Trace调试方案,提高开发质量.
"Mr.
GualtieroBagnuoliMicronas的汽车产品应用经理"毫无疑问,该产品的发布将给ARM硬件调试工具市场带来改变,内嵌一定容量FlashMemory的ARM处理器的使用者现在有了一个完整的高端开发工具解决方案:IAREmbeddedWorkbenchforARMBaseLine版本,一块开发板以及IARJ-Trace调试工具,总价低于4000美元!
"Mr.
MikeSkrticIAR公司的开发套件经理EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865030第五章第五章第五章第五章EWARMFlashLoader开发指南开发指南开发指南开发指南本章包含以下内容:如何将应用程序下载到RAM中如何将应用程序下载到Flash中从框架程序和驱动程序两个部份分别介绍FlashLoader本文还介绍了如何编写和调试自己的FlashLoader,最后,详细描述了FlashLoader框架API函数.
注)本文中的xx表示2个数字,用于识别所用的处理器.
1.
将应用程序下载到RAM中将应用程序下载到RAM发生在C-SPY启动期间,由C-SPY自己控制执行.
所谓下载就是通过JTAG接口把数据写进目标系统.
当C-SPY启动时,它执行以下步骤:从application.
dxx文件中读取应用程序的二进制映象和调试信息;通过JTAG接口将二进制映象传输到目标系统的RAM中;将程序计数器(PC)指向RAM中的应用程序入口点.
此时RAM中的应用程序已经准备好可以运行.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650312.
将应用程序下载到Flash中将应用程序下载到Flash也发生在C-SPY启动期间,但不是由C-SPY执行,而是由一个叫做FlashLoader的专用程序执行.
FlashLoader先被装入到RAM并运行,再将应用程序写进Flash.
链接器(linker)生成两个输出文件,第一个是常规的UBROF格式目标文件(扩展名为dxx),另一个是简单二进制格式目标文件(simple-code,扩展名为sim).
Simple-code格式十分简洁而且容易拆包,这是FlashLoader得以在目标硬件中执行的重要条件.
FlashLoader是一个常规的IAREmbeddedWorkbench应用程序,可以在IAREmbeddedWorkbench环境中开发和调试.
当C-SPY启动时,它执行以下步骤:从flashloader.
dxx文件中读取FlashLoader的二进制映象;通过JTAG接口将该二进制映象写进目标系统的RAM;将程序计数器(PC-1)指向FlashLoader在RAM中的入口点,并开始运行;通过文件I/O,FlashLoader经由JTAG接口把application.
sim文件中的应用程序二进制映象读入目标系统并写进Flash存储器;C-SPY从application.
dxx文件中读取调试信息,并将程序计数器(PC-2)指向Flash中的应用程序入口点;此时Flash中的应用程序已经准备好可以运行.
3.
FlashLoader介绍FlashLoader是用IAREmbeddedWorkbench开发的本地应用程序.
其任务是通过文件I/O从主机读取应用程序的二进制映象,将映象拆包,并写进Flash存储器.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865032FlashLoader可以分成两个部分.
一是所有FlashLoader所共用的框架部分,其源代码由IARSystems提供并包含在IAREmbeddedWorkbench中;二是驱动部份,它是一小段用于实际烧写Flash存储器的小程序.
在IAREmbeddedWorkbench中已经包含了一组用于各种芯片的FlashLoader驱动程序.
由于FlashLoader驱动程序很简单,所以用户可以自行编写IARSystems尚未支持的芯片驱动程序.
FlashLoader框架程序实现了所有FlashLoader都具备的公共功能,包含从调试器读取二进制映象,把用户变量(选件)传递给FlashLoader的机制,以及为了与用户交互而创建GUI元素.
GUI元素包括消息窗口、消息记录和进度条等.
缺省情况下,进度条由FlashLoader框架程序所控制.
FlashLoader必须遵循Flash.
dxx的命名约定.
例如假设某器件名叫IARX99,则它的FlashLoader应命名为FlashIarX99.
dxx.
IAR公司提供的FlashLoader源代码位于下列目录:arm\src\flashloader\frameworkFlashLoader框架程序源代码,含API头文件arm\src\flashloader\\lash各FlashLoader驱动程序源代码,含工程文件IAR公司提供的可执行的FlashLoader位于下列目录:arm\config\flashloader\\lash.
dxx对应于各驱动程序的FlashLoader可执行文件arm\config\flashloader\\lash.
mac可选的C-SPY宏文件.
如果宏文件的名字和FlashLoader可执行文件相同,该宏文件将先于同名FlashLoader被装进RAM并运行.
有些芯片需要对一些I/O寄存器进行初始化之后RAM才能正常工作,这时此项功能就很有用.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650334.
可选的FlashLoaderC-SPY宏文件在将FlashLoader装入RAM之前可能需要执行一个C-SPY宏来设置目标系统.
例如,某些芯片在复位后RAM还不能正常工作,就需要用一个宏来初始化必要的寄存器,以便让RAM正常工作.
在将FlashLoader装入RAM之前所执行的宏应满足以下规定:宏文件应存放在同名FlashLoader的目录下;宏文件的扩展名应为mac;宏文件名应与其关联的FlashLoader名相同;宏文件中必须定义execUserFlashInit()宏函数.
C-SPY将在把FlashLoader装进RAM之前调用该宏函数.
请注意在调试阶段,当FlashLoader作为一个应用程序运行时,必须用execUserPreload()替代execUserFlashInit().
必要的话,在FlashLoader运行结束之后,可以用宏函数execUserFlashExit()来恢复目标系统的初始设置.
5.
与FlashLoader框架程序的接口FlashLoader框架程序将首先初始化FlashLoader驱动程序.
此时,驱动程序可以执行各种初始化工作,但至少要向框架程序注册它的写函数.
在初始化之后,框架程序将通过驱动程序的写函数,一次传输一个字节给FlashLoader.
根据所用的Flash算法,有可能需要在驱动程序中缓冲多个字节,以便在将一个扇区写入Flash存储器之前填满整个扇区空间.
从框架程序向驱动程序的最后一次写操作将被视为清空请求,允许驱动程序清空扇区缓冲中的任何剩余数据.
如果FlashLoader驱动程序没有缓冲任何数据,清空请求可以被忽略.
驱动程序不返回任何错误状态给框架程序.
一旦驱动程序中发生错误,驱动程序应通过调用FlIMessageBox()API函数向用户报告错误,然后调用FlErrorExit()函数退出FlashLoader.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650346.
FlashLoader驱动程序实例本例展示如何为一种芯片编写FlashLoader驱动程序.
为简单起见,假设该芯片中有一块很容易编程的Flash;可以用一个简单的Flash算法,在一次操作中将一个字节写入Flash存储器.
本例还展示了如何读取用户指定的选件,该选件说明了芯片运行的时钟频率.
关于怎样实现一个带扇区缓冲的FlashLoader,请参考IAREmbeddedWorkbench所安装的FlashLoader驱动程序源代码.
//Flashloaderdriverexample.
#include#include#include"Interface.
h"//TheflashloaderframeworkAPIdeclaration.
//TheCPUclockspeed,thedefaultvalue4000kHzisusedifnoclock//isfound.
staticintclock=4000;//Writeonebytetoflashataddr.
//Ifbyte==-1theflashloaderframeworksignalsaflushoperation//attheendoftheinputfile.
staticvoidFlashWriteByte(unsignedlongaddr,intbyte){unsignedchar*ptr=(usignedchar*)addr;EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865035if(byte==-1)return;//Simplereturnwhentheflushoperationisrequested.
//Insertdevicespecificinstructionsheretoenablewrite//accesstotheflashdevice.
*ptr=byte;//Writedatabytetoflash.
//Ifsomeerroroccurswhenwritingtoflash,thiscanbe//communicatedtotheuserbyusingcodelike//if(ret!
=STATUS_CMD_SUCCESS)//{//FlMessageBox("CMD_ERASE_SECTORSfailed.
");//FlERrrorExit();//}//AmessageboxwillbedisplayedbyC-SPYanddownloading//willterminateaftertheuserhasclickedtheOKbutton.
}voidFlashDriverInitialize(intargc,charconst*argv[]){constchar*str;//Registertheflashwritefunction.
FlRegisterWriteFunction(FlashWriteByte);//Seeifuserhaspassedaclockspeedoption.
//Ifnot,thedefaultCCLKvalueisused.
str=FlFindOption("-—clock",1,argc,argv);if(str){clock=strtoul(str,0,0);}}EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650367.
编译链接FlashLoader①拷贝一个现有的FlashLoader,例如arm\src\flashloader\philips\FlashPhilipsLPC210x;②确认编译器所用的文件包含路径包括了FlashLoader框架程序目录arm\src\flashloader\framework和FlashLoader驱动程序目录;③修改FlashPhilipsLPC210x.
c和FlashPhilpsLPC210x.
h这两个文件的名称,使之与所用的芯片相符合;④链接器控制文件也应该设置为与所用的芯片相符合.
拷贝FlashPhilipsLPC210x.
xcl,并修改其中的地址定义行:–DMEMSTART=40000000–DMEMEND=40003FDF实际使用的地址必须能够映射到目标硬件上.
请注意FlashLoader的代码和数据都是下载到RAM中的,这就是为什么ROM段和RAM段都映射到同一段存储空间.
栈和堆都应该保持在最小.
框架程序大约需要300字节的栈空间.
请注意下面xcl文件中的数字都是十六进制的:–D_CSTAK_SIZE=180–D_IRQ_STACK_SIZE=40–D_HEAP_SIZE=0FlashLoader框架程序将使用堆(heap)和RAMEND(在链接器控制文件中声明)之间的内存作为读缓冲区.
这就保证了读缓冲区能够利用所有剩余的内存.
读缓冲区应当尽可能的大,以提高下载性能.
每次JTAG传输的数据字节越多,性能就越高.
如果剩余的读缓冲区少于256字节,框架程序将会报错,因为少于256字节将严重影响性能.
在编译链接FlashLoader程序之前,链接选项WithI/Oemulationmodules必须被打开.
得到的输出文件将以dxx为文件扩展名.
FlashLoader已经可以用于把应用程序下载到Flash.
在EmbeddedWorkbench中,打开应用程序工程,再打开Debuggerdownloadoption对话框.
使能Flashdownload选项,并选择Overridedefaultflashloader选项,指定你生成的FlashLoader输出文件.
任何需要传递给FlashLoader的参数都可以写进FlashLoaderarguments文本域.
现在启动调试器,就可以用你自己的FlashLoader将应用程序下载到Flash.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650378.
调试FlashLoader调试FlashLoader的方法和调试普通的应用程序一样.
需要指出的是,FlashLoader程序在作为FlashLoader被装入调试器时是不能调试的.
只有当FlashLoader本身就是IAREmbeddedWorkbench中当前打开的工程时,它才能被调试.
在FlashLoader框架程序中有一个调试环境.
该环境受头文件DriverConfig.
h中定义的C预处理器宏变量控制,而DriverConfig.
h被包含在框架程序的头文件Congig.
h中.
在Congig.
h文件中,你可以看到哪些变量允许在DriverConfig.
h中被覆盖.
在调试器中以一个独立的应用程序运行FlashLoader时有几点不同.
要启动框架程序的调试环境,必须设置调试宏变量DEBUG.
要写入Flash的文件也必须用宏变量DEBUG_FILE显式说明.
在独立调试时,argc/argv参数传递机制是不工作的,参数必须用C预处理器宏变量DEBUG_ARGS硬性编码.
9.
FlashLoader框架程序的API本节介绍FlashLoader框架程序所提供的API.
对于大多数FlashLoader来说,很多API函数都是用不到的,把它们罗列在此只是为了内容的完整性而已.
所有函数都标出了它们的用途.
Mandatory表示FlashLoader驱动程序必须实现此函数.
Optional表示FlashLoader驱动程序可以根据需要选择性地实现此函数.
Framework表示该函数只会被FlashLoader框架程序调用,而通常不应该被FlashLoader驱动程序调用.
所有API函数的原型都定义在头文件arm\src\flashloader\framework\Interface.
h之中.
初始化函数初始化函数初始化函数初始化函数voidFlashDriverInitialize(intargc,charconst*argv);用途:MandatoryFlashLoader驱动程序必须定义此函数.
FlashLoader框架程序用它来初始化FlashLoader驱动程序.
argc传递Flash变量的数目;argv传递Flash变量.
Flash变量允许通过C-SPY的Flash选项对话框将参数传递给FlashLoader.
此函数的一个典型用例是将CPU的时钟速率传递给FlashLoader驱动程序.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865038voidFlRegisteWriteFunction(WriteFunctionTypewrite_func);用途:MandatoryFlashLoader驱动程序调用此函数向FlashLoader框架程序注册写函数.
变量write_func是指向写函数的指针.
FlashLoader框架程序将为每个要写进Flash的字节调用这个写函数,并将字节和要写的地址作为参数传递.
地址的顺序应确保是递增的,但不一定连续(即允许有间隙).
FlashLoader驱动程序必须从FlashDriverInitialize()()()()中调用此函数.
typedefvoid(*WriteFunctionType)(unsignedlongaddress,intbyte);此类型声明定义了写函数的函数指针类型.
该写函数必须在FlashLoader驱动程序中定义.
unsignedlongFlGetBaseAddress();这是一个可选函数,用于获得用户在IDE中设置的Flash基地址.
如果用户没有设置Flash基地址,该函数返回0xffffffff.
例如,AMD兼容的Flash器件在进行编程和擦除时不依赖于任何控制寄存器,而是对以Flash基地址为基准的多个偏移地址进行一系列总线写操作.
此时就有必要知道Flash的基地址,以便执行可能的Flash地址重映射.
变量传递函数变量传递函数变量传递函数变量传递函数constchar*FlFindOption(char*option,intwith_value,intargc,charconst*argv[]);用途:optional此函数用于在变量数组argv中寻找指定的选件.
with_value参数说明了该函数是用于检argv中是否存在某个选件,或者是否需要返回该选件的值.
该选件的值是在argv中找到匹配变量后的下一个变量.
如果要检查一个flag选件,例如--smallram,赋with_value为0.
如果要检查一个带值的选件,例如–-speed14600,则赋with_value为1.
argc参数是argv数组中的变量个数,argv参数是字符串指针数组.
当调用此函数时,可以直接使用FlashDriverInitialize()函数中的argc/argv参数.
如果在argv中没有找到指定的选件,函数返回一个空指针.
如果with_value设为1,函数返回指向匹配选件后面的那个变量的指针.
如果with_value设为0,函数返回指向匹配选件在argv中入口的指针.
intFlMakeArgs(char*args,charconst*argv[]);用途:framework取一个用space/tab分隔的字符串,并生成一个argv字符串数组,每个数组元素对应于一个选件.
argv字符指针数组必须足够大,以便容纳args字符串中的所有选件.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865039函数返回argv数组中的字符串数目(变量数).
C-SPY用户接口函数用户接口函数用户接口函数用户接口函数voidFlMessageBox(char*msg);用途:optionalC-SPY将显示一个消息窗口,其中显示msg参数给出的文本.
消息字符串中的文本可以用换行符(\n)分割成多行.
FlashLoader将停止执行,直到按下消息窗口中的OK按钮为止.
voidFlMesagaLog(char*msg);用途:optionalC-SPY将在调试器的log窗口显示一个由msg给出的log消息.
消息字符串中的文本可以用换行符(\n)分割成多行.
voidFlProgressBarCreate(char*title);用途:optionalC-SPY将生成一个进度条窗口.
Title参数字符串显示在进度条窗口的上方.
voidFlProgressBarDestroy();用途:optionalC-SPY将关闭进度条窗口.
voidFlProgressBarUpdate(intprogress);用途:optionalC-SPY将更新进度条,以反映progess参数的值.
progess参数的有效范围是0至100.
此函数只有在进度条已经生成的前提下才有效.
调用FlProgressBarValue()的次数应尽可能少("Debug/DebugRel/Release"Settings(Alt+F7)中,如下图.
3.
TheprojectsettingswindowoftheCodewarriorIDEEWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865044ADS编译器,汇编器,链接器或者调试器的设置选项都在窗口左边的TargetSettingsPanel中.
这些工具的命令行输出都能在其各自的工程设置窗口的EquivalentCommandLine区域中找到.
当设置完工程选项之后,build/make/compiler该工程.
任何错误和警告都将被显示在下面的窗口.
4.
ThemakewindowoftheCodewarriorIDE在以上过程成功完成之后,通过Project->Debug(F5)来运行AXD调试器.
5.
TheARMeXtendedDebugger(AXD)windowEWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865045为了开始将ADS工程转换为IAREWARM工程,请遵从下面的指导.
为了协助进行转换,已经提供了截屏比较图.
2.
3创建一个新的IAR工程/工作空间启动IAREWARM程序,创建一个新工作空间以便添加新工程;或者打开一个已有的工作空间,创建新工程并将其添加到已有的工作空间中.
为了创建立一个新工作空间,选File->New->Workspace;为了创建一个新工程,选Project->CreateNewProject.
.
.
2.
4添加源文件接着,从ADS工程中把C源文件和汇编文件(例如main.
c,counter.
c和load.
s)添加到新的IAREWARM工程中.
为了添加文件,选Project->AddFiles.
.
.
.
注意汇编文件load.
s需要根据本手册后面的指导进行转换.
在本例中,用于创建新代码/数据段的AREA和用于分配一个字节内存的DCB,需要转换为与它们等价的IAR操作符,它们是RSEG和DC8.
6.
TheIAREmbeddedWorkbenchIDEwindowEWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650462.
5设置C编译器内核类型IAREWARM的工程选项位于Project->Options(Alt+F7),如下图右边的窗口.
在该例子工程中,ARM7TDMI处理器内核已经被选择.
与之相比,左边的框图显示了在ADS中如何选择处理器内核.
这个选项在工程设置窗口左侧的TargetSettingsPanel下的ARMCCompiler中.
对于IAREWARM,当工程选项窗口打开时,目标内核能够从Category/GeneralOptions/Processorvariant中选择.
7.
SelectingaprocessorcoreforthecompilerinARMDeveloperSuiteandIAREmbeddedWorkbench2.
6设置C编译器的ARM/THUMB模式在ADS中,为了定义C编译器的ARM/THUMB模式,在TargetSettingsPanels的FileMappings中使用Compiler复选框选择合适的编译器.
对于本例,ARMCCompiler将被用于.
c和.
h源文件.
在IAREWARM中,可以在Category/GeneralOptions/ProcessorMode下选择ARM或Thumb模式.
8.
SettingARM.
/ThumbmodefortheCcompilerinARMDeveloperSuiteandIAREmbeddedWorkbenchEWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865047下面捕捉到的屏幕示范了在ADS下如何告诉C编译器产生ARM或者Thumb的混合代码.
从TargetSettingsPanels选择ARMCCompiler或者ThumbCCompiler,选择ATPCS,然后在ARM/ThumbProcedureCallStandardOptions中选择ARM/Thumbinterworking单选框.
在IAREWARM下,选择Category/GeneralOptions/Generateinterworkcode单选框,如上图.
9.
SettingARM.
/ThumbinterworkingmodefortheCcompilerinARMDeveloperSuite2.
7设置C编译器的包含路径在ADS工程的工程设置窗口通过选择TargetSettingsPanels中选择'C'来指定包含路径.
在例子工程中,变量ADSINC包含了头文件的路径.
在IAREWARM中,通过选择Category/C/C++Compiler/Preprocessor来将路径添加到Includepaths中(一行一个).
10.
SettingincludedirectoriesfortheCcompilerinARMDeveloperSuiteandIAREmbeddedWorkbenchEWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650482.
8设置C编译器预定义符号下图显示了在ADS和IAREWARM中预定义符号和变量的位置.
在ADS中,预定义符号在TargetSettingsPanels/ARMCCompiler/Preprocessor下指定.
在IAREWARM中,这些符号和变量位于Category/C/C++Compiler/Preprocessor/Definedsymbols(每行一个).
11.
SettingCcompilerpredefinesinARMDeveloperSuiteandIAREmbeddedWorkbench2.
9设置汇编器内核类型正如前面提到的,本例子工程使用ARM7TDMI处理器内核.
为了在ADS汇编器中改变处理器内核类型,到TargetSettingsPanels/ARMAssembler/ArchitectureorProcessor复选框中选择想要的内核类型.
在IAREWARM下,设置汇编器目标内核的位置与编译器相同,可以在Category/GeneralOptions/Processorvariant下指定,如下图.
在IAREWARM中,C编译器和汇编器不能选择不同的内核类型.
12.
SelectingaprocessorcorefortheassemblerinARMDeveloperSuiteandIAREmbeddedWorkbenchEWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650492.
10设置汇编器的ARM/THUMB模式为了在汇编器中指定ARM或者Thumb模式,请参考下图.
在ADS中,到TargetSettingsPanels/ARMAssembler/Target/InitialState中指定.
在IAREWARM中,该选项被定义在Category/GeneralOptions/Target/Processormode中,与设置编译器的ARM/Thumb模式相似.
13.
SettingARM/ThumbmodefortheassemblerinARMDeveloperSuiteandIAREmbeddedWorkbench2.
11设置汇编器的包含路径这个步骤是为汇编器设置包含路径.
在ADS中,设置汇编器包含路径的位置和编译器相同,例如TargetSettingsPanels/SourceTrees.
在IAREWARM中,包含路径可在Category/Assembler/Include/Includepaths中定义(一行一个),如下图.
14.
SettingincludedirectoriesfortheassemblerinARMDeveloperSuiteandIAREmbeddedWorkbenchEWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650502.
12设置汇编器预定义符号下图中列出了ADS和IAREWARM的汇编器预定义符号或变量.
在ADS中,这些符号位于TargetSettingsPanels/ARMAssembler/Predefines.
在IAREW中,它们位于Category/Assembler/#undef.
注意在ADS下允许编辑预定义的变量.
15.
SelectingaprocessorcorefortheassemblerinARMDeveloperSuiteandIAREmbeddedWorkbench2.
13设置链接器中代码和数据的基地址本例工程的内存映射中,只读和读写存储器的基地址分别是0x0000和0xA000.
在ADS中,这些信息可在TargetSettingsPanels/ARMLinker/Output/Linker下输入给链接器,分别填写ROBase和RWBase域.
虽然IAREWARM没有用于输入这些信息的等同区域,但可以使用Category/Linker/CmdOpt.
选中Usecommandlineoptions,添加下图中的命令行.
在本手册后面的部份中能够找到如何为链接器指定一个映像的内存映射.
注意在ADS中,fromELF工具可用于将链接器生成的可执行映像文件转换为其它输出格式,例如plainbinary.
16.
SelectingaprocessorcorefortheassemblerinARMDeveloperSuiteandIAREmbeddedWorkbenchEWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650512.
14启动IARC-SPY调试器设置完相关的工程选项后,compile/make/build该工程,并在Project->Debug(Ctrl+D)启动IARC-SPY调试器,如下图.
在IARC-SPY调试器中,如要退回到编辑窗口,可通过Debug->StopDebugging.
17.
TheIARC-SPYDebuggerwindow3.
转换汇编程序源文件本向导的以下部分描述了如何正确和系统地将汇编程序源文件从ADS转换到IAREWARM.
3.
1基本的汇编程序转换关于基本的汇编程序转换,请参考下面步骤中显示的简单例子:1)重新定义系统段和区域.
(Picture)EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650522)删除ADS使用的RN操作符;重命名寄存器(如果需要).
(Picture)EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650533)修改一元和二元汇编操作符,注意操作符优先级.
本例显示了把按位或操作符从||(ADS中)修改到|(IAREWARM中).
Picture4)修改汇编指令PictureEWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650545)修改汇编符号,数字和数值表达式(如果需要).
注意汇编伪指令和标号不用修改.
本例显示了对一个数字的修改.
Picture3.
2复杂的汇编程序转换为了进行更复杂的汇编程序转换,请遵从下列步骤(在章节"高级转换"中提供了详细的描述和相关例子).
1)修改预定义符号2)修改条件汇编指令3)转换宏4)创建模块(如果需要)4.
MakefilesADS工具也可以使用makefile.
如果需要makefile,下列步骤描述了将makefile从ADS转换到IAREWARM的方法,以及一个简单的makefile转换例子.
1)把在ADS中使用的汇编器armasm改为IAREWARM中使用的aarm.
PictureEWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650552)修改命令行选项.
本例显示了如何将在ADS中用来产生调试信息的-g选项改为IAREWARM中的等价选项-r.
Picture3)修改代码生成选项.
本例显示了如何将在ADS中产生big-endian顺序代码和数据的选项改为IAREWARM中的等价选项.
Picture4)修改列表/输出选项.
本例显示了如何将在ADS中生成列表输出文件的选项改为IAREWARM中的等价选项.
PictureEWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650565.
链接器文件将链接器文件从ADS转换到IAREWARM的过程和makefile的转换相似.
为了获得链接器选项和存储器映射机制的详细描述,请查阅章节"链接器和其它工具".
请遵从下列步骤:1)修改链接器命令行选项.
2)改变存储器映射的方式,从ADS中使用的分散加载改为IAREWARM中使用的段控制.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865057第七章第七章第七章第七章ADS工程移植指南工程移植指南工程移植指南工程移植指南((((上上上上))))本节列出ADS(ARMDeveloperSuite)和EWARM(IAREmbeddedWorkbenchforARM)的汇编器、编译器和连接器之间的差别.
1.
汇编器转换在ADS中汇编器叫做armasm,而在EWARM中叫做aarm.
1.
1常用的汇编命令行选件下表列出了常用的命令行选件ADSIAR说明–apcs[none][/qualifier[/qualifier[…]]]无等效命令说明使用何种ARM结构的进程调用标准–bigend或–bi–e生成big-endian代码–bigend或–bi–littleend或–li--endian{little|l|big|b}说明生成代码和数据的字节顺序-cpuname--cpuname说明目标CPU或内核-idir[,dir]-Iprefix在文件搜索路径中增加目录-g-r[en]指定汇编器生成调试信息,-re把全部源文件包含进目标文件中,-rn生成不含源文件的目标文件.
-list[filename]-lfilename指定汇编器生成列表文件-m无等效命令指示汇编器把源文件附属列表写到stdout中-ofilename-ofilename设定输出目标文件名EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865058-viafile-fextend.
xcl指示汇编器打开文件和读取命令行变量-xref或-x-x{DI2}在ADS中指示汇编器列出交叉参考信息.
在EWARM中-xD包含#define参考,-xI包含内部符号,-x2包含双行间隔.
表18.
ADS和EWARM中的常用命令行选件1.
2定义系统段/区在ADS中,系统段/区是用AREA命令定义的,在EWARM中的等效命令是RSEG.
在EWARM中ORG用来使当前段的程序位置计数器等于一个表达式的值.
ADS不支持ORG,而是提供armlink的选件-first或者分散加载(scatterloading).
下面的例子比较了两种工具定义段/区的方法.
ADSIAR说明AREAtest,CODE.
MOVR0,#10LDRR3,=0x1234.
.
ENDRSEGest:CODE:NOROOT(2).
MOVR0,#10LDRR3,=0x1234.
.
END;汇编一个叫做test的新代码段;设置一个参数;将0x1234装入R3;源文件结束表19.
在ADS和EWARM中定义系统段/区1.
3列表/输出选件ADS和EWARM都用-o命令设定输出目标文件的名字.
如果不定义文件名(或扩展名),汇编器则根据输入文件名生成目标文件名,在ADS中是inputfilename.
o,在EWARM中则是inputfilename.
r79.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865059如果要求汇编器生成汇编代码详细的列表文件,ADS中用-list选件,EWARM中用-l选件.
缺省的情况下,汇编器不生成列表文件.
ADS的-list和EWARM的-l的表现可以用交叉参考(cross-reference)选件来控制.
在ADS中,-xref(或-x)命令行选件指示汇编器列出宏内部或外部的符号在何处定义以及何处使用之类的交叉参考信息.
而EWARM的–x选件指示汇编器在列表文件的末尾包含一份交叉参考表.
EWARM还提供下列参数:-xD包含#define符号,-xI包含内部符号,-x2包含双行间隔.
1.
4代码生成选件在ADS中,-apcs命令行选件用来说明一个段的属性.
而EWARM中没有等效命令行选件.
下表是-apcs的有效修饰符.
表20.
ADS命令行选件的修饰符ADS中的-bigend(或-bi)和-littleend(或-li)选件说明生成代码或数据的字节排列次序.
EWARM的等效选件是—endian{little|l|big|b}.
另外EWARM中的-e选件也用来生成big-endian字节次序.
两种开发工具的缺省字节次序都是little-endian.
ADS和EWARM中的-cpu命令行选件都是用来指定目标内核,以便获得正确的指令集.
两者缺省的CPU都是ARM7TDMI.
1111.
.
.
.
5555寄存器命名差异寄存器命名差异寄存器命名差异寄存器命名差异下表列出了ADS和EWARM在寄存器命名上的差别.
注意在EWARM中,需要用汇编选件-j(允许使用可选择的寄存器名、记忆符、操作数)来允许使用寄存器名A1-A4,V1-V8,SB,SL,FP和IP.
表21.
ADS和EWARM的寄存器命名差别1111.
.
.
.
6666汇编器操作符汇编器操作符汇编器操作符汇编器操作符ADS和EWARM有许多相同的操作符.
其中移位和屏蔽操作符可以用来实现许多没有的操作符.
1111.
.
.
.
7777操作符优先权操作符优先权操作符优先权操作符优先权EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865060ADS和EWARM的汇编器都使用大量的操作符.
具有最高优先级的操作符总是先被计算,然后是第二优先级,直到最低优先级.
如果一个表达式包含同等优先级的操作符,则按照从左到右的顺序执行计算.
ADS和EWARM都使用圆括号将操作符和操作数分组,以标志运算次序.
下表是两种开发环境的操作符优先级次序(优先级从上往下降低).
表22.
ADS和EWARM的操作符优先次序1111.
.
.
.
8888一元操作符一元操作符一元操作符一元操作符下表列出了ADS和EWARM等效汇编器一元操作符.
注意EWARM没有返回字符串的一元操作符,只能返回数字或逻辑值.
表23.
ADS和EWARM的一元操作符1111.
.
.
.
9999二元操作符二元操作符二元操作符二元操作符下表列出了ADS和EWARM等效汇编器二元操作符.
表24.
ADS和EWARM的二元操作符1111.
.
.
.
10101010汇编命令汇编命令汇编命令汇编命令下表列出了ADS和EWARM等效汇编命令.
表25.
ADS和EWARM的汇编命令下表比较了ADS和EWARM汇编命令的使用方法.
表26.
ADS和EWARM的汇编命令使用方法1111.
.
.
.
11111111转换伪指令转换伪指令转换伪指令转换伪指令下表比较了ADS和EWARM的伪指令.
表27.
ADS和EWARM的伪指令2222.
.
.
.
汇编器差异汇编器差异汇编器差异汇编器差异本节重点介绍ADSarmasm和EWARMaasm之间的其它差异.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-63758650611111.
.
.
.
1111标号差异标号差异标号差异标号差异在ADS和EWARM中,代表地址或指令和数据存储器单元的符号都称做标号(label).
标号可以是程序相关的、寄存器相关的或绝对的.
两种开发环境在标号定义上没有任何区别.
1111.
.
.
.
2222符号命名规则符号命名规则符号命名规则符号命名规则在ADS和EWARM中,用户定义的符号可以用字母a-z,A-Z,0-9或_.
数字字符不能用做名字的第一个字符.
在EWARM中,问号可以用做名字的第一个字符,名字中还能包含$.
EWARM允许用户定义的名字最长为255个字符.
符号名是区分大小写字母的,符号名中的所有字符都是有意义的.
符号名必须是唯一的.
但诸如指令、寄存器、操作符和汇编命令之类的内部符号则忽略大小写.
符号名允许包含任何可打印字符,但在ADS中要用|界定,在EWARM中要用'界定.
单个界定符不能形成符号的一部分.
下面是定义符号#funny-lable@的例子.
ADS:|#funny-lable@|IAR:'#funny-lable@'1111.
.
.
.
3333数制数制数制数制在ADS和EWARM中,数的类型可以是二进制、八进制、十进制、十六进制、字符或浮点型.
下表是两种开发环境所用数制的例子.
表28.
ADS和EWARM的数制1111.
.
.
.
4444数值表达式数值表达式数值表达式数值表达式ADS和EWARM的表达式可以由数值常数、数值变量、二进制操作符和括号组成.
数值表达式可以计算到32位寄存器的值,其无符号数值范围0-232-1,有符号范围-231-231-1.
3333.
.
.
.
特殊汇编命令参考特殊汇编命令参考特殊汇编命令参考特殊汇编命令参考本节介绍ADS中较复杂的汇编命令以及如何移植到EWARM中去.
AREAAREAAREAAREA命令命令命令命令ADS中的AREA命令指示汇编器汇编一个新的代码段或数据段.
段是指那些由连接器处理的、独立的、有名字的、不可分割的代码和数据块.
EWARM中的等效命令是RSEG.
RSEG用于启始一段程序.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865062语法语法语法语法ADS:ADS:ADS:ADS:AREAsectionname{,attr}{,attr}.
.
.
其中:sectionname=赋给段的名字attr=用逗号隔开的段属性.
有效属性说明有ALIGN=expression,ASSOC=section,CODE,COMDEF,COMMON,DATA,NOALLOC,NOINIT,READONLY,READWRITE.
EWARM:EWARM:EWARM:EWARM:RSEGsegmentname[:type][flag][(align)]其中:segmentname=赋给段的名字type=存储器类型,典型是CODE或DATA(以及其它由IARXLINK连接器支持的类型).
flag=可以是NOROOT,REORDER,SORT.
NOROOT指示连接器如果该段中没有任何符号被访问,可以将该段扔弃.
除了startup代码和中断向量外的所有段都可以标注NOROOT标记.
缺省模式是ROOT,标志该段不可扔弃.
REORDER允许连接器重新为所有的段排序.
缺省模式是NOREORDER,指示段的排序必须保持不变.
SORT允许连接器以递减顺序将段排序.
缺省模式是NOORDER,指示该段不允许排序.
Align=地址对齐值的指数,范围0-30.
例如,如果Align=1,对齐值就是字对齐(2).
例子例子例子例子ADS:ADS:ADS:ADS:下面例子定义一个名字为Test的只读代码段.
AREATest,CODE,READONLYEWARM:EWARM:EWARM:EWARM:下面例子定义一个名字为Test的32位代码段.
RSEGTest:CODE:NOROOT(2)MAPMAPMAPMAP命令命令命令命令在ADS中,MAP命令将一个存储器映象的起点设定到一个指定的地址上.
此命令和FIELD命令一起用来描述一个存储器映象.
EWARM中没有等效命令.
语法语法语法语法EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865063ADS:ADS:ADS:ADS:MAPexpr{,base-register}其中:expr=数值或程序相关的表达式base-register=指定一个寄存器.
如果指定的话,则存储器映象的起始地址是expr与base-register在运行时值的和.
EWARM:EWARM:EWARM:EWARM:EWARM中没有等效命令.
关于如何移植这种结构,请参考后面的FIELD命令.
例子例子例子例子ADS:ADS:ADS:ADS:下面的例子展示存储器映象的起始地址存储在r9.
MAP0,r9EWARM:EWARM:EWARM:EWARM:EWARM中没有等效命令.
FIELDFIELDFIELDFIELD命令命令命令命令在ADS中,FIELD命令用来描述用MAP命令定义的存储器映象中的空间.
EWARM中没有等效命令,虽然用EQU命令可以达到同样的目的.
语法语法语法语法ADS:ADS:ADS:ADS:{label}FIELDexpr其中:label=可选标号.
如果用到,label被赋予存储位置计数器的值.
expr=计算存储位置计数器增量字节数的表达式EWARM:EWARM:EWARM:EWARM:labelEQUexpr其中:label=要定义的标号expr=赋予标号的值例子例子例子例子ADS:ADS:ADS:ADS:下面是如何使用MAP和FIELD命令定义寄存器相关标号的例子.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865064MAP0,r9;将r9中存储的地址置入存储位置计数器FIELD8;存储位置计数器增加8字节CodeFIELD4;将Code置为地址[r9+8],并将存储位置计数器增加4字节SizeFIELD4;将Size置为地址[r9+12],并将存储位置计数器增加4字节.
.
MOVr9,.
.
.
LDRr0,Code;相当于LDRr0,[r9,#8]EWARM:EWARM:EWARM:EWARM:下面是EWARM中等效命令的例子.
CodeEQU8;将Code置为地址[r9+8]SizeEQU12;将Size置为地址[r9+12].
.
MOVr9,.
.
.
LDRr0,[r9,#Code]高级转换预定义的符号预定义的符号预定义的符号预定义的符号下表比较了ADS和EWARM的预定义符号.
表29.
ADS和EWARM的预定义符号条件汇编条件汇编条件汇编条件汇编下表是ADS和EWARM的等效条件汇编命令.
表30.
ADS和EWARM的条件汇编命令下面的例子比较了ADS和EWARM条件汇编命令的用法.
该例子为一个FFT子程序定义了不同的选件.
表31.
使用ADS和EWARM的条件汇编命令EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865065宏宏宏宏宏是用户定义的一种符号,代表包含一行或数行汇编语言源代码的块.
该符号可以替代程序中多次出现的相同代码块.
下表展示了ADS和EWARM中等效的宏处理命令.
表32.
ADS和EWARM的宏命令下面的例子比较了ADS和EWARM在递减一个变量时如何使用宏处理命令.
表33.
使用ADS和EWARM的宏处理命令ADSADSADSADS列表列表列表列表ADSADSADSADS列表列表列表列表EWARMEWARMEWARMEWARM列表列表列表列表EWARMEWARMEWARMEWARM列表列表列表列表模块模块模块模块MODULEMODULEMODULEMODULE在EWARM中,MODULE命令用来生成包含许多小模块的库.
库中的每个模块代表一个小程序.
使用库可以减少源文件和目标文件.
ADS没有直接的等效命令,但是使用AREA命令可以取得同样的结果.
ADSIAR说明无等效命令MODULE或LIBRARY定义一个库模块的起点无等效命令ENDMOD定义一个库模块的结束CFI命令(CallFrameInformation)为程序中的指令定义回溯(backtrace)信息.
回溯信息用于对汇编代码中的资源内容保持跟踪.
对于库函数和汇编代码来说,为了在调试时使用callframestack,必须加进回溯信息.
连接器和其它工具在ADS中,连接器称作armlink,而EWARM的连接器叫做IARXLINK.
连接器命令行选件连接器命令行选件连接器命令行选件连接器命令行选件下表比较了ADS和EWARM的基本连接器命令行选件.
EWARM快速用户指南IARSystems地址:上海市黄陂北路227号中区广场2510室电话:021-63758658邮编:200003传真:021-6375865066表34.
ADS和EWARM的连接器命令行选件连接器分散加载和段控制连接器分散加载和段控制连接器分散加载和段控制连接器分散加载和段控制为了向连接器说明一个映象的存储器分布,ADS采用了分散加载(scatterloading)机制.
而EWARM没有直接等效的机制,但是可以通过段控制获得同样的结果.
在ADS中,是否使用分散加载取决于映象的存储器分布的复杂程度.
存储器分布简单的映象只需用命令行选件就可以生成,但对于存储器分布复杂的映象就需要使用分散加载.
因为后者需要对映象各部分的分组和放置施加完全的控制,例如存在不同类型的存储器或存储器映射的I/O端口.
ADS的分散加载命令行选件是:-scatterfilename此选件指示连接器按描述文件filename中的要求构筑映象的存储器分布.
分散加载描述文件是一个文本文件,它描述要连接的目标的存储器分布.
如果连接器是从命令行调用的,则描述文件的扩展名没有意义.
如果使用CodeWarrior,则描述文件的缺省扩展名是.
scf(如果需要,CodeWarrior识别的缺省扩展名可以改变).
正如前面提及的,IAREWARM没有与分散加载等效的命令行选件.
但是如果使用带有多个-Z选件的段控制命令来分配和放置存储器中的段,则可以获得同样的结果.
考虑前面提到的放置命令,每条段放置命令执行一个段放置操作.
在执行每条命令时,如果给该命令分配的存储区间中的任何部分已经被使用(例如,较早执行的其它段放置命令),则从可考虑的范围中删除.
博鳌云是一家以海外互联网基础业务为主的高新技术企业,运营全球高品质数据中心业务。自2008年开始为用户提供服务,距今11年,在国人商家中来说非常老牌。致力于为中国用户提供域名注册(国外接口)、免费虚拟主机、香港虚拟主机、VPS云主机和香港、台湾、马来西亚等地服务器租用服务,各类网络应用解決方案等领域的专业网络数据服务。商家支持支付宝、微信、银行转账等付款方式。目前香港有一款特价独立服务器正在促销,...
Megalayer 商家算是新晋的服务商,商家才开始的时候主要是以香港、美国独立服务器。后来有新增菲律宾机房,包括有VPS云服务器、独立服务器、站群服务器等产品。线路上有CN2优化带宽、全向带宽和国际带宽,这里有看到商家的特价方案有增加至9个,之前是四个的。在这篇文章中,我来整理看看。第一、香港服务器系列这里香港服务器会根据带宽的不同区别。我这里将香港机房的都整理到一个系列里。核心内存硬盘IP带宽...
青云互联怎么样?青云互联是一家成立于2020年6月份的主机服务商,致力于为用户提供高性价比稳定快速的主机托管服务,目前提供有美国免费主机、香港主机、香港服务器、美国云服务器,让您的网站高速、稳定运行。目前,美国洛杉矶cn2弹性云限时七折,美国cera机房三网CN2gia回程 13.3元/月起,可选Windows/可自定义配置。点击进入:青云互联官网青云互联优惠码:七折优惠码:dVRKp2tP (续...