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