搜索
您的当前位置:首页正文

IAR使用全面方法

来源:意榕旅游网
实用标准

软件介绍

AVR® IAR Embedded Workbench® IDE用户手册的这部分包括以下章节:

􀁺产品介绍

􀁺已安装文件

1.1产品介绍

嵌入式IAR Embedded Workbench®是一个非常有效的集成开发环境(IDE),它使用户充分有效地开发并管理嵌入式应用工程。作为一个开发平台,它具备任何在用户每天的工作地方所想要的特性。

本章介绍了嵌入式IAR Embedded Workbench IDE,旨在使用户获得对本产品的所有集成工具的总体了解。

1.1.1嵌入式IAR Embedded Workbench IDE

嵌入式IAR Embedded Workbench IDE提供一个框架,任何可用的工具都可以完整地嵌入其中,这些工具包括:

􀁺高度优化的IAR AVR C/C++编译器;

􀁺AVR IAR汇编器;

文案大全

实用标准

􀁺通用IAR XLINK Linker;

􀁺IAR XAR库创建器和 IAR XLIB Librarian;

􀁺一个强大的编辑器;

􀁺一个工程管理器;

􀁺IAR C-SPYTM调试器,一个具有世界先进水平的高级语言调试器。

嵌入式IAR Embedded Workbench适用于大量8位、16位以及32位的微处理器和微控制器,使用户在开发新的项目时也能在所熟悉的开发环境中进行。它为用户提供一个易学和具有最大量代码继承能力的开发环境,以及对大多数和特殊目标的支持。嵌入式IAR Embedded Workbench有效提高用户的工作效率,通过IAR工具,用户可以大大节省工作时间。 我们称这个理念为:“不同架构,同一解决方案”。

如果用户想获得关于所支持的目标处理器的更详细的信息,请与用户的软件提供商或者与用户的IAR代理联系,或者登陆IAR网站 www.iar.com 以查询最新的产品信息。

一个可扩展的模块化的环境

尽管嵌入式IAR Embedded Workbench IDE可以提供完成一个成功工程所需的所有工具,但

我们也认识到集成其他工具的必要性。因此,IAR Embedded Workbench IDE容易适应于用户喜欢的编辑器和源代码控制系统。IAR XLINK Linker 可以输出多种格式,使用

文案大全

实用标准

户可在第三方的软件上进行调试。实时操作系统(RTOS)支持也可加载到产品中。

编译器,汇编器和连接器也可在命令行环境中运行,用户可以在一个已建好的工程环境中把它们作为外部工具使用。

特性

嵌入式IAR Embedded Workbench是一个灵活的集成开发环境,使用户可以针对多种不同的目标处理器开发应用程序。并为快速开发和调试提供便捷的Windows截面。

项目管理

嵌入式IAR Embedded Workbench IDE能帮助用户控制所有的工程模块,例如,C或者C++源代码文件、汇编文件、“引用”文件、以及其他相关模块。用户创建一个工作区,可以在此开发一个或多个工程。文件可以组合,并且可以为各级设置选项-工程、组、或者文件。任何修改都被记录,从而保证重新设计时可以获得所有所需的模块,而可执行文件中不会包含已过期的模块。下表指出另外的一些特性:

􀁺通过工程模板可以创建独立的可编辑和可运行的工程文件,使开发平稳启动;

􀁺分级的工程表述;

􀁺具有分级图标的源代码浏览器;

􀁺可以为全球化、组和个人源代码文件设置选项;

文案大全

实用标准

􀁺“Make”功能只在必要时才实行再编译、再汇编和再连接文件;

􀁺基于文本的工程文件;

􀁺自定义功能使用户轻松的扩展标准工具栏;

􀁺工程文件输入时可使用命令行模式。

源代码控制

源代码控制(Source Code Control,SCC),作为修订控制,可用于跟踪用户的源代码的不同版本。IAR Embedded Workbench可以识别和接受基于Microsoft发布的SCC接口规范的任何第三方源代码控制系统。

窗口管理

为使用户充分而方便地控制窗口的位置,每个窗口都可停靠,用户就可以有选择地给窗口做上标记。可停靠的窗口系统还通过一种节省空间方式使多个窗口可同时打开。另外,重新分配窗口大小也很方便。

2

文本编辑器

集成化的文本编辑器可以并行编辑多个文件,并具有时兴编辑器所期望的所有编辑特性,包括无限次的撤销/重做和自动完成。另外它还包含针对软件开发的特殊功能,比如关

文案大全

实用标准

键字的着色(C/C++, 汇编和用户定义等)、段缩进、以及对源文件的导航功能。还可识别C语言元素(例如括号的匹配问题)。下表指出另外的一些特性:

􀁺上下文智能帮助系统可以显示DLIB库的参考信息;

􀁺使用文本风格和色条指出C、C++和汇编程序的语法;

􀁺强大的搜索和置换功能,包括多文件搜索;

􀁺从错误列表直接跳转到程序行;

􀁺支持多字节字符;

􀁺圆括号匹配

􀁺自动缩排;

􀁺书签功能;

􀁺每个窗口均可无限次撤销和重做。

文档

AVR嵌入式IAR Workbench IDE在本文档中有详细讲解。另外还有在线的帮助文件以及超文本格式的PDF用户文档。

文案大全

实用标准

1.1.2 IAR C-SPY 调试器

IAR C-SPY 调试器是为嵌入式应用程序开发的高级语言调试器。在设计上,它与IAR编译器和汇编器一起工作,并且与嵌入式IAR Embedded Workbench IDE 完全集成,可在开发与调试间自由切换。因此,它使用户可做到:

􀁺在调试时进行编辑。在调试过程中,源代码的修正可以直接写入用来控制调试过

程的同一窗口中。其修改将在项目重启后生效;

􀁺在启动调试器之前可设置源代码断点。源代码中的断点可与同一段源代码相关联,即使中间插入了新的代码。

IAR C-SPY 调试器由一个具备基本的C-SPY系列特点的主要部分和驱动部分组成。C-SPY驱动确保与目标系统的通信和控制。并提供一个用户接口-特殊菜单,窗口和对话框-以连接到目标系统的功能上,比如,特殊断点。在下面内容中,将概述通用C-SPY调试器的特性。对于可用的C-SPY驱动的概述,请参见第8页,IAR C-SPY 调试器系统。

C-SPY调试器的总体特性

因为IAR 系统提供的是一个整体工具链,编译器和连接器的输出结果包含调试器的扩展调试信息,从而使用户获得最佳的调试效果。IAR C-SPY调试器具备本节中所介绍的总体特性。

源代码和反汇编调试

IAR C-SPY调试器使用户能按要求在源代码和反汇编调试间切换,适用于C/C++和

文案大全

实用标准

汇编语言源代码。

调试C或C++源代码是验证用户的应用程序的逻辑性最快捷、最便利的方式,然而,反汇编调试则针对应用程序的错误段,并对硬件进行精确控制。在混合显示模式中,调试器显示C/C++源代码及其对应的反汇编代码清单。

程序调用级的单步调试

传统的调试器设置,认为最佳的源代码调试间隔是“行到行”,与之相比,C-SPY则更细化,将每个语句和调用函数称为“步点”,并加以控制。这就意味着在每个表达式里的函数调用,以及函数调用作为参数甚至到其他类型的函数调用都可以进行“单步”调试。后者在调试C++源代码时特别有效,主要针对大量的外部函数调用,比如对象构造器。

调试信息提供了内嵌函数,如果执行了这类函数的调用,也可进行源码级调试。

代码和数据断点

C-SPY断点系统允许用户在调试程序过程中设置多种断点,并按照特定需要在某一位置停止。用户可以设置代码断点来验证程序的逻辑性是否正确。也可以设置数据断点来检验数据如何以及何时改变。最后,用户还可以添加条件至断点处。

变量和表达式监控

当用户监控变量和表达式时,用户可以选择很多工具。任何变量和表达式都可通过一次扫描来求值。用户可以很轻松地在一段较长的时间内对已定义的表达式进行监控和记录其值。对局部变量用户可以直接控制,同时可以无干扰地显示即时数据。最终将自动显示

文案大全

实用标准

最后指定的变量。

Container响应

当用户在IAR C-SPY调试器中运行程序时,可以查看诸如STL列表和向量地址等库内数据类型。因此,用户在运行C++ STL containers时,可以对程序进行总体浏览,以及良好的调试。

调用栈信息

AVR IAR C/C++编译器产生扩展的函数调用信息。在不影响整个运行环境的情况下,无论程序计数器指在哪里C-SPY都能显示整个函数调用栈信息。用户可以在调用栈中选择任何函数,并且可以获得相关的局部变量和寄存器的可用信息。强大的宏系统

