当前位置:文档之家› 第5章开发环境与技术 嵌入式系统设计教程(第2版)

第5章开发环境与技术 嵌入式系统设计教程(第2版)

3
5.2 嵌入式软件开发工具
“工欲善其事,必先利其器” 嵌入式软件开发工具的集成度和可用性将直接关系 到嵌入式系统的开发效率。ARM的开发工具包括有编译 器、、汇编器、连接器、调试器、操作系统、函数库、 评估板、JTAG调试器、在线仿真器等。目前世界上约有 40多家公司提供不同类型的产品。 在Windows环境下,其代表产品是ARM公司的软件开 发工具包ADS和新推出的RVDS。 在Linux环境中,主要使用GNU开发工具。
8 MBSD RM (系统内存) 1 6 MB非线性 Flas h ( 硬盘)
JTAG 调试端口
T CP/IP协议 键盘输入 CA N BU S
ARM硬件开发平台
20
远程调试的特点

调试器和被调试程序运行在不同的机器上,调 试器运行在宿主机上,而被调试程序则运行在各种 专业调试板上(目标机)。 调试器通过某种通信方式与被调试进程建立联系, 如串口、并口、网络、JTAG或者专用的通信方式。

18
5.3 嵌入式系统调试技术
在嵌入式软件开发中,调试时采用的是在宿主 机和目标机之间进行的远程调试,调试器仍然运行 在宿主机的通用操作系统之上,但被调试的进程却 是运行在基于特定硬件平台的嵌入式操作系统中, 调试器和被调试进程通过串口或者网络进行通信。 调试器可以控制、访问被调试的进程,读取被调试 进程的当前状态,并能够改变被调试进程的运行状 态。 远程调试(Remote Debug)允许调试器以某种 方式控制目标机上被调试进程的运行方式,并具有 查看和修改目标机上内存单元、寄存器以及被调试 进程中的变量值等各种调试功能。
Target
开发平 台 宿主机开发环境
运 行 库
Host
— 应用软件 — 应用中间件 — 目标机OS
— — — —
编辑 编译 连接 调试
目标机硬件
宿主机 OS 宿主机硬件
交叉开发环境
9
嵌入式软件的交叉指宿主机与目标机通过物理线路连接 在一起,连接方式主要有三种:

15
嵌入式软件的生成
这一过程与普通计算机开发过程的本质区别是在于 交叉编译器和交叉连接器。 其中交叉编译器的主要功能是把在宿主机上编写的 高级语言程序编译成可以在目标机上运行的二进制 代码。常见的ARM软件开发环境有两种: ①ARM公司开发的集成开发环境ADS 1.2,该开发环境 使用了CodeWarrior公司的编译器,使用ADX进行本 地和远程调试。ADS有一系列应用程序及相关文档、 范例组成,主要包括命令行开发工具、GUI开发工 具、实用工具和支持软件。使用它们就可以编写和 调试自己的应用程序了。
17
(2)嵌入式软件的生成
以上两种开发环境的编译器都完全支持ARM指令 集,但伪指令集不同,代码风格不同,此外生成的 二进制代码的执行效率上也略有不同。 嵌入式软件的运行方式主要有两种:调试方式 和固化方式。在不同方式下,程序代码或数据在目 标机内存中的定位也有所不同。宿主机上提供一定 的工具或者手段对目标程序的运行方式和内存定位 进行选择和配臵,链接器再根据这些配臵信息将目 标模块和库文件中的模块链接成目标程序,因此称 这样的链接器为交叉链接器。
串行通信口 局部以太网口 OCD(On Chip Debug)方式,如JTAG、BDM等

物理连接是逻辑连接的基础。 逻辑连接指宿主机与目标机间按某种通信协议建 立起来的通信连接,目前逐步形成了一些通信协 议的标准。

10
2)嵌入式软件实现阶段的开发过程

嵌入式软件的开发进入实现阶段,可分为 三个步骤:生成、调试和固化运行。
26
ROM Monitor

在目标机上电或复位后首先执行的就是ROM Monitor,它对目标机进行一些必要的初始 化
初始化要求的外围设备,如最基本的串口和用 于内存刷新的系统计时器芯片; 初始化用于下载映像的内存系统; 初始化中断控制器和安装中断处理程序。

初始化自己的程序空间 等待宿主机端的命令
第5章 嵌入式系统开发环境与相关开发技术
5.1 概述 5.2 嵌入式系统的开发工具 5.3 嵌入式系统调试技术 5.4 嵌入式系统开发经验 5.5 嵌入式系统的Bootloader技术
1
5.1 概述
一个嵌入式系统的开发环境一般包括
有开发用的宿主机、嵌入式目标机、 调试器和软件开发工具,它们之间通 过串口、JTAG(并口)和网络接口等 进行通信。
14
ARM映像文件格式
映像文件是计算机上的一个可执行文件,在执 行之前被加载到计算机存储器中。 ARM集成开发环境中的各种原文件(汇编、C以 及C++程序)经过ARM编译器编译之后,生成ELF 格式的目标文件。这些目标文件和相应的C/C++ 运行时库经过ARM连接器连接后,生成.axf映像 文件。在开发板上调试运行后,使用fromelf工 具将映像文件中的调试信息和注释过滤掉生成 二进制的可加载文件.bin。可加载文件可写入 嵌入式设备的ROM中,再加电启动过程执行。

