ARM原理与嵌入式应用第六七章.docx
- 文档编号:10570483
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:76
- 大小:1.58MB
ARM原理与嵌入式应用第六七章.docx
《ARM原理与嵌入式应用第六七章.docx》由会员分享,可在线阅读,更多相关《ARM原理与嵌入式应用第六七章.docx(76页珍藏版)》请在冰豆网上搜索。
ARM原理与嵌入式应用第六七章
第6章IAR集成开发环境
在这一章里,将介绍ARM开发软件IAREmbeddedWorkbench。
通过学习如何在IAR集成开发环境下编写、编译一个工程的例子,使读者能够掌握在IAR软件平台下开发用户应用程序的方法。
本章还描述了如何使用C-SPY调试工程,使读者对于调试工程有个初步的理解,为进一步的使用和掌握调试工具起到抛砖引玉的作用。
本章主要内容有:
-IAR集成开发环境介绍
-使用IAR创建、编译、连接工程
-用C-SPY进行代码调试
6.1IAREWARM集成开发环境及配套仿真器
IAREmbeddedWorkbenchforARMversion是IARSystems公司为ARM微处理器开发的一个集成开发环境(下面简称IAREWARM)。
IARSystems是一家全球领先的嵌入式系统的开发工具和服务的供应商,成立于1983年,提供的产品和服务涉及嵌入式系统的设计、开发和测试的每一个阶段。
公司总部设在瑞典,在中国、美国、德国、巴西、英国、比利时和日本都设有分公司,通过代理商将产品卖到全球30多个国家。
它最著名的产品是CComplier-IAREmbeddedWorkbench,支持几乎所有知名半导体公司的MCU、DSP等微处理器。
许多全球著名的公司都在使用IARSystems提供的开发工具、技术支持和工程服务,用以开发它们的前沿产品。
应用领域从智能卡到X射线系统,以及手机、蓝牙等通信系统。
IAREWARM是一个针对ARM处理器的集成开发环境,包含项目管理器、编辑器、编译连接工具和支持RTOS的调试工具。
在该环境下可以使用C/C++和汇编语言方便地开发嵌入式应用程序。
比较其他的ARM开发环境,IAREWARM具有界面友好、入门容易、使用方便和代码紧凑等特点。
用户可自行到IAR公司的网站
IAREWARM的主要模块如下:
项目管理器、编辑器、高度优化的IARARMC/C++CompilerIARARMAssembler、1个通用的IARXLINKLinker、IARXAR及XLIB建库程序、IARDLIBC/C++运行库、IARC-SPY调试器(先进的高级语言调试器)、命令行实用程序。
IAREWARM中还包含一个纯软件的模拟程序(simulator)。
用户不需要任何硬件支持就可以模拟各种ARM内核、外部设备甚至中断的软件运行环境。
6.1.1IAREWARM软件的特点
1.IAREWARM的基本特点
①完善的ARM内核支持。
目前支持最新的ARM11内核(ARM1136J,ARM1136J-S,ARM1136JF,ARM1136JF-S),以及其他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、NXP、Samsung、Sharp、ST和TI;
·支持AnalogDevices、Atmel、Freescale、OKI、NXP、ST和TI等厂商的ARM处理器的FlashLoader程序;
·软件集成了400余个代码例程,对应于各种不同的芯片,位于“...\arm\src\examples”目录下。
③进一步改进了编译器速度优化,重写了的浮点运算库。
④对更多嵌入式操作系统的支持。
·新增支持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开发指南。
2.IAREWARM软件在芯片级支持方面的特色。
①完备的支持各厂商ARM处理器的C/C++和汇编语言外设寄存器定义文件;
②大量适合于嵌入式代码的编程语言扩展特性,包括存储器关键字,本征函数,中断函数,存储器映射I/O等;
③针对评估板的例程,包含IAR、AnalogDevices、AijiSystem、ARM、Atmel、CirrusLogic、Freescale、Keil、OKI、Olimex、Pasat、NXP、Phytec、ST和TI等厂家的开发板;
④支持ARM或Thumb模式下大至4GB字节的应用程序;
⑤每个函数都能选择在ARM或Thumb模式下编译;
⑥可生成VFP向量浮点协处理器代码;
⑦支持AnalogDevices、Atmel、Freescale、OKI、NXP、ST和TI等厂商的ARM处理器的FlashLoader程序;
⑧支持ARMAngelDebugmonitor。
3.IAREWARM编译器的软件特色。
①先进的通用编译器优化和针对特定处理器的速度优化及存储器优化功能;
②轻量运行库,用户可以根据需要自行配置,提供全部源代码;
③灵活的存储器控制,允许详细地为代码和数据分配地址;
④去除不需要的函数和变量;
⑤C/C++变量和函数连接时全局类型检查;
⑥可选的校验和生成功能,用于运行时映象校验;
⑦自动将代码和数据放置到非连续的存储器区域;
⑧强大的可重定位宏汇编器,支持丰富的命令集和操作符。
4.EWARM调试器的软件特色。
·完全集成的源代码和反汇编程序调试器;
·非常细化的执行控制(函数调用级步进);
·复杂的代码和数据断点;
·丰富的数据监视功能;
·Locals,Watch,Auto,LiveWatch和QuickWatch等变量查看窗口;
·寄存器和存储器查看窗口;
·支持STL容器;
·C/C++调用栈窗口,同时还可以显示将要进入的函数;
·双击调用链上的任何函数将更新编辑器、局部变量、寄存器、变量查看和反汇编窗口,以显示在该函数调用时的状态;
·跟踪功能,可以检查执行的历史记录。
在跟踪窗口中移动时将更新编辑器和反汇编窗口以显示合适的位置;
·控制台I/O仿真;
·中断和I/O模拟仿真;
·类似C语言的宏系统,可扩充调试器的功能;
·由主机执行的应用程序系统调用仿真;
·代码覆盖率和执行时间分析工具;
·通用的FlashLoader程序及开发指南;
·同时支持多颗Flash的FlashLoader程序;
·支持OSEKRun-TimeInterface(ORTI);
·提供为调试器扩充第三方功能的软件开发包,如RTOS调试扩充和仿真器驱动扩充;
·命令行调试工具。
5.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-Monitor;
⑦ARM公司的AngelROM-Monitor(用于Atmel和CirrusLogic的评估板)。
IAR对嵌入式实时操作系统的KernelAwareness调试支持
表6.1实时操作系统的调试支持(X表示不支持)
操作系统
IAREWARM内置的插件
由第三方RTOS厂商提供的插件
CMA-RX
X
CMX-Tiny+
X
uC/OS-II
X
ThreadX
X
RTXCQuadros
X
FusionRTOS
X
OSEK(ORTI)
X
ENEAOSEEpsilon
X
MiSPONORTi
X
MicroDigitalSMX
X
SeggerembOS
X
每种RTOS插件都会在C-SPY中安装一批新的窗口,其中最重要的是任务或线程列表窗口,在此窗口中可以在指定的任务上设置断点和执行程序。
其它不同的监测窗口可以显示RTOS内部数据结构的内容,例如定时器、队列、信号量、资源和邮箱等。
6.EWARM图形化的集成开发环境的界面特色。
①分层次的工程组织;
②同一工作空间中允许存放多个工程;
③可停靠的窗口和多视图;
④源代码浏览;
⑤创建和维护库的工具;
⑥可以和源代码控制系统相集成;
⑦文本编辑器
·支持多字节字符(汉字);
·上下文相关的帮助系统;
·根据句法着色;
·无限制的undo/redo;
·搜寻、替换和增量搜寻;
·Goto;
·书签;
·错误标签:
查阅前一个/下一个;
·自动括号配对;
·智能缩排;
·类似网页浏览器的前向/后向源码查阅;
·代码断点的设置/清除/使能/禁止;
·命令行编译连接工具。
7.IAREWARM的编程语言和标准。
①遵循ISO/ANSIC94(带有一些从C99标准中挑选的特性)标准的C编程语言;
②嵌入式C++扩展,支持模板、多重继承和虚拟继承、名字空间以及其它不增加执行时间或存储器开销的C++特性。
完整的嵌入式C++库还包含字符串、流等特性,以及标准模板库(STL);
③IEEE-754浮点运算规则;
④MISRAC检查器;
⑤支持大量工业标准的调试和映象文件格式(如ELF/DWARF),与大多数常见的调试器和仿真器兼容。
8.用户帮助
①完备的例程和工程模板;
②上下文相关的联机帮助系统,带有库函数查阅功能;
③印刷好的用户指南,带有详细的step-by-step教程;
④友好、详尽和精确的错误信息和警告信息。
6.1.2IARJ-Link仿真器简介
IARJ-Link是IARSystems为支持仿真ARM内核芯片推出的JTAG方式仿真器。
配合IAREWARM集成开发环境支持所有ARM7/ARM9/CoretexM3内核芯片的仿真,无需安装任何驱动程序,与IAREWARM集成开发环境无缝连接,操作方便、连接方便、简单易学,是学习开发ARM最好、最实用的开发工具。
同时,最近的有关权威测试显示,J-Link目前是同类产品中下载调试速度最快的J-Tag仿真器。
1.J-LinkARM主要特点
·IAREWARM集成开发环境无缝连接的JTAG仿真器;
·支持所有ARM7/ARM9/CoretexM3内核的芯片,包括Thumb模式;
·下载速度高达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。
表6.2仿真器调试速度比较
公司
产品
通讯接口
支持内核
下载速度
对开发板供电功能
备注
Macraigor
Wiggler
LPT
ARM7/9
16KB/秒
无
即并口仿真头
Keil
U-Link
USB
ARM7
28KB/秒
无
IAR
J-Link
USB2.0
ARM7/9
600KB/秒
有
2.IARJ-Link的物理连接。
J-LINK一端通过USB口与PC连接,另一端通过标准20芯JTAG插头与目标板连接。
建议首先连接J-LINK到PC,再连接J-LINK到目标系统,最后给目标系统供电(如果目标系统为独立供电、而非由J-TAG口供电的情况)。
图6.1IARJ-Link仿真器
3.JTAG速度。
J-Link有两种速度设定,即固定JTAG速度和自动JTAG速度,该功能选项位于IAREWARM的ProjectOptions->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速度。
6.2工程的创建、编译和连接
6.2.1在IAREWARM中生成一个新项目
IAREWARM是按项目进行管理的,它提供了应用程序和库程序的项目模板。
项目下面可以分级或分类管理源文件。
允许为每个项目定义一个或多个编译连接(build)配置。
在生成新项目之前,必须建立一个新的工作区(Workspace)。
一个工作区中允许存放一个或多个项目。
用户最好建立一个专用的目录存放自己的项目文件。
1.生成新的工作区(Workspace)
选择主菜单File>New>Workspace生成新工作区。
2.生成新项目
①选择主菜单Project>CreateNewProject,弹出生成新项目窗口。
图6.2生成新项目窗口
②在Toolchain栏中选择ARM,然后点击OK按钮。
③在弹出的另存为窗口中浏览和选择新建的project1目录,输入文件名project1,然后保存。
这时在屏幕左边的Workspace窗口中将显示新建的项目名。
图6.3Workspace窗口
IAREWARM提供两种缺省的项目生成配置,即Debug和Release。
本例在Workspace窗口顶部的下拉菜单中选取Debug。
现在project1目录下已生成一个project1.ewp文件。
该文件中包含与project1项目设置有关的信息,如build选件等。
项目名后缀上的*号表示该工作区有改变但还没有被保存。
④保存工作区。
先选择主菜单File>SaveWorkspace,浏览并选择project1目录。
然后将工作区取名为project1输进Filename输入框,按保存按钮退出。
这时在project1目录下将生成一个project1.eww文件,该文件中保存了用户添加到project1工作区中的所有项目。
窗口和断点放置等与当前操作有关的其他信息则被存储在project1\settings目录下的文件中。
3.给项目添加文件
①选择主菜单File>New>File,输入以下源程序:
#include
intmain(void)
{
printf("Hello,IAREWARMworld!
\n");
}
输入完毕后按Ctrl-S保存为hello.c。
②选择主菜单Project>AddFiles打开标准浏览窗口,选择hello.c,点击打开按钮,即可把它添加到project1项目中。
4.设置项目
IAREWARM允许为任何一级目录和文件单独设置选件,但是用户必须为整个项目设置通用的编译连接(build)选件。
①选择通用选件:
选中Workspace中的project1–Debug,然后选择主菜单Project>Options。
也可以先选择project1–Debug,然后选择鼠标右键命令中的Options。
图6.4项目通用选件窗口
在打开的Options窗口左边的Category中选择GeneralOptions。
然后分别在:
-Target页面/Core条目下选择ARM7TDMI-S,/Processormode条目下选择ARM
-Output页面中,Outputfile条目下选择Executable
-LibraryConfiguration页面中,Library条目下选择Normal
②选择编译器选件:
在Options窗口的Category中选择C/C++Compiler。
图6.5C/C++Compiler选件窗口
然后在:
-Language页面中,选择C,AllowIARextensions等
-Optimization页面中,选择Size:
None(Bestdebugsupport)
-Output页面中,选择Generatedebuginformation
-List页面中,选择Outputlistfile。
并选择Assemblermnemonics和Diagnostics
-点击OK按钮,确认选择的选件
在设置项目选件窗口中有许多其他信息。
由于本例比较简单,所以不涉及这些内容。
6.2.2在IAREWARM中编译项目
这一步编译和连接(build)项目程序,同时生成一个编译器列表文件(compilerlistfile)和一个连接器存储器分配文件(linkermapfile)。
1.编译源文件
①选中workspace中hello.c文件。
②选择主菜单Project>Compile,或工具条中的Compile按钮,或按右键后选择Compile命令。
编译结束后在消息窗口中出现编译错误或警告的信息。
编译完成后在project1目录下将生成一批新子目录。
因为我们在建立新项目时选择Debug配置,所以在project1目录下自动生成一个Debug子目录。
Debug子目录下又包含另3个子目录,名字分别为List、Obj、Exe。
List目录下存放列表文件,列表文件的后缀是lst;Obj目录下存放Compiler和Assembler生成的目标文件,这些文件的后缀为r79,可以用作IARXLINK连接器的输入文件;Exe目录下存放可执行文件,这些文件的后缀为d79,可以用作IARC-SPY调试器的输入文件,注意在执行连接处理之前这个目录是空的。
点击project1–Debug前面的+号将目录展开,可以从自动生成的Output目录中看到所有生成的输出文件名以及反映相互依赖关系的的头文件名。
2.查看编译器列表文件
现在我们通过改变编译器选件中的优化级别(Optimization)来观察list文件是如何自动更新生成的代码量的。
①list文件的结构
双击Workspace窗口中的hello.lst,打开list文件,它包含以下信息:
文件头——显示编译器的版本信息,列表文件生成时间,source文件、list文件和object文件的名字和路径,编译命令行及选件等信息。
文件体——显示为每条源语句生成的汇编代码和二进制代码,以及变量被分配到哪些段。
文件尾——显示所需的堆栈、程序代码以及数据存储器的总量,报告错误和警告信息。
②选择主菜单Tools>Options弹出IDEOptions对话窗口,选择Editor页面。
选择ScanforChangeFiles选件。
此选件将自动打开编辑窗口中的文件,目前是hello.lst文件。
按OK按钮。
图6.6IDEOption窗口
③选中Workspace窗口中的hello.c,按鼠标右键选择弹出框中的Options…。
从弹出的对话框左边的Category中选择C/C++Compiler并确定Overrideinheritedsettings。
打开Optimization页面,把优化级别从None改定为High。
然后按OK按钮。
④重新编译hello.c,请注意这时编辑窗口中的hello.lst文件已经自动被刷新。
文件尾显示的代码大小已经因优化级别的升高而减小。
(由于本例子源程序太小,此项效果并不明显。
对本例而言,Optimization应选择None。
)
6.2.3在IAREWARM中连接项目
1.连接应用程序
①先选中Workspace窗口中的Project1–Debug,然后选择主菜单Project>Options,弹出Options对话窗口。
在左边的Category中选择Linker,显示IARXLINK的各选件页面。
图6.7XLINK参数选件窗口
本例全部采用缺省的连接处理选件。
但是仍需要强调一下输出文件格式和Linker命令行文件的选择方法:
输出格式:
选择合适的输出格式十分重要。
你可能需要将输出文件送给一个调试器进行调试,这时就要求输出格式带有调试信息。
本例采用适合C-SPY调试器的缺省输出选件,它们是:
DebuginformationforC-SPY、Withruntimecontrolmodules和WithI/Oemulationmodules。
指示需要连接将stdin和stdout指向C-SPY的I/O窗口的低级例程。
如果用户希望把应用下载到一个PROM编程器时,则其输出格式不需要带调试信息,可以选择Other中的Intel-hex或MotorolaS-records等等。
在list页面中选择GenerateL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 原理 嵌入式 应用 第六
![提示](https://static.bdocx.com/images/bang_tan.gif)