IAR C-SPY 调试器包含了一个强大的内部宏系统,能使用户定义复杂的动作并得以实施。 C-SPY宏可单独使用也可以同复杂的断点联合使用-如果用户是在使用仿真器的话-中断仿真系统需要进行一系列复杂的动作。

C-SPY 调试器的其他特性

下表指出了一些其他的特性:

􀁺模块化和可扩展化的结构设计允许在调试器中加入第三方设备,比如,实时操作

系统,外围仿真模块和驱动;

􀁺线程运行保证在运行目标应用程序时IDE仍处于响应状态;

文案大全

实用标准

􀁺自动步进;

􀁺源代码浏览器可以方便查看函数,类型以及变量;

􀁺变量的扩展类型识别;

􀁺可配置化的寄存器(CPU和外围设备)以及存贮器窗口;

􀁺支持代码覆盖和函数级模块化;

􀁺终端I/O模拟;

􀁺支持UBROF,Intel扩展和Motorola输入格式。

RTOS 响应

IAR C-SPY 调换器支持实时OS响应调试。

RTOS 插件模块由IAR以及一些第三方的供货商提供。如要了解支持RTOS 模块信息,请联系用户的软件供应商或IAR代理,或者访问IAR 网站。

文档

IAR C-SPY调试器在本文档中有详细介绍。调试器的一般特点在第四部分中有介绍,每个调试器驱动特殊性质在第五部分IAR C-SPY 仿真器和第六部分C-SPY硬件调试系统中有介绍。网上还有帮助信息和超文本格式(PDF)文档。

文案大全

实用标准

1.1.3 IAR C-SPY 调试器系统

至本手册撰写之时,AVR公司的IAR C-SPY 调试器针对下列目标系统发布了驱动:

􀁺仿真器;

􀁺AVR® ICE200

􀁺AVR® JTAGICE

􀁺AVR® JTAGICE

􀁺AVR® Crypto Controller ROM-monitor for Atmel Smart Card

Development Board (SCDB)和Voyager开发系统

需了解C-SPY驱动的相关信息,请联系用户的软件供应商或IAR代理。也可登陆IAR网站,www.iar.com 。

如需了解更多关于IAR C-SPY 调试器的信息,请参看调试器概念,第107页。在下面章节,将描述各种驱动。

C-SPY 仿真器驱动

C-SPY 软仿真器驱动在软件上完全模拟了目标处理器的功能。通过这个驱动,在获得相关硬件之前就可对程序的逻辑性进行调试。因为不需要硬件,它同时也是很多应用程序最有效的解决方案。

文案大全

实用标准

特性

除具备C-SPY调试器的基本特点外,软仿真器驱动还具备:

􀁺指令级仿真;

􀁺中断模拟;

􀁺外围设备仿真,使用C-SPY宏系统与直接断点并行。

关于IAR C-SPY软仿真器更详细的信息,请参看第五部分IAR C-SPY 软仿真器一节。

C-SPY ICE200 驱动

C-SPY ICE200驱动允许连接AVR® ICE200。C-SPY ICE200 驱动提供了低成本的实时调试功能。

特性

除了具有IAR C-SPY 调试器的基本特性外,C-SPY ICE200驱动还具备:

􀁺全部面向微控制器的实时运行。

􀁺代码断点数量不限。

􀁺不占用目标系统的存贮器;

文案大全

实用标准

注意: C-SPY ICE200驱动不支持代码和数据覆盖、规格化。

关于C-SPY ICE200驱动更详细的信息,请参看本手册第六部分C-SPY 硬件调试器系统。

C-SPY JTAGICE驱动

C-SPY JTAGICE驱动允许连接AVR® JTAGICE。它提供了自动的flash下载,并利用了片上调试的性能。

C-SPY JTAGICE驱动提供了低成本的实时调试功能。特性

除了具有IAR C-SPY 调试器的基本特性外,C-SPY JTAGICE驱动还具备:

􀁺全部面向微控制器的实时运行。

􀁺使用目标设备上的硬件断点。

􀁺不占用目标系统的存贮器;

􀁺内置的flash下载器。

􀁺串口通信。

注意: C-SPY JTAGICE驱动不支持代码和数据覆盖、规格化。

文案大全

实用标准

关于IAR C-SPY软仿真器更详细的信息,请参看本手册第六部分C-SPY 硬件调试器系统。

C-SPY JTAGICE MKII驱动

C-SPY JTAGICE MKII驱动允许连接AVR® JTAGICE MKII。它提供了自动的flash下载,并利用了片上调试的性能。

C-SPY JTAGICE MKII 驱动提供了低成本的实时调试功能。

特性

除了具有IAR C-SPY 调试器的基本特性外,C-SPY JTAGICE MKII驱动还具备:

􀁺全部面向微控制器的实时运行。

􀁺使用目标设备上的4个硬件断点,以及不限数量的软件断点。

􀁺不占用目标系统的存贮器;

􀁺内置的flash下载器。

􀁺通过串口或USB连接实现通信;

注意: C-SPY JTAGICE MKII驱动不支持代码和数据覆盖、规格化。

文案大全

实用标准

关于C-SPY JTAGICE MKII驱动更详细的信息,请参看本手册第六部分C-SPY 硬件调试器系统。

C-SPY CRYPTO 控制器ROM监视器驱动

C-SPY CRYPTO 控制器ROM监视器驱动(CCR驱动)允许连接到Atmel Smart Card开发板(SCDB)和Voyager开发系统。

特性

除了具有IAR C-SPY 调试器的基本特性外,CCR驱动还具备:

􀁺实时运行;

􀁺RS-232串口通信;

􀁺支持实时中断;

注意: C-SPY ROM监视器不支持代码覆盖。

关于IAR C-SPY ROM监视器更详细的信息,请参看本手册第六部分C-SPY 硬件调试器系统。

1.1.4 IAR C/C++编译器

AVR IAR C/C++编译器是一个具有世界先进水平的具备标准C/C++特性的编译器,

文案大全

实用标准

众多的扩展插件让用户可以更好地使用AVR的特定功能。

编译器已经和其他的AVR 的IAR系统集成。

特性

AVR IAR C/C++编译器具备以下特性:

代码生成

􀁺普通或特定的AVR的最优化技术可以产生出高效的机器代码;

􀁺件;

全面的输出选择,包括可重定位的目标代码、汇编源代码和可选的汇编器列表文

􀁺目标代码可与汇编器连接;

􀁺生成扩展的调试信息。

语言工具:

􀁺支持C 或 C++编程语言;

􀁺具有支持IAR扩展的嵌入式C++的特性:模板、名称空间、多重的虚拟外设、固定操作符(static_cast, const_cast,和 reinterpret_cast),以及标准的模板库(STL);

文案大全

实用标准

􀁺在不同的存储器中放置类;

􀁺作为一个独立自主的环境,与ISO/ANSI标准相一致;

􀁺有特殊目标语言的扩展,比如特殊函数的输入,扩展的关键字,#pragma 指示,预设标志,内部函数,完全分配和行内汇编器;

􀁺针对嵌入系统的应用函数的标准库;

􀁺与IEEE标准兼容的浮点算法;

􀁺可在C或者C++中应用的中断函数。

类型检查

􀁺在编译时进行扩展类型检查;

􀁺在连接时进行外部调用类型检查;

􀁺连接时检查应用程序的内部模块移植性。

运行环境

AVR IAR Embedded Workbench提供了两套运行库:

􀁺

文案大全

IAR DLIB库,支持ISO/ANSI C和 C++ 。这个库还支持IEEE 754格式的浮点

实用标准

数,多字节参数和局部参数。

􀁺IAR CLIB库是一种轻型库,并不完全与ISO/ANSI C 兼容。同时,它也不支持IEEE

745格式或者C++格式。

现在有几种模式来定制运行环境和运行库。 就这两种运行库而言,库的源代码已经包含在其中了。

文档

AVR IAR C/C++编译器在AVR ® IAR C/C++ 编译器参考手册里有详细介绍。

1.1.5 IAR汇编器

AVR IAR 汇编器同其他的IAR系统软件集成。它是一个强大的重定位宏汇编器(支持Intel/Motorola格式),并且含有多种指示符和表达式。它具备一个内部C语言预处理器,因而支持条件汇编。

AVR IAR汇编器使用与Atmel®公司AVR汇编器相同的存贮机制和操作语法,从而简化了对已有代码的移植过程。关于详细信息,请参见汇编器AVR® IAR汇编器参考手册。

特性

AVR IAR 汇编器具备以下特性:

􀁺

文案大全

C预处理器;

实用标准

􀁺扩展的交叉调用输出的列表文件;

