学习嵌入式系统的开发应用技术,应该是在基于某种嵌入式微处理器核的系统芯片应用平台上进行。小弟不才,今后的几贴将对如何构造ARM嵌入式开发环境等基本情况进行介绍。
(一)交叉开发环境
作为嵌入式系统应用的ARM处理器,其应用软件的开发属于跨平台开发,因此,需要一个交叉开发环境。交叉开发是指在一台通用计算机上进行软件的编辑编译,然后下载到嵌入式设备中进行运行调试的开发方式。用来开发的通用计算机可以是PC机、工作站等,运行通用的Windows或Unix操作系统。开发计算机一般称宿主机,嵌入式设备称目标机。在宿主机上编译好程序,下载到目标机上运行,交叉开发环境提供调试工具对目标机上运行的程序进行调试。
交叉开发环境一般由运行于宿主机上的交叉开发软件和宿主机到目标机的调试通道组成。运行于宿主机上的交叉开发软件最少必须包含编译调试模块,其编译器为交叉编译器。宿主机一般为基于x86体系的台式计算机,而编译后的代码必须在ARM体系结构的目标机上运行,这就是所谓的交叉编译。在宿主机上编译好目标代码后,通过宿主机到目标机的调试通道将代码下载到目标机,然后由运行于宿主机的调试软件控制代码在目标机上进行调试。为了方便调试开发,交叉开发软件一般为一个整合编辑、编译汇编链接、调试、工程管理及函数库等功能模块的集成开发环境IDE(Integrated Development Environment)。
组成ARM交叉开发环境的宿主机到目标机的调试通道一般有以下3种:
1)在线仿真器ICE
在线仿真器ICE(In Circuit Emulator)是一种模拟CPU 的设备。它使用仿真头完全取代目标板上的CPU,可以完全仿真ARM芯片的行为,提供更加深入的调试功能。在与宿主机连接的接口上,在线仿真器也是通过串行端口或并行端口、网口、USB口通信。在线仿真器为了能够全速仿真时钟速度很高的ARM处理器,通常必须采用及其复杂的设计和工艺,因而其价格比较昂贵。在线仿真器通常用在ARM的硬件开发中,在软件的开发中较少使用。其价格昂贵,也是在线仿真器难以普及的原因。
2)Angel 调试监控软件 Angel调试监控软件也称为驻留监控软件,是一组运行在目标板上的程序,可以接收宿主机上调试器发送的命令,执行诸如设置断点、单步执行目标程序、读/写存储器、查看或修改寄存器等操作。宿主机上的调试软件一般通过串行端口、以太网口、并行端口等通信端口与Angel调试监控软件进行通信。与基于JTAG的调试不同,Angel调试监控程序需要占用一定的系统资源,如内存、通信端口等。驻留监控软件是一种比较低廉有效的调试软件,不需要任何其他硬件调试和仿真设备。Angel调试监控程序的不便之处在于它对硬件设备的要求比较高,一般在硬件稳定之后才能进行应用软件的开发;同时它占用目标板上的一部分资源,如内存、通信端口等,而且不能对程序的全速运行进行完全仿真,在一些要求严格的情况下不是很适合。
3)基于JTAG的ICD
JTAG的ICD(In Circuit Debuger)也称为JTAG仿真器,是通过ARM芯片的JTAG边界扫描口进行调试的设备。JTAG仿真器通过ARM处理器的JTAG调试接口与目标机通信,通过并口或串口、网口、USB口与宿主机通信。JTAG仿真器价格比较便宜,连接比较方便。通过现有的JTAG边界扫描口与ARM CPU核通信,属于完全非插入式(即不使用片上资源)调试。它无需目标存储器,不占用目标系统的任何应用端口。通过JTAG方式可以完成:
@ 读/写CPU 的寄存器,访问控制ARM 处理器内核;
@ 读/写内存,访问系统中的存储器;
@ 访问ASIC 系统;
@ 访问I/O 系统;
@ 控制程序单步执行和实时执行;
@ 实时地设置基于指令地址值或数据值的断点;
基于JTAG仿真器的调试是目前ARM开发中采用最多的一种方式。