11
嵌入式系统开发流程框架图
开始新工程
PC机
基本开 发流程
监控结 果
串口助手 或超级终 端
Source Insight
编辑源 代码
ARM SDT Project Manager
编译链 接
仿真调 试
ARM SDT Debuger armJtag
程序下 载
ArmDvk
并口
Jtag 仿真器 内部逻辑 Jtag 开发流程
19
ARM实验平台与PC机连接关系框图
PC机
USB口 并口 RS232 网口
Jtag电缆
L CD显示
1 MB线性 Flas h (BIO S) 基于A RM架构的 3 2位 微处理器 Sams u n g S3 C4 4 B0 X
U SB接口 U SBN 9 6 0 3 两个RS-2 3 2 串行通信接口

16
②GNU交叉工具链
GNU开发工具包括C编译器GCC、C++编译器G++、 汇编器AS、连接器LD、二进制转换工具、调试工具 GDB和基于不同硬件平台的开发库。 其中,GCC几 乎在各种常见的UNIX平台上都可以见到,即使是 Windows32也有GCC的移植。 GDB支持远程调试模式, 同时还包含一个ARM指令集,能够在PC机上通过软 件方式仿真ARM程序的执行。以上这些工具顺序使 用,必须保持前后一致,才能产生最终需要的二进 制文件,所以称作为工具链。
USB
串口
RS232电 平转换
USB口
串口
硬件连接
ARM CPU 执行
PC机硬件平台
12
开发流程
13
(1)嵌入式软件生成阶段

三个过程 源代码程序 的编写 编译成各个 目标模块 链接成可供 下载调试或 固化的目标 程序
库文件
源程序
目标 模块
可供调试 /固化
编辑器
交叉编 译器
交叉链 接器

22
交叉调试
非交叉调试
调试器和被调试程序运行在不同的计 算机上
调试器和被调试程序运行在同一台计 算机上
可独立运行,无需操作系统支持
需要操作系统的支持
被调试程序的装载由调试器完成
被调试程序的装载由专门的Loader程 序完成
需要通过外部通信的方式来控制被调 试程序
不需要通过外部通信的方式来控制被 调试程序
4
开发工具的分类
根据不同的阶段,嵌入式软件开发工具可 以分为:

需求分析工具(Requirement Analysis Tools) 软件设计工具(Software Design Tools) 编码、调试工具(Coding Tools) 测试工具(Testing Tools) 配臵管理工具、维护工具等
可以直接调试不同指令集的程序
只能直接调试相同指令集的程序
23
5.3.1 ARM调试技术概述
交叉调试的方式执行即调试器控制被调 试程序的运行常通过如下五种方式: 指令集模拟器、ROM Monitor方式、 JTAG调试方式、实时在线仿真器ICE方式和 基于Angel的调试方式。
24
①指令集模拟器
指令集模拟器是用来在一台计算机上模拟另一台计 算机上目标程序运行过程的软件工具,也成为软仿 真器。内部有一个反映目标处理器硬件的数据结构。 它以时序状态机的方式工作,可以根据目标机指令 集定义执行目标指令。 应用场合:没有目标机开发板或者成本太高;被调 试的程序模块不需要在实际开发板上执行;对模块 代码先调试,以加快调试速度。 ARM体系结构计算机,目前经常使用的是ARMulator 指令集模拟器,它作为一个插件集成在ADS1.2集成 开发环境中。
5
开发工具的分类
嵌入式软件的开发可以分为以下几种 :
编写简单的板级测试软件,主要是辅助硬件的调试 开发基本的驱动程序 开发特定嵌入式操作系统的驱动程序(板级支持包) 开发嵌入式系统软件,如:嵌入式操作系统等 开发应用软件

6
嵌入式系统开发环境和开发过程

建立交叉开发环境是进行嵌入式软件开发 的第一步,目前常用的交叉开发环境主要有开放 和商业两种类型。开放的交叉开发环境的典型代 表是GNU工具链、目前已经能够支持x86、ARM、 MIPS、PowerPC等多种处理器。商业的交叉开发环 境 则 主 要 有 Metrowerks CodeWarrior 、 ARMSoftware Development Toolkit 、 Embedded Visual C++等。

25
② ROM Monitor方式
在这种调试方式下,调试环境由宿主机端的 调试器、目标机端的监控程序(ROM Monitor) 以及二者间的物理连接三部分构成。 ROM Monitor是运行在目标机上监控被调试程 序运行的一段程序,与宿主机端的调试器一起 完成对应用程序的调试。它要预先被固化到目 标机的ROM中,在目标机复位后首先被执行来完 成对目标机进行一些必要的初始化,然后等待 宿主机的命令。
相关主题