􀁺由可用存贮器大小决定参数个数和程序大小;

􀁺支持外部调用的复杂表达式;

􀁺每个模块有多达65536个可重定位段;

􀁺在参数表中有255个重要参数。

文档

AVR IAR汇编器在AVR®IAR 汇编器参考手册里有详细介绍。

1.1.6 IAR XLINK连接器

IAR XLINK 连接器连接一个或多个由AVR IAR 汇编器或者AVR IAR C/C++编译器产生的可重定位的目标文件,并生成AVR 处理器所需的机器代码。它在连接小的单个文件、完全汇编程序时同连接大的、可重定位的、多模块的C/C++或混合C/C++以及汇编程序时一样快捷便利。

它可以识别超过30种的工业标准的代码,另外还包括IAR C-SPY调试器所使用的IAR系统调试格式——UBROF(通用的二进制可重定位目标文件格式)。一个应用程序可由任意多个UBROF可重定位文件构成,并且可以和汇编器以及C或C++程序合成。

IAR XLINK 连接器最终输出结果是一个完整的、可执行的目标文件,并可以下载到

文案大全

实用标准

AVR的处理器中或到一个硬件仿真器中。当然,输出文件是否包含调试信息取决于用户所选择的输出格式。

IAR XLINK 连接器支持用户定义库,并只下载那些在连接应用程序时所需的模块。在连接前,IAR XLINK 连接器将对所有的模块进行C语言级的类型检查,并对所有输入文件中的所有参数进行完全的可靠性检查。它还对所有的模块进行统一的编译器设置检查,从而确保使用C或C++运行库的正确类型和参数。

特性

􀁺完全的内部模块类型检查;

􀁺简易的库模块的覆盖;

􀁺灵活的段命令可以更细致地掌控代码和数据的定位;

􀁺连接符的定义使对配置的控制更加自如;

􀁺可选的代码检测功能对运行监测;

􀁺去除无用代码和数据。

文档

IAR XLINK 连接器在IAR Linker和库工具参考手册中有详细介绍。

文案大全

实用标准

1.1.7 IAR XAR Library Builder库创建器和IAR XLIB Librarian库管理器

一个库是包含一系列可重定位目标模块的单个文件,每个模块都按需要加载到文件中,互相独立。IAR XAR Library Builder库创建器帮助用户轻松地创建库。此外,IAR XLIB Librarian库管理器使用户可以对IAR系统汇编器和编译器产生的可重定位目标库文件进行操作。

一个库文件与任何由汇编器或编译器生成的可重定位目标文件并没有区别,除非它包含了“LIBRARY”类型的模块。所有的C或C++程序都使用库,同时AVR IARC/C++编译器则使用一些标准的库文件。

特性

IAR XAR Library Builder库创建器和IAR XLIB Librarian库管理器均具备以下特性:

􀁺其模块可以嵌入一个库文件中;

􀁺交互式或者批量式操作。

IAR XLIB Librarian库管理器还具备以下特点:

􀁺其模块可以列出、添加、插入、更换或移除;

􀁺其模块可以在程序和库类型间变更;

􀁺字段可以列出;

文案大全

实用标准

􀁺字符可以列出。

文档

IAR XAR Library Builder库创建器和IAR XLIB Librarian库管理器在IAR 连接器和库工具参考手册中有详细介绍。另外,在嵌入式IAR Embedded Workbench 的帮助菜单中还有一份PDF格式的文档供查询。

1.2已安装文件

本章介绍了安装过程中创建了哪些目录以及使用了哪些文件类型。在本章末尾,介绍了在不同版本的手册和在线文档中可以找到的信息。

参考产品附带的“快速入门”和“安装和注册手册”,可以查到关于系统要求以及如何安装及注册IAR系统产品的信息。

1.2.1目录结构

安装过程中创建了几个目录,用来放置IAR系统开发工具所使用的不同类型的文件。下面就详细讲解每个目录下默认的文件。

根目录

在安装过程中创建的默认根目录为:x:\\Program Files\\IAR Systems\\Embedded Workbench 4.n, x是指Microsoft Windows 的安装目录,而4.n是嵌入式IAR Embedded Workbench IDE的版本号。

文案大全

实用标准

11

注意:安装路径可与上图设置不同,这取决于先前安装的IAR产品以及用户个人的喜好。

AVR 目录

Avr目录包含所有特定产品的相关子目录。

Avr\\bin目录

Avr\\bin子目录包含特殊AVR插件的可执行文件,比如AVR IAR C/C++编译器,AVR IAR 汇编器和AVR IARC-SPY驱动。

Avr\\config目录

Avr\\config子目录包含用于配置开发环境和工程的文件,比如:

􀁺连接器命令模板文件(*.xcl)

􀁺特殊函数注册描述文件(*.sfr)

􀁺C-SPY 设备描述文件(*.ddf)

􀁺语法着色配置文件(*.cfg)

文案大全

实用标准

􀁺应用工程和库工程文件的模板文件(*.ewp)以及它们相应的库配置文件。

Avr\\doc目录

Avr\\doc目录包含AVR工具的最新信息的帮助文档。我们建议用户先读一下这些文档。该目录下也包含了本手册和AVR参考手册的在线超文本(PDF格式)文件,还有在线帮助文件(CHM格式)。

Avr\\inc目录

Avr\\inc子目录包含内部文件,比如标准C或C++库的头文件。同样,还有定义特定功能寄存器的特殊头文件,而这些文件主要由编译器和汇编器来使用。

Avr \\lib目录

Avr \\lib子目录包含编译器使用的预先创建的库以及相应的库配置文件。

Avr \\src目录

Avr \\src 子目录包含一些可配置库功能的源文件以及一些应用程序代码示例。此外还包含库的源代码。

Avr\utor 目录

Avr\utor 子目录包含本文档中的教程的相应文件。

文案大全

实用标准

公共目录

公共目录包含所有嵌入式IAR Embedded Workbench 产品共享的插件所在的子目录。

Common\\bin 目录

Common\\bin 子目录包含所有嵌入式IAR Embedded Workbench 产品共享插件的可执行文件,例如IAR XLINK Linker,IAR XLIB Librarian,IAR XAR Library Builder以及编辑器和图形用户接口插件。IAR Embedded Workbench的可执行文件也放置在这里。 Common\\config 目录

Common\\config 子目录包含嵌入式IAR EmbeddedWorkbench在开发环境中所保持的设置。

Common\\doc 目录

Common\\doc 子目录包含了所有嵌入式IAR Embedded Workbench产品的共享插件的最新信息的帮助文档,例如连接器和库工具。我们建议用户先读一下这些文档。这个目录还包括“IAR连接器和库工具参考手册”的PDF在线版文档。

Common\\plugin目录

Common\\plugin子目录包含可作为载入式插件模块的插件的执行文件与描述文件。

Common\\src 目录

文案大全

实用标准

Common\\src 子目录包含所有嵌入式IAR Embedded Workbench产品的共享插件的源文件,比如一个简单的IAR XLINK 连接器的输出格式文件“SIMPLE”。

1.2.2文件类型

IAR系统的开发工具的AVR版中使用下列默认的文件扩展名来确认IAR特定文件类型:当用户需要确定一个文件名时,可以引用一个清楚的扩展名来覆盖默认的文件扩展名。

扩展名为ini和dni的文件是在运行嵌入式IAR Embedded Workbench 工具时同步生成的。这些文件包含关于用户的工程配置及其他设置的信息,然后被放到工程目录下的settings子目录里。

注意:如果用户是从命令行来运行工具,XLINK列表文件(映象)会采用默认的扩展名lst,这样可能会覆盖由编译器所生成的扩展名。因此我们简易用户将XLINK的映象文件完整地定义出来,比如project1.map。

1.2.3文档

这部分简要介绍了在AVR用户手册和参考手册中地信息,以及一些在线帮助。

用户可以在嵌入式IAR Embedded Workbench中的help菜单里访问AVR的在线文档。或是按F1,在IAR EmbeddedWorkbench IDE中获取帮助。

我们建议用户读一下readme.htm文件以获得最新的信息,而用户手册里有可能没有这些信息。它放在AVR\\doc目录下。

文案大全

实用标准

用户和参考手册

嵌入式IAR Embedded Workbench提供以下的用户和参考手册:

AVR® IAR Embedded Workbench® IDE用户手册

即本文档。

AVR® IAR C/C++编译器参考手册

这本手册提供关于AVR IAR C/C++编译器的相关信息。用户可以通过它查看到:

􀁺如何配置编译器以适应用户的目标处理器,并达到应用程序要求;

􀁺如何为用户的目标处理器写高效代码;

􀁺汇编语言接口和调用规则;

