1、教学目的 掌握Vision集成开发环境的使用:嵌入式系统开发流程Vision的使用Vision调试器的使用教学内容 6.1 嵌入式系统开发基础 6.2 Vision集成开发环境介绍 6.3 程序的编辑 6.4 程序的编译 6.5 程序的连接 6.6 程序的调试6.1 嵌入式系统开发基础 6.1.1嵌入式系统开发流程 6.1.2嵌入式软件开发 6.1.3 RealView MDK软件的简介 6.1.4 RealView MDK软件的安装6.1.1嵌入式系统开发流程嵌入式系统开发的基本流程为:1 系统定义与需求分析。2 系统设计方案的初步确立。3 初步设计方案性价比评估与方案评审论证。4 完善初步
2、方案、初步方案实施。5 软硬件集成测试。6 系统功能性能测试及可靠性测试。嵌入式系统的开发必然有其自身的许多特点:软硬件可配置、功能可 靠、成本低、体积小、功耗低、实时性强。嵌入式系统受 功能和具体应用环境的约束,其开发流程就就不同于一般 的通用计算机系统。嵌入式系统设计是使用一组物理硬件和软件来完成所需功能的过程,系统是指任何由硬件、软件或者两者的结合而构成的功能设备。由于嵌入式系统是一个专用系统,所以在嵌入式产品的设计过程 中,软件设计和硬件设计是紧密结合、相互协调的。这就产生了一种 全新的设计理论软硬件协同设计。如图6-1所示。图6-1 软硬件协同设计这种方法的特点是,在设计时从系统功能
3、的实现考虑,把实现时的软 硬件同时考虑进去,硬件设计包括芯片级“功能定制”设计。既可最大 限度地利用有效资源,缩短开发周期,又能取得更好的设计效果。系统协同设计的整个流程从确定系统要求开始,包含系统要求的功 能、性能、功耗、成本、可靠性和开发时间等。这些要求形成了由项 目开发小组和市场专家共同制定的初步说明文档。系统设计首先确定所需的功能。复杂系统设计最常用的方法是将整个 系统划分为较简单的子系统及这些子系统的模块组合,然后以一种选 定的语言对各个对象子系统加以描述,产生设计说明文档。其次,是把系统功能转换成组织结构,将抽象的功能描述模型转换成 组织结构模型。由于针对一个系统可建立多种模型,因
4、此应根据系统 的仿真和先前的经验来选择模型。6.1.2嵌入式软件开发不同于通用计算机和工作站上的软件开发工程,一个嵌入式软件的开 发过程具有很多特点和不确定性。其中最重要的一点是软件跟硬件的 紧密耦合特性。由于嵌入式系统的灵活性和多样性,这样就给软件设计人员带来了极 大地困难。第一,在软件设计过程中过多地考虑硬件,给开发和调试都带来了很多不便;第二,如果所有的软件工作都需要在硬件平台就绪之后进行,自然就延长了整个的系统开发周期。为了解决这个问题,我们可以在特定的EDA工具环境下面进行开发,通过后再进行移植到硬件平台的工作。这样既可以保证程序逻辑设计 的正确性,同时使得软件开发可平行甚至超前于硬
5、件开发进程。我们把脱离于硬件的嵌入式软件开发阶段称之为“PC 软件”的开发,图6-2说明了一个嵌入式系统软件的开发模式。图6-2 嵌入式软件开发方法 在“PC 软件”开发阶段,可以用软件仿真,即指令集模拟的方法,来对用 户程序进行验证。在模拟环境下,用户可以设置ARM 处理器的型号、时钟频率等,同时还可以配置存储器访问接口的时序参数。程序在模拟环境下运 行,不但能够进行程序的运行流程和逻辑测试,还能够统计系统运行 的时钟周期数、存储器访问周期数、处理器运行时的流水线状态(有 效周期、等待周期、连续和非连续访问周期)等信息。这些宝贵的信 息是在硬件调试阶段都无法取得的,对于程序的性能评估非常有价
6、 值。为了更加完整和真实地模拟一个目标系统,ARMulator 和ISS 还 提供了一个开放的API 编程环境。用户可以用标准C 来描述各种各样 的硬件模块,连同工具提供的内核模块一起,组成一个完整的“软”硬 件环境。在这个环境下面开发的软件,可以更大程度地接近最终的目 标。利用这种先进的EDA 工具环境,极大地方便了程序开发人员进行 嵌入式开发的工作。当完成一个“PC 软件”的开发之后,只要进行正确 的移植,一个真正的嵌入式软件就开发成功了。由上可知,嵌入式软件开发是基于一个交叉开发环境,其开发流 程如下:开发环境的建立、源代码编辑阶段、交叉编译和链接、重定 位和下载、联机调试,如图6-3所
7、示。图6-3嵌入式软件开发流程图6.1.3 RealView MDK软件的简介RealView编译工具是ARM公司15年来深入研发的结果。RealView微控制器开发集(RealView Microcontroller Development Kit)涵盖了如下RealView编译工具组件。包括Vision IDE 集成开发环境、Vision Debugger调试器和RealView编译器,如图6-4所示。RealView MDK支持ARM7、ARM9和最新的Cortex-M3核处理器,自动配置启动代码,集成Flash烧写模块,强大的Simulation设备模拟,性能分析等功能,与ARM之前的
8、工具包ADS等相比,RealView编译器的最新版本可将性能改善超过20。6.1.4 RealView MDK软件的安装 双击安装文件,建议在安装之前关闭所有的应用程序,单击Next,弹出如图6-5所示对话框。安装完毕,如图所示。RealView MDK 的注册 (1)在Vision IDE中,单击File License Management菜单项进入许可证管理对话框;(2)选择Single-User License 页,在该页右边的CID(Computer ID)文本框中会自动产生CID;(3)在https:/ 码LIC(License ID Code)(5)将得到的许可证ID 输入New
9、 License ID Code(LIC)文本框,然后单击右边的Add。Vision IDE 集成开发环境安装完毕后,点击Vision IDE 的图标即可运行Vision IDE,如图6-11所示。6.2 MDK 集成开发环境介绍 6.2.1工程工作区 6.2.2工作区 6.2.3输出窗口 6.2.4菜单栏、工具栏和快捷键 6.2.5软件开发流程 6.2 MDK 集成开发环境介绍 Vision IDE是一个窗口化的软件开发平台,它集成了功能强大的编辑器、工程管理器以及各种编译工具(包括C编译器、宏汇编器、链接/装载器和十六进制文件转换器)。Vision IDE包含以下功能组件,能加速嵌入式应用
10、程序开发过程。功能强大的源代码编辑器;可根据开发工具配置的设备数据库;用于创建和维护工程的工程管理器;集汇编、编译和链接过程于一体的编译工具;用于设置开发工具配置的对话框;真正集成高速CPU及片上外设模拟器的源码级调试器;高级GDI接口,可用于目标硬件的软件调试和Keil ULINK仿真器的连接;用于下载应用程序到Flash ROM中的Flash编程器;完善的开发工具手册、设备数据手册和用户向导。MDK集成开发环境 6.2.1工程工作区 Vision IDE的工程工作区由5部分组成,分别为Project(工程)页、Regs(寄存器)页、Books(书)页、Functions(函数)页、Tern
11、plates(模板)页 1.Project页 2.Books页 3.Functions页 4.Templates页 5.Regs页 6.2.2 工作区 6.2.3 输出窗口 6.2.4 菜单栏、工具栏和快捷键 Vision IDE集成开发环境的菜单栏可提供如下菜单功能:编辑操作、工程维护、开发工具配置、程序调试、外部工具控制、窗口选择和操作,以及在线帮助等。6.2.5 软件开发流程 6.3 程序的编辑 6.3.1 工程项目创建 6.3.2 源文件的创建 6.3.3 工程项目管理 6.3.4 工程基本配置6.3.1 工程项目创建 通常使用Vision创建一个新的工程需要以下几步:选择工具集、创建
12、工程并选择处理器、创建源文件及文件组、配置硬件选项、配置对应启动代码、最后编译链接生成HEX文件。1.选择工具集2.创建工程并选择处理器 6.3.2 源文件的创建 1.建立一个新的源文件 2.工程中文件的加入6.3.3 工程项目管理 1.设置当前活动工程 2.设置工程在不同地址运行6.3.4 工程基本配置 1.硬件选项配置 2.处理器启动代码配置 3.仿真器配置 4.下载工具配置 6.4程序的编译 6.4.1 基本概念 6.4.2 链接器的基本功能 6.4.3 分散加载描述文件 6.4.4 编译链接配置 6.4.5 编译链接工程6.4.1 基本概念 1文件 2.程序的段(section)3.C
13、和C+语言的运行时库1文件 文件类型说 明*.UVPROJVision 工程文件*.UVMPWVision 多项目工程文件*.S汇编源文件(一般应用为ARM源文件)*.CC源文件*.H C头文件(通过#include命令引用)*.MAP由链接器产生的列表文件(或映射文件)*.OBJ可重定位的目标文件*.ELF由链接器或装载器产生的ELF/DWARF文件。*.INI一般为调试器初始化文件2.程序的段(section)各种属性的输入段生成单一属性的输出段3.C和C+语言的运行时库 连接器所要用到的目标文件主要有两类:一类来自编译器的源程序;另一类来自C和C+运行时库。连接器在连接时会产生运行时库列
14、表,这个列表中的库文件主要来自:(1)输入文件列表中指定的库文件;(2)连接器在分析目标文件中找到目标文件所引用的库文件,通过给定的路径去搜寻和获得这些库文件。6.4.2 链接器的基本功能 ARM链接器armlink的基本用功能如下:指定映像结构、进行节布局、使用命令行选项创建简单映像。1.指定映像结构 映像文件是由域组成的。一个映像文件可以包含一个或多个域,如图6-42所示 加载视图和执行视图 2.节布局 链接器根据属性在区内排序所有输入节。具有相同属性的输入节在区内形成相邻块。每个输入节的基址由链接器定义的排列顺序确定,并且在包含它的输出节中正确对齐 6.4.3 分散加载描述文件 要构建映
15、像的存储器映射,链接器必须有:描述输入节如何分组成区的分组信息 描述映像区在存储器映射中的放置地址的放置信息。分散载入机制允许您为链接器指定映像存储器映射。分散载入提供对映像组件分组和布局的全面控制。它能够描述由载入时和执行时分散在存储器映射中的多个区组成的复杂映像映射。分散载入也可以用于简单映像,但它通常仅用于具有复杂存储器映射的映像。也就是说在载入和执行时多重映像在内存映射中是分散的。6.4.4 编译链接配置 1.选择编译器 2.配置编译器 3.汇编选项设置 4.链接选项设置 5.输出文件设置1.选择编译器2.配置编译器3.汇编选项设置4.链接选项设置5.输出文件设置6.4.5 编译链接工
16、程6.5程序的调试 6.5.1 调试模式 6.5.2 调试前的配置 6.5.3 调试器的使用 6.5.4 调试窗口和对话框 6.5.5 Flash 编程工具 6.5.6 调试命令和变量 6.5.7 调试函数简介 6.5.8 调试脚本的使用 6.5.9 调试信息和去除方法 6.5.10 映像文件转换器fromELF6.5.1 调试模式 Vision调试器提供了两种调试模式,可以从Project-Options for Target 对话框的Debug 页内选择操作模式,如图6-50 所示。6.5.2 调试前的配置 如果目标板已上电,并且与ULINK USB-JTAG仿真器连接上,在图6-51点击
17、“Settings”,将弹出如图6-52所示的对话框,正常则可读取目标板芯片ID 号。如果读不出ID 号,则需要检查ULINK USB-JTAG 仿真器与PC 或目标板的连接是否正确。图6-52 读取设备ID6.5.3 调试器的使用 1.启动调试模式 2应用程序的执行 6.5.4 调试窗口和对话框 1.断点对话框 2.反汇编窗口 3.寄存器窗口 4.内存窗口 5.观测窗口 6.代码统计对话框 7.执行剖析器 8.性能分析仪 9.串行窗口 10.工具箱 11.输出窗口调试命令对话框 12.符号窗口1.断点对话框2.反汇编窗口3.寄存器窗口4.内存窗口5.观测窗口6.代码统计对话框7.执行剖析器8
18、.性能分析仪9.串行窗口10.工具箱 工具箱中包含用户可配置的按钮,单击工具箱上的按钮可以执行相关的调试命令或调试函数。工具箱按钮可以在任何时间执行,甚至是运行测试程序时。在Output Window-Command 页中用DEFINE BUTTON 命令可定义工具箱按钮,语法格式:DEFINE BUTTON button_label,command 其中,button_label 是显示在工具箱按钮上的名字;command 是按下此按钮被时要执行的命令。11.输出窗口调试命令对话框 12.符号窗口6.5.5 Flash 编程工具 Vision提供了两种Flash 编程的方法:目标板驱动和外部
19、工具 1目标板驱动2外部工具6.5.6 调试命令和变量 Vision支持大量命令,可以通过 Output Window Command Line 键入命令。根据命令的功能,可以将这些命令分为如下几类:1.断点命令 3.存储器命令 4.程序命令 5.系统变量 6.外设备变量7.I/O 口 8.串行端口6.5.7 调试函数简介 Vision的另一个强大工具是调试函数。调试函数可用于:扩展Vision调试器的性能。产生外部中断。把内存内容记录成文件。周期性的更新模拟输入值。向片上串口输入连续数据。1建立函数 Vision 中有一个内建的函数编辑器,通过Debug Function Editor来打开
20、,如图6-73所示。2调用函数 调用函数时须在命令窗口中输入函数名和所需参数。例如,调用printf函数打印“Hello World”字符串,则须在命令窗口中输入如下内容:printf(Hello Worldn)3用户函数 用户函数是指通过Vision调试器建立的,为用户使用的函数。有两种途径可以进入用户函数:直接在函数编辑器中进入;用INCLUDE命令加载一个包含一个或多个用户函数的文件。用户函数的定义由关键字 FUNC 开始,格式如下:FUNC return_type fname(parameter_list)statements 4信号函数 当Vision模拟执行目标程序时,信号函数可以
21、在后台实现信号输入、脉冲输入等重复操作。信号函数可用于模拟和测试串行I/O、模拟I/O、端口通讯和其他一些重复发生的外部事件。信号函数的定义由关键字SIGNAL开始,格式如下:SIGNAL void fname(parameter_list)statements 6.5.8 调试脚本的使用 调试脚本除了可以初始化软硬件的调试环境以外,还可以初始化 Flash的烧写环境,甚至可以提供信号函数模拟片上外围设备。6.5.9 调试信息和去除方法 Realview MDK在默认配置下生成的AXF文件是带有调试信息,这些调试信息主要包含以下内容:可以将源代码包括注释夹在反汇编代码中,并且可以随时切换到源代
22、码中调试。可以对程序中的函数调用情况进行跟踪(用Watch&Call Stack Window查看)。对变量进行跟踪(用Watch&Call Stack Window查看)。6.5.10 映像文件转换器fromELF fromELF实用程序将ARM 链接器生成的可执行可链接格式(ELF)映像文件转换为适合于ROM 工具和直接载入存储器的其它格式。还可以使用fromELF显示或打印指定的文本格式的的各种信息,或生成包含该信息的文本文件。fromELF 输出以下映像格式:纯二进制格式、Motorola 32 S记录格式、Intel Hex-32 格式、面向字节(Verilog 存储器模型)十六进制。fromELF转换工具的语法格式如下:fromelf options input_file习 题 六 1使用MDK软件进行系统开发的步骤是什么?2添加文件时target有哪几个选项,其含义分别是什么?3段的属性有哪些,代码段的属性有何要求,为什么?4映象文件的入口有何要求?