􀁺可用数据类型;

􀁺运行库;

􀁺IAR语言扩展。

AVR® IAR的汇编器参考手册

文案大全

实用标准

该手册介绍了AVR IAR汇编器的相关信息,包括汇编器源代码格式的细节信息以及操作、指示符、存贮和诊断。

IAR连接器和库工具参考手册

这篇在线的PDF文档提供关于IAR连接器和库工具的相关信息:

􀁺IAR XLINK连接器部分介绍了XLINK选项,输出格式,环境变量和诊断工具;

􀁺IAR XAR Library Buillder 库创建器部分则介绍了XAR选项和输出;

􀁺IAR XLIB Librarian 库管理器部分介绍了关于XLIB命令,环境变量和诊断工具。

DLIB库参考信息

该在线文档,格式为HTML,提供了IAR DLIB库函数的参考信息。在AVR® IAR Embedded Workbench® IDE在线帮助系统中,含有该文档。

CLIB 库参考手册

PDF格式的在线手册包含IAR CLIB库的参考信息。在AVR® IAR EmbeddedWorkbench® IDE在线帮助系统中,含有该文档。

在线帮助

互动的在线帮助提供关于嵌入式的IAR Workbench IDE的菜单和对话框的参考信息。

文案大全

实用标准

还有关于DLIB函数的关键信息。如果需要查看关于某一函数的相关信息,在编辑器窗口中选择该函数,然后按F1即可。

注意:使用CLIB库的过程中,如果用户在编辑器窗口中选择一个函数名称,然后按下F1键,将会获取CLIB库的参考信息。

IAR网站

在www.iar.com 上能找到最新的关于IAR系统的信息,在嵌入式的IAR Workbench IDE的Help菜单中也能访问到。浏览该网站,可以看到:

􀁺产品发布信息;

􀁺当前版本的最新更新;

􀁺特殊服务;

􀁺IAR产品的评估版拷贝;

􀁺技术支持,包括技术文档;

􀁺应用要点说明;

􀁺链接到芯片供应商和其他相关站点;

􀁺各国供应商的姓名,地址信息。

文案大全

实用标准

第二部分教程

AVR® IAR Embedded Workbench® IDE用户手册的这部分包括以下章节:

􀁺创建一个应用工程;

􀁺使用IAR C-SPY调试器进行调试;

􀁺C与汇编语言模块混合;

􀁺使用C++;

􀁺模拟一个中断;

􀁺使用库模块;

2.1创建一个应用工程

这一章将向用户介绍IAR EmbeddedWorkbench的集成开发环境。

这个教程展示了一个典型的开发流程,并且教用户如何使用编译器和连接器来创建一个适用于AVR芯片的小型应用程序。比如,创建一个工作区,以C语言代码创建一个工程,并编译、连接这个应用程序。

开发过程在下章中继续讲解,请参见第37页,“使用IAR C-SPY调试器进行调试”。

文案大全

实用标准

2.1.1创建一个新工程

使用IAR Embedded Workbench IDE,用户可以设计高级的工程模型。用户可以建立一个工作区,以创建一个或多个工程。并且已经有现成的工程模板用以开发应用工程和库。每个工程都可以建立以组为级别的结构,而在其中用户可以合理放置用户的源文件。每个工程用户都可以定义一个或多个build配置。如想了解更多关于工程模块的信息,请参看“工程管理”一章。

因为本教程中的程序都是含有很少文件的简单程序,所以没有使用高级工程模型。

我们建议用户创建一个特定目录,用来存放工程文件。在教程中,我们称这个目录为“projects”。 用户可以在AVR\utor目录下找到在教程中所需的文件。

在创建工程前,应先创建一个工作区。

创建一个工作区窗口

在教程程序中,第一步应先创建一个新的工作区。当用户第一次打开IAR Embedded Workbench时,应该已经有一个建好的工作区,在其中可以使用教程程序。如果用户是使用那个工作区的话,就可以忽略第一步。

选择File>New>Workspace。现在用户已经做好了准备,来创建一个工程,并且将它放入工作区。

创建新工程

文案大全

实用标准

1.创建一个新工程,选择Project->Create New Project。弹出Create New Project对话框,可以让用户按照模板创建新工程。

在教程中,选择程序模板Empty project,可以快速创建一个采用默认设置的空白工程。

2.确认Tool chain选项已经设置为AVR,然后点击OK。

3.弹出一个标准的Save As 对话框,确认用户想放置工程文件的地方,即新创建的projects目录。在File name对话框中键入project1,然后点击Save,从而创建新工程。

这个工程就出现在工作区窗口中了。

默认状态下,系统产生两个创建配置:调试和发布。在教程中,只使用Debug。在窗口顶部的下拉菜单中,用户可以选择build配置选项。项目名称中的星号指的是修改还没有保存。

一个工程文件,其文件扩展名为ewp,已经创建在project目录下了。这个文件包含用户的工程的特殊设定,例如build选项。

4.在用户向工程中添加任何文件时,应该先保存工作区。选择File>Save Workspace,并且说明工作区文件的存放路径。在本教程中,用户还可以将它放到新建立的projects目录下。 在File name对话框中键入tutorials,点击Save来创建新的工作区。

一个工作区文件-其文件扩展名为eww-已经创建在projects目录下了。这个文件列出了所有用户想加入这个工作区的工程。与之相关的信息,例如窗口放置和断点设置都

文案大全

实用标准

放在projects\\settings目录下。

添加文件到工程中

教程中使用源文件Tutor.c 和Utilities.c。

􀁺Tutor.c程序是只用标准C语言编写的简单程序。它计算出Fibonacci数列的前十

个数,并把结果显示在stdout上;

􀁺Utilities.c程序包含了Fibonacci数列的相应算法。

创建几个组可以使用户根据工程需要来合理、有效地管理源文件。但是,现在这个工程中只含有两个文件,所以没有必要建一个组。如想了解更多关于创建复杂工程结构的信息,请查阅“工程管理”一章。

1.在工作区窗口中,选择用户想放置源文件的目标地址、或者一个组,在这种情况下,就直接指向工程。

2.选择Project->Add Files,打开一个标准的浏览对话框。转到Tutor.c 和Utilities.c所在位置,将它们选中,然后点击Open将它们加入到工程Project1中。

20

设置工程选项

接下来要设置工程选项。对于应用工程,可以在所有节点上设置这些选项。在该教程

文案大全

实用标准

中,首先要设置基本选项来适应处理器的配置。因为这些设置在整个build配置中必须一致,它们将被设置到工程节点上。

1. 在工作区窗口中选择工程文件夹project1->Debug,然后选择Project->Options选项。

General 选项中的Target 选项页被显示出来。

确认下列设置:

接着要设定该工程的编译器选项

2.在Category列表中,选择C/C++ Compiler 显示编译器选项页。

3.确认下列设定

4.击OK确认用户的设置

注意:在Build消息窗口中显示的信息可以进行自定义设置。在本教程中,没有使用默认设置。因此,Build消息窗口的内容可能不同于上述屏幕内容。

现在可以开始创建工程了。

2.1.2应用程序编译和连接

至此,用户可以开始编译和连接应用程序。当然用户应该创建一个编译器列表文件和

文案大全

实用标准

一个连接库文件,并查看它们的内容。

编译源文件

1. 编译Utilities.c文件,在工作区窗口中选中它。

2. 选择Project->Complie

同样的,用户也可以点击工具栏上的Compile按钮或是在工作区的选择文件处点击右键弹出菜单的Compile命令。

其进程将显示在Build 消息框中。

图8 编译消息

3. 按照同样方式编译Tutor.c 文件。

IAR Embedded Workbench 在用户的工程目录下已经创建了新的目录。因为用户正使用build配置命令Debug,所以一个Debug目录已经创建,并且带有list,obj和exe目录:

􀁺List目录用来放置list文件。同时list文件扩展名为lst;

􀁺Obj目录用来放置由编译器和汇编器产生的目标文件。这些文件的扩展名为r90,

并用来作为IAR XLINK Linker的输入;

文案大全

实用标准

􀁺Exe目录用来放置可执行文件。其扩展名为d90,并用来作为IAR C-SPY调试器

的输入。注意,除非用户已连接了object文件,否则此目录为空。

点击工作区窗口中目录树节点上的加号,使视图扩展开。用户可以看到,IAR Embedded Workbench已经在包含输出文件的工作区窗口中创建了一个输出文件夹。此外,还根据文件间依赖关系显示了内部所有的头文件。

查看列表文件

现在需要检查编译器的列表文件,并请注意当用户检查对生成代码大小的不同优化程度时,它是如何进行自动更新的。

1. 在工作区窗口中双击Utilities.lst,打开文件。检查该文件的下列信息:

􀁺header部分显示产品版本,文件创建时间以及曾经使用的编译器的命令行版本;

􀁺量;

body部分显示汇编代码和每个语句的二进制代码。还有分配给不同段的相关变

􀁺end部分显示堆栈大小,代码以及数据所需存贮器空间,还有可能产生的错误或

警告信息。

注意在文件末端显示的生成代码大小信息,并将文件一直打开。

2.选择Tools->Options,打开IDE Options 对话框,点击Editor栏。

文案大全

实用标准

然后选择Scan for Changed Files。此项功能将对编辑窗口中的文件实行自动更新,比如一个列表文件。点击OK按钮。

3. 在工作区窗口中选择Utilities.c文件。在工作区窗口内的所选文件上右击鼠标,打开C/C++ 编译器选项对话框。点击Code(代码)栏,选择Override inherited settings(继承覆盖选项)。接着在Optimizations(优化)下拉菜单中选择High选项。点击OK。

注意在文件节点处的override(覆盖)选项是指位于工作区窗口内的。

4. 对Utilities.c进行编译。用户需要注意两件事情。第一,打开的列表文件的自动更新取决于Scan for Changed Files选项。第二,观察列表文件的末尾,注意代码大小受不断优化的效果。

5. 在教程中,使用的优化程度为“None”,因此在连接应用程序之前,要先恢复为默认的优化程度。在工作区窗口内的所选文件上右击鼠标,打开C/C++ 编译器选项对话框。不选择Override inherited settings(继承覆盖选项),然后点击OK。重编译Utilities.c文件。

连接应用程序

现在用户应该设置IAR XLINK LinkerTM的选项。

1. 在工作区窗口中选择工程文件夹project1->Debug,然后选择Project->Options选项。接着在Category列表中选择Linker,打开XLINK选项页。

对于该教程,使用出厂的默认设置。对于连接器指令文件和输出格式的选择是很重要

文案大全

实用标准

的。

输出格式

选择合适的输出格式非常重要。也许用户想将它加载到调试器中——即需要在输出中显示调试信息。在本教程中,用户会用到C-SPY Debug information,选择With I/O 仿真模块选项,意味着一些低级别的进程会被连接,即在C-SPY调试器中把stdin和stdout直接导入到终端I/O窗口中。用户可以在Output页看到这些选项。

或者,用户想将输出结果加载到一个PROM编程器中,此时就不需要在输出中显示调试信息,比如用Intel-hex 或Motorola S-records。

连接器命令文件

在连接命令文件中,用XLINK命令行选项控制段的放置。熟悉连接器命令文件和段的放置方法是很重要的。在AVR® IAR C/C++编译器参考手册中,含有更详细的信息。

产品提供的连接命令模板可用在仿真器中,但当用于实际目标系统时,就必须根据实际的硬件存储情况来调整其设置。用户可以在config目录下找到系统提供的连接器指令文件。

该教程中,用户可以使用默认的连接器命令文件,该文件可以在Config页中看到。

如果用户想检验连接命令文件,可以使用一个合适的文本编辑器,比如嵌入式IAR

Embedded Workbench编辑器,或者打印一份该文件的拷贝,然后验证其定义是否

文案大全

实用标准

符合用户的要求。

2. 点击OK,保存XLINK的设置。

现在用户应该连接目标文件了,接着生成可调试的代码。

3. 选择Project->Make。其进程在Build消息窗口中显示。连接的结果是得到一个含有调试信息的代码文件project1.d90以及一个映象文件project1.map。

查看映象文件

检查project1.map文件,观察段是如何定义以及代码是怎样放置在存贮器中的。一个映象文件主要包含以下几点信息:

􀁺header包含连接选项;

􀁺CROSS REFERENCE段显示程序开始段的地址;

􀁺RUNTIME MODEL段显示运行模式的相关属性;

􀁺MODULE MAP显示被连接的文件。对每个文件而言,模块信息都作为程序的一

部分被加载和显示,包括段标号和各段中定义的全址标号。

􀁺SEGMENTS IN ADDRESS ORDER 部分列出了所有构成用户的程序的段。

至此,project1.d90程序已经可以在IAR C-SPY调试器中运行了。

文案大全

实用标准

2.2使用IAR C-SPYDebugger进行调试

这一章继续上章开始的开发过程,并讲解IAR C-SPY Debugger的基本特点。

注意,IAR C-SPY Debugger安装与否,取决于用户所安装的IAR产品的版本。本教程假设用户正使用的是C-SPY软仿真器。

程序调试

在上章中创建的project1.d90程序,现在可以在IAR C-SPY Debugger上运行了。用户可以监控变量,设置断点,反汇编查看源代码,控制寄存器和存贮器,以及在终端I/O窗口中查看程序输出结果。

启动调试器

在启动IAR C-SPY Debugger之前,用户必须设定C-SPY的几个相关选项。

1. 选择Project->Options,然后选择Debugger列表。在Setup页,确认在Driver下拉菜单中选择了Simulator选项,接着选择Run to main。点击OK。

2 选择Project->Debug。或者点击位于工具栏上的Debugger按钮。从而启动IAR C-SPY Debugger,并加载了project1.d90应用程序。除了在嵌入式Workbench中已经打开的窗口,还有一系列C-SPY的特殊窗口。

窗口管理

文案大全

实用标准

在IAR Embedded Workbench中,用户可以在特定位置停靠窗口,并利用标签组来管理它们。用户也可以使某个窗口处于“悬浮”状态,即让它始终处于其他窗口的上层。如果用户改变了“悬浮窗口”的大小和位置,其他窗口不受影响。

状态栏,位于嵌入式Workbench的主窗口的底部,包含了如何管理窗口的帮助信息。对于更为详细的信息,请参考P77页,屏幕中的窗口管理。

确保下列窗口和窗口内容始终开启,并处于屏幕上的视野内:打开了build配置文件tutorials-project1的工作区窗口,打开了Tutor.c和Utilities.c源文件的编辑窗口以及调试日志窗口。

查看源文件语句

1. 要查看源文件语句,在工作区中双击Tutor.c文件。

2. 在编辑窗口中显示Tutor.c文件,首先执行Debug->Step Over 命令。 或者点击工具栏上的Step Over 按钮。

当前位置应该是调用init_fib函数。

3. 选择Debug-> Step Into ,程序运行到init_fib 函数。也可点击工具栏上的Step Into按钮。

在源文件级,Step Over和Step Into命令使用户可以执行应用程序的一个语句或一个函数。Step Into命令要执行内部函数或子进程的调用,而Step Over每一步只执行每一个函数调用。想了结更多,参看116页的“单步”。

文案大全

实用标准

当执行Step Into后,用户会发现当init_fib函数被定位到文件中后引起当前窗口变为“Utilities.c”。

4. 使用Step Into命令,直到运行到for循环为止。

5. 当回到for 循环的开端,使用Step Over命令。用户会发现步进点处于函数调用级,而不是语句级。

当然用户也可以设置为语句级。选择Debug->Next statement,使程序每次执行一个语句。或者用户可以点击位于工具栏的Next statement按钮。

请注意该命令与Step Over和Step Into命令间的区别。

查看变量

C-SPY 允许用户查看在源代码中查看变量或表达式,使用户可以在运行程序时跟踪其值的变化。用户可以通过多种方式查看变量。例如,在源代码窗口,用鼠标点击在所要查看的变量上面,或者通过打开Locals、Watch、Live Watch、or Auto 窗口。如需了解更多,请参看“变量与表达式”一章。

注意:当优化等级设为“None”时,所有的非静态变量在整个进程中都是可用的,因此这些变量是可完全调试的。一旦升高了优化等级,变量可能就不再是完全可调试的了。

使用自动窗口

1. 选择 View->Auto,开启Auto窗口。

文案大全

实用标准

自动窗口会显示当前被修改过的表达式。

图15 在Auto窗口查看变量

2. 连续步进,观察i的值的变化情况。

设定监控点

接下来使用Watch窗口来查看变量。

3 选择View->Watch,打开Watch窗口。注意:按照默认设置,它与当前打开的Auto窗口叠在同一组中。

4. 使用以下进程在变量i上设置一个监控点:在Watch窗口中点击虚线矩形。出现输入区域时,键入i并回车。

用户也可以从编辑窗口中将一个变量拖到Watch窗口中。

5. 在init_fib函数中选择root列,把它拖到Watch窗口中。

Watch窗口中可以显示i和root的当前值。用户还可以扩展root列来监控它的更多信息。

31

6. 继续往下执行,看i和root的值如何变化。

文案大全

实用标准

7. 如果要在Watch窗口中去掉一个变量,选中它,然后点击Delete(删除)。

设置并监控断点

IAR C-SPY调试器拥有一个多重特性的强大的断点调试系统。想了解不同的断点的详细信息,请参看127页的“断点系统”一章。

使用断点最便捷的方式是将其设置为交互式的,即将插入点的位置指到一个语句里或者靠近一个语句,然后选择“Toggle Breakpoint(触发断点)”命令。

1. 在语句get_fib (i) 上设置断点,其步骤为: 首先,在编辑窗口中点击Utilities.c,然后选择需要设定插入点的语句。然后,选择 Edit-> Toggle Breakpoint命令。

或者,在工具栏上点击Toggle Breakpoint按钮。

此时,在这个语句处已经设置好一个断点。并且还会使用亮条以及在旁边的空白处标注一个X显示断点的存在。

为了查看所有断点,可以选择View>Breakpoints,以打开断点窗口。在调试日志(Debug Log)窗口用户可以找到断点执行的相关信息。

运行至一个断点

2. 要使用户的应用程序运行至断点,选择Debug-> Go 命令。或者点击工具栏上的Go按钮。

文案大全

实用标准

应用程序运行到用户设定的断点处。监控窗口会显示root表达式的值,而调试日志窗口则显示断点的相关信息。

3. 选中断点,然后选择Edit-> Toggle Breakpoint命令,删除断点,使程序继续向下运行。

在反汇编模式中调试

使用C-SPY进行调试在C/EC++环境中通常更快速和更简洁。然而,如果用户想对低层的进程进行完全控制,可以采用反汇编调试模式,即每一步都对应一条汇编指令。C-SPY允许用户在这两种模式间自由切换。

1. 首先点击工具栏上的Reset按钮,重启用户的应用程序。

2. 如果反汇编窗口没有打开,就选择View-> Disassembly 命令,打开反汇编调试窗口。用户会看到当前C语言语句的对应汇编语言编码。

图18 在反汇编模式下调试

在反汇编调试窗口中,用户还可以使用其他反汇编调试命令。

监控寄存器

寄存器窗口允许用户监控并修改寄存器的内容。

1. 选择 View->Register命令,打开寄存器窗口。 图19 寄存器窗口

文案大全

实用标准

2. Step Over命令将执行下一行指令,可以观察寄存器窗口中的值的变化。

3. 关闭寄存器窗口。

监控存贮器

存贮器窗口允许用户监控存贮器的指定区域。 在下列例子中,将监控对应root变量的存贮器。

1. 选择View->Memory,打开存贮器窗口。

2. 激活Utilities.c 窗口,选择root。然后将它从C源代码窗口拖到存贮器窗口中。

同时在存贮器窗口中对应root的值也被选中。

图20 存储器监测

3. 如果要按16位来显示存贮器中的数据值,可以点击存贮器窗口工具栏的下拉菜单中的x2 Units(2倍单位)命令。

34

如果存贮器单元还没有被init_fib命令(C语言程序)全部初始化,接着执行单步命令,用户会观察到存贮器中的数值是如何更新的。

用户还可在存贮器窗口中对数据值进行编辑,修改。只需在用户想进行编辑的存贮器

文案大全

实用标准

数值处放置插入点,然后键入期望值即可。

最后,关闭存贮器窗口。

查看终端I/O

有时用户也许需要对程序中的指令进行调试,以便在没有硬件支持的情况下使用stdin和stdout。C-SPY通过终端I/O窗口来模拟stdin和stdout。

注意:终端I/O窗口只有在C-SPY使用了“With I/O emulation modules”(使用I/O仿真模块)输出模式对工程进行连接之后才是可用的。这意味着某些低层的程序将直接连接stdin和stdout到中断I/O窗口,请参见第34页,连接应用程序。

1. 选择View->Terminal I/O 命令显示I/O操作的输出结果。

窗口中的内容取决于用户的应用程序运行到哪里。程序运行完毕

1. 要完成程序运行,选择Debug-> Go命令。或者点击工具栏上的Go按钮。

如果没有新的断点,C-SPY将一直运行到程序的末尾,然后在调试日志窗口中就会显示“a program exit reached(已到程序末尾)”的信息。

图23 在C-SPY中到达程序末尾

程序中所有的输出结果都显示在终端I/O窗口中了。

文案大全

实用标准

如果用户想再次运行当前程序的话,选择Debug-> Reset命令,或者点击工具栏上的Reset按钮。

2. 要退出C-SPY,请选择Debug>Stop Debugging 。也可点击工具栏上的Stop Debugging按钮,然后就看到嵌入式Workbench的工作区了。

C-SPY还提供很多其他的调试工具。其中一些在下面的章节中有介绍,例如宏和中断仿真等。

如想了解更多关于C-SPY的用法,请参看第4部分,“调试”。

想了解C-SPY特性的参考信息,请参看第7部分,“参考信息”。

2.3 C与汇编混合模式

在某些工程中,有时需要以汇编语言来编写某段的源代码。本章首先介绍了编译器在检验调用规则时发挥的作用,其中用户需要熟悉从C/C++代码中调用汇编代码的过程,反之亦然。

此外,本章还教用户如何轻松在C源代码中加入汇编代码,对含有嵌入式C++代码的工程,这个过程也是适用的。

此时,假设用户已经熟悉了前面章节中介绍的IAR Embedded Workbench的基本信息了。

2.3.1检查调用规则

文案大全

实用标准

当编写被一个C语言程序调用的汇编程序时,就必须熟悉编译器使用的调用规则。以C语言编写主要代码,然后使用编译器生成相应的汇编文件,用户可以研究这一过程和相应的汇编生成文件,就会对调用规则有详细的认识。

在以下例子中,将通过编译器,从Utilities.c文件生成汇编文件。

1. 在tutorials 工作区中创建一个新工程,并命名为project2。

2. 在该工程中,添加Tutor.c和Utilities.c文件。要查看工作区内的全部工程,点击工作区窗口底部的Overview标签。如果只查看新创建的工程,点击project2标签。而现在,project2应该位于当前可视窗口中。

3. 要设置选项,请选择Project>Options,然后选择General Options选项。

在Target页,从Processor configuration下拉菜单中选择--cpu=m128,然后从Memory model下拉菜单中选择Small。

4. 要在工作区窗口中设定文件级节点选项,选中文件Utilities.c

选择 Project->Options 命令。用户会发现只有C/C++ Compiler(C/C++ 编译器)和Custom Build (自定义编译)列表是可选的。

5. 在C/C++ Compiler(C/C++ 编译器)列表中,选择Override inherited settings (覆盖继承设置),并确认以下设置:

表5 工程2的编译器选项

文案大全

实用标准

注意: 在这个例子中,编译代码以显示局部和全局变量访问时应该使用低级优化模式。如果使用了高级优化模式,指向局部变量的信息将被删除。实际的函数声明没有随优化等级而改变。

6. 点击OK,返回到工作区窗口中。

7. 对Utilities.c进行编译。用户可以在projects\\debug\\list子目录下找到Utilities.s90这个输出文件。

8. 要检查调用规则,并观察C或C++代码在汇编语言中如何表示,请打开Utilities.s90文件。

用户可以研究参数在哪里,怎样被传递,当完成一个函数调用后如何回到程序体中,以及如何接收返回值。用户还可以研究一个汇编级的子函数必须占用哪些寄存器。

要为用户的应用函数获取正确的接口,用户必须为每一个必需的函数编写主干代码。

关于更为详细的编译器中的调用规则,请参见AVR® IAR C/C++ 编译器参考手册。

2.3.2在工程中添加一个汇编模块

这个教程演示了如何轻松地创建一个带有汇编模块和C模块的工程。用户还可以对它进行编译,并查看汇编输出的列表文件。

创建工程

文案大全

实用标准

1. 通过删除文件Utilities.c并添加文件Utilities.s90,修改工程2。

注意:要在Add files(添加文件)对话框中查看汇编文件,选择 Project->Add Files以及在Files of type(文件类型)下拉菜单中选择Assembler Files(汇编文件)。

2. 在工作区窗口中选择工程级节点,选择Project->Options。在General Options, C/C++ Compiler和Linker表中都使用默认设置。选中Assembler列表,点击List标签,然后选择Generate list file(生成列表文件)选项。

37

图24 创建列表文件时的汇编设置

点击OK。

3. 在工作区窗口中选择Utilities.s90文件,然后点击Project->Compile 命令,开始汇编。

假设其源文件已经编译成功,并生成了可连接的目标文件Write.r90。

查看汇编列表

4. 在工作区窗口中的Output文件夹中双击Utilities.lst文件,展开列表。

文件末尾包含一段生成的错误和警告信息,以及校验信息(CRC)。

文案大全

实用标准

想了解列表文件格式的更多信息,请参看AVR ®IAR Assembler Reference Guide(汇编器参考手册)。

5. 选择Project>Rebuild All,以重新创建工程2 。

6. 启动C-SPY,运行project2.d90应用程序,并且像在以前的教程中一样,观察其行为。

7. 完成后退出调试器。

2.4使用C++

在本章中,C++用来创建一个C++类。这个类则用来创建两个独立的对象,并创建应用程序及相应调试。

我们还演示了如何设置一个条件断点。

此时,假设用户已经熟悉了前面章节中介绍的IAR Embedded Workbench的基本信息了。 注意,是否支持C++取决于用户所安装的IAR产品的版本。本教程假定支持C++。

创建一个C++应用程序

本教程将演示如何使用AVR IAR EmbeddedWorkbench 的C++特性。文中包含两个文件:

􀁺

文案大全

Fibonacci.cpp创建一个 fibonacci类,用来提取一系列Fibonacci数;

实用标准

􀁺CPPtutor.cpp 在fibonacci类中创建两个对象,fib1和fib2,并使用fibonacci

类来提取两列Fibonacci数。

为验证这两个对象是相互独立的,我们以不同的速度提取这些数字。从fib1中提取数字采用循环中每步一取,而从fib2中提取数字则采用每秒一取的方式。

Fib1目标文件使用默认定义创建,而fib2则以整数自变量来定义。

编译并连接C++程序

1 在tutorials工作区中,创建一个新工程project3。

2. 在project3中添加Fibonacci.cpp 和 CPPtutor.cpp文件。

3. 选择Project->Options,确定下列选项被选中:

表6 嵌入式C++ 教程的工程选项

设置C++编程语言的开关选项,只需要选择Normal DLIB (C/EC++ library) 和 Embedded C++选项即可。

4 选择Project->Make 选项,进行编译并连接用户的应用程序。

或者点击工具栏上的Make按钮。Make命令对已修改过的文件进行编译与连接。

5. 选择Project->Debug,启动IAR C-SPY 调试器。

文案大全

实用标准

设定一个断点并执行到它

1. 打开CPPtutor.cpp 窗口。

2. 要观察目标文件如何创建,在C++目标文件fib1中的fibonacci fib1行上设置一个断点。

fibonacci fib1;

3. 选择Debug ->Go,或者点击工具栏上的Go按钮。光标将置于断点处。

4. 要进入构造函数,选择Debug->Step Into或者点击工具栏上的Step Into按钮。然后再点击Step Out。

5. Step Over三次, Step Into一次直到运行到Fibonacci.cpp程序的next函数。

6. 在编辑窗口的左下角点击Go to function 按钮,然后双击nth函数名,跳转至该函数处。

在value = nth(n-1) + nth(n-2)行上的调用nth(n-1) 函数处设置一个断点。

7. 对函数调用进行逆向追踪以及对每个函数调用的参数值进行检验都是很有趣的。对断点增设条件限制,中断不会被触发除非条件值为真,并且用户可以在调用堆栈(Call Stack)窗口中查看到每一个函数调用。

选择View>Breakpoints,以打开断点窗口。在断点窗口中选择断点,右击上下文菜

文案大全

实用标准

单,然后选择Edit,以打开Edit Breakpoints对话框。设置Skip count text box为4,然后点击Apply。

关闭对话框。

查看函数调用

8. 选择Debug ->Go,运行程序直至断点条件得到满足。

9 当C-SPY在断点处停下的时候,选择View->Call Stack,打开调用堆栈窗口。

现在有5个关于函数nth()的例子,在调用堆栈窗口中有相应显示。因为调用堆栈窗口显示的是函数变量的值,用户可以在不同的函数实例中观察到不同的值。

当用户双击这些函数实例来追踪函数调用时,也可以打开寄存器窗口来观察它是如何更新的。

打印Fibonacci数列

1 在View(视图)菜单中打开终端I/O窗口。

2 去掉断点,执行完整个程序,确认打印Fibonacci数列。

图27 打印Fibonacci序列

2.5模拟一个中断

文案大全

实用标准

在本章中,将介绍如何在工程中添加一个串口设备的中断处理函数。以及如何通过一个片内通信的外围设备(UART)读取Fibonacci数列。

文中还演示了AVR IAR C/C++编译器的关键字和#pragram 矢量指示符是如何使用的。以及怎样通过支持中断、断点和宏来实现中断仿真。注意:这个例子并不是描述一个确切的仿真,其目的在于展示C-SPY宏、断点和中断系统如何有利于硬件仿真的实现。

此时,假设用户已经熟悉了前面章节中介绍的IAR Embedded Workbench的基本信息了。

注意,只有用户使用IAR C-SPY软仿真器才能实现中断仿真。

2.5.1加入一个中断句柄

这部分讲述如何轻松地编写一个中断。首先简单介绍了工程中所用的应用程序,然后讲解了如何建立一个工程。

应用程序——简介

中断句柄将从串口通信口接收寄存器(USART0)UDR0读出数值。然后,打印其值。主程序允许中断并在等待中断过程中开始打印(.)。

编写一个中断处理函数

以下的程序行是本文档使用的中断处理函数定义(完整的源代码在avr/tutor子目录下的Interrupt.c文件中找到)。

文案大全

实用标准

#pragma矢量指示用于详细说明中断向量地址-本例的USART0中断向量收到中断-关键字__interrupt用于引导编译器调用中断服务程序。

要了解关于本文中使用的扩展关键字以及编译指示符的详细信息,请参看AVR ® IAR C/C++ 编译器参考手册。

创建工程

1. 在tutorials工作区中添加一个新工程——project4。

2. 导入文件Utilities.c和Interrupt.c。

3. 在工作区窗口中,选择工程级节点,然后选择Project->Options。然后选中General Options(基本选项)表,点击Target(目标)标签。在Processor configuration的下拉菜单中,选择--cpu=m128,然后选择Small存储器模式。

此外,确认C/C++ Compiler(编译器)和Linker(连接器)列表中使用出厂设置。

接下来,用户需要创建仿真环境。

2.5.2创建仿真环境

C-SPY中断系统基于一个周期计数器。在C-SPY生成一个中断前,用户可以指定该周期数。

要仿真UART0的输入,将从InputData.txt文件中读取数据,其中包括Fibonacci

文案大全

实用标准

数列。用户可以在UART0接收寄存器UDR0上设置一个“直接读取断点”,然后连接一个用户定义的宏函数(文中用的是Access() 宏)。这个宏函数从文本文件中读取Fibonacci数列。

不管何时产生中断,中断程序始终都要读UDR0,继而触发断点,执行Access() 宏并将Fibonacci数导入UART接收寄存器中。

直接读取断点将在处理器读取UDR0寄存器前触发中断,从而运行宏把通过指令直接读入的数据存入寄存器中。

这一章讲解了为实现串口中断仿真而建立的软仿真器所需的步骤。具体如下:

􀁺定义一个C-SPY安装文件,可以打开InputData.txt,并定义Access() 宏函数;

􀁺设定C-SPY选项;

􀁺创建工程;

􀁺启动软仿真器;

􀁺设定中断要求;

􀁺设置断点并与Access() 宏函数关联。

注意:系统计时器中断仿真的简单示例,请参见p168页,简单中断仿真。

文案大全

实用标准

定义一个C-SPY的宏安装文件

在C-SPY中,用户可以定义宏安装文件,这些宏在C-SPY启动工程中将被注册。在本章中,用户将使用位于avr\utor目录下的C-SPY宏文件SetupSimple.mac。其创建过程如下:

首先定义宏安装函数execUserSetup(),它将在C-SPY安装过程中自动运行。因此,它可以用来自动创建仿真环境。在日志窗口的信息可以证实这个宏命令确实运行过:

接着是InputData.txt文件,它包含了导入到UART的Fibonacci数列,打开该文件:

然后定义Access() 宏函数。它将从InputData.txt文件中读取Fibonacci数列,然后按接收寄存器地址分配这些数值:

用户需要将Access() 宏函数连接到一个直接读取断点。但是,这一步将在稍后的步骤中完成。

最后,文件中应包括两个在重启和退出时用于文件纠错管理的宏函数。

想了解更多关于宏的信息,请参看“使用C-SPY宏”一章以及C-SPY的“宏的相关参考”。

接下来,用户需要指定宏文件,并设置C-SPY的其他选项。

设置C-SPY选项

文案大全

实用标准

1 选择C-SPY选项,点击Project->Options。在Debugger(调试器)列表中,点击Setup(安装)标签。

2 使用Use setup file(使用安装文件)浏览按钮,确认以下宏文件被使用:

SetupSimple.mac

或者,使用一个变量来确定其路径:

$TOOLKIT_DIR$\utor\\SetupSimple.mac

对于详细信息,请参见第250页,变量声明总结

注意: 取决于用户选择的处理器配置-iom128.ddf,合适的设备描述文件将被自动选择。该文件的信息需要用在中断系统上。

3 选择Run to main(运行到主程序),然后点击OK。这一步确保调试段从主程序开始。

现在可以开始创建工程了。

创建工程

1 选择Project->Make,编译并连接工程。

或者点击工具栏上的Make按钮。 Make命令对已修改过的文件进行编译和连接。

文案大全

实用标准

启动软仿真器

1 启动IAR C-SPY调试器,运行project4工程。

出现Interrupt.c窗口(或者在其他窗口之间)。点击它,使之位于最上层(处于激活状态)。

2 从View菜单中检查Debug Log窗口。注意宏文件已经加载,并且execUserSetup函数也已被调用。

指定一个中断仿真

现在用户需要指定一个中断,使它循环2000次后模拟一次中断。

1 选择Simulator->Interrupts,显示Interrupts(中断)对话框。

2 按下表设定中断:

表7 中断对话框

46

在运行过程中,C-SPY处于等待状态,直到循环计数器超过激活时间。当前运行的汇编指令执行后,C-SPY将生成一个中断,即每循环2000次重复一次。

3 当用户确定设置后,点击Install(安装),然后点击OK,关闭Interrupt对话框。

文案大全

实用标准

要自动定义中断,用户可以在一个C-SPY安装文件中使用系统宏命令__orderInterrupt。在本章结尾,我们将演示如何自动执行此过程。

设置一个立即断点

定义一个宏命令,并将它连接到一个立即断点上,由此,用户可以使这个宏命令模拟硬件设备,比如本文中提到的I/O接口。立即断点不会中断程序运行,只是有时用来延迟检查条件或执行相关联的宏命令。

在这个例子中,USART0的输入是由一个设置在UDR0地址段上的直接读取断点动作来仿真的,并且关联了一个已定义的Access()宏命令。这个宏将完成UART的输入仿真。以下是其相应步骤:

1 选择View>Breakpoints打开中断窗口,右击以打开上下文菜单,选择New Breakpoint>Immediate 以打开 Immediate 标签。

2 在断点上加入以下参数。

在运行过程中,当C-SPY在UDR0地址段上探测到一个读取访问时,它会暂时延缓仿真进程,然后执行Access()宏命令。这个宏命令会从InputData.txt文件中读取数值,并将其写入UDR0。C-SPY在收到UDR0中返回的缓冲值后,就恢复仿真进程。

3 点击OK,关闭Breakpoints对话框。

要自动执行断点配置,用户可以在一个C-SPY安装文件中使用系统宏命令__setSimBreak。在本章结尾我们还会演示如何使用这个宏命令来实现自动完成。

文案大全

实用标准

2.5.3中断仿真

在这部分中,用户将运行程序,并进行串口中断仿真。

运行程序

1 单步调试程序,当到达while循环时暂停,等待输入。

2 在Interrupt.c源代码窗口,放置函数irqHandler。

3 在++callCount;指令行上放置插入点并选择Edit->Toggle Breakpoint,设置一个断点,或者点击工具栏上的Toggle Breakpoint(触发断点)。或者使用上下文菜单予以选择。

如果用户想查看断点的详细信息,选择Edit->Breakpoints。

4 打开终端I/O窗口,选择Debug->Go,运行程序, 或者点击工具栏上的Go按钮。

在中断函数段,程序应该暂停下来。

5 再次点击Go,查看在终端I/O窗口中打印的下一个数。

因为主程序对Fibonacci数值统计有上限,这个教学程序很快将运行到exit段,并停止。

终端I/O窗口将显示Fibonacci数列。

文案大全

实用标准

2.5.4中断和断点中宏的使用

要自动设置断点和中断定义,系统宏命令__setSimBreak和__orderInterrupt可各自相应地在宏安装命令execUserSetup()下运行。

SetupAdvanced.mac文件与系统宏调用相关联,用以设置断点和确认中断:

将前面所用的SetupSimple.mac文件替换为SetupAdvanced.mac,当C-SPY启动时将自动设置断点,完成中断定义。因此,用户不必手动在Interrupts和Breakpoints对话框中输入数值。

注意:在用户加载SetupAdvanced.mac文件前,应该先去除以前定义的断点和中断。

2.6使用库模块

这一章演示了如何创建库模块,以及如何将一个库与应用工程结合起来。

此时,假设用户已经熟悉了前面章节中介绍的IAR Embedded Workbench的基本信息了。

使用库

如果开发一个大型工程,用户很快就能积累一些有用的例行程序,并可用到应用程序中。要避免每次需要这样的程序时就汇编一次的情况,用户可以将其存为目标文件,即已汇编但还没有连接。

文案大全

实用标准

将这样的程序集存入一个目标文件中,即称为一个库。建议用户使用库文件来创立相关例行程序的集合,比如一个设备驱动。

我们使用IAR XAR Library Builder来创建库。IAR XLIB Librarian则帮助用户操作库。它允许用户做以下操作:

􀁺将模块类型从PROGRAM改为LIBRARY,反之亦然。

􀁺在一个库文件中添加或删除模块。

􀁺列出模块名,路径名等。

Main.s90程序

Main.s90程序使用一个名为max的函数来设置寄存器R16为字寄存器R16和R17的最大值。在连接的时候,EXTERN指示符将max定义为外部字符。

该程序的拷贝位于avr\utor目录下。

库函数

这两个库函数将构成一个独立的库。它包含由main调用的max函数,以及一个相应的min函数。这两个函数会对寄存器R16和R17的值进行操作,并将结果返回到R1中。在R16中返回的结果。包含这些库函数的文件名为Maxmin.s90,在产品中有相应备份。

MODULE指示符将这些函数定义为库模块,只有被其它模块调用时才指示IAR XLINK

文案大全

实用标准

Linker™包含这些模块。

PUBLIC指示符将max和min符号发布给其它模块。

想了解更多关于MODULE和PUBLIC指示符的详细信息,请参看AVR® IAR汇编器参考手册。

创建一个新工程

1 在tutorials工作区中,创建一个新工程project5。

2 在新工程中添加Main.s90。

3 要设置选项,选择Project->Options。选中General Options列表,并点击Library

50

Configuration图标。在Library的下拉菜单中选择None,即不连接标准的C/C++库。

其他选择列表中使用默认选项。

4 要汇编Main.s90文件,选择Project->Compile。也可点击工具栏上的Compile按钮。

创建一个库工程

文案大全

实用标准

用户现在可以创建一个库工程文件了。

1 在同一个tutorials工作区中,添加一个新工程名为tutor_library。

2 在这个工程中添加Maxmin.s90文件。

3 要设置选项,选择Project->Options。在General Options(一般选项)列表中,确认以下设置:

表9 库工程的XLINK选项

注意:Library Builder出现在列表中,这就意味着IAR XAR Library Builder已经被加入到创建工具链中。在本教程中无需对XAR的任何具体的选项做设定。

点击OK。

4 选择Project->Make。

至此,库输出文件tutor_library.r90已经创建成功了。

在应用工程中使用库

现在可以将带有maxmin程序的库添加到project5中了。

1 在工作区窗口中,点击project5标签。选择Project->Add Files,然后添加位于projects\\Debug\\Exe 目录下的tutor_library.r90文件。

文案大全

实用标准

点击Open。

2 点击Make,开始编译工程。

3 现在可以将一个可执行工程与一个库结合起来,所生成的应用程序可以运行。要了解如何操作库,请参看IAR Linker 和 Library Tools 参考手册。

调试方法

1 单步调试程序,当到达while循环时暂停,等待输入。

2 在Interrupt.c源代码窗口,放置函数irqHandler。

3 在++callCount;指令行上放置插入点并选择Edit->Toggle Breakpoint,设置一个断点,或者点击工具栏上的Toggle Breakpoint(触发断点)。或者使用上下文菜单予以选择。

如果用户想查看断点的详细信息,选择Edit->Breakpoints。

4 打开终端I/O窗口,选择Debug->Go,运行程序, 或者点击工具栏上的Go按钮。

在中断函数段,程序应该暂停下来。

5 再次点击Go,查看在终端I/O窗口中打印的下一个数。

因为主程序对Fibonacci数值统计有上限,这个教学程序很快将运行到exit段,并停

文案大全

实用标准

止。

终端I/O窗口将显示Fibonacci数列。

文案大全

因篇幅问题不能全部显示,请点此查看更多更全内容

Top