手动编译
编译器问题,肯定是GNU的大名鼎鼎的GCC了,与此相关的什么连接器,汇编器也都包含在内了。
针对arm的GCC,当然就是arm-linux-gcc了,我所用的版本就是友善之臂光盘自带arm-linux-gcc 4.4.3。也有资料说也可以用arm-elf-gcc,这个与arm-linux-gcc带的c库不同,是uclibc,更精简更适合嵌入式。
手动编译需要我们自己写Makefile文件,涉及到编译过程的依赖等细节问题。在我们实际开发中,可以不通过这种方式,但是需要了解这个过程。
自动编译
1、ADS1.2
ADS是ARM公司的集成开发环境软件,ADS包括了四个模块分别是:SIMULATOR;C 编译器;实时调试器;应用函数库。
特点:
√C编译器效率极高;支持C以及C++,使工程师可以很方便的使用C语言进行开发;
√提供软件模拟仿真功能,使没有Emulators的学习者也能够熟悉ARM的指令系统;
(直接就可以在IDE环境下,通过运行自己编写的汇编或C语言,查看ARM系统中寄存器的情况)
√配合FFT-ICE使用,ADS1.2提供强大的实时调试跟踪功能,片内运行情况尽在掌握;
√ADS1.2需要硬件支持才能发挥强大功能,目前支持的硬件调试器有Multi-ICE以及兼容Multi-ICE的调试工具如FFT-ICE等;
√简易下载电缆不能支持ADS1.2。
2、ARM REALVIEW DEVELOPER SUITE
RealView Developer Suite工具是ARM公司是推出的新一代ARM集成开发工具,支持所有ARM系列核,并与众多第三方实时操作系统及工具商合作简化开发流程。
开发工具包含以下组件:
· 完全优化的ISO C/C++编译器;
· C++ 标准模板库;
· 强大的宏编译器;
· 支持代码和数据复杂存储器布局的连接器;
· 可选 GUI调试器;
· 基于命令行的符号调试器(armsd);
· 指令集仿真器;
· 生成无格式二进制工具、Intel 32位和Motorola 32位ROM映像代码的指令集模拟工具;
· 库创建工具.
3、IAR EWARM
Embedded Workbench for ARM 是IAR Systems公司为ARM微处理器开发的一个集成开发环境(下面简称IAR EWARM)。比较其他的ARM 开发环境,IAR EWARM 具有入门容易、使用方便和代码紧凑等特点。
IAR Systems 公司目前推出的最新版本是IAR Embedded Workbench for ARM version 4.30。EWARM 中包含一个全软件的模拟程序(simulator),用户不需要任何硬件支持就可以模拟各种ARM内核、外部设备甚至中断的软件运行环境。从中可以了解和评估IAR EWARM的功能和使用方法。
IAR EWARM的主要特点如下:
* 高度优化的IAR ARM C/C++ Compiler
* IAR ARM Assembler
* 一个通用的IAR XLINK Linker
4、KEIL ARM-MDKARM
Keil uVision调试器可以帮助用户准确地调试ARM器件的片内外围功能(I2C、CAN、UART、SPI、中断、I/O口、A/D转换器、D/A转换器和PWM模块等功能)。ULINK USB-JTAG转换器将PC机的USB端口与用户的目标硬件相连(通过JTAG或OCD),使用户可在目标硬件上调试代码。通过使用Keil uVision IDE/调试器和ULINK USB-JTAG转换器,用户可以很方便地编辑、下载和在实际的目标硬件上测试嵌入的程序。
主要特点:
* Project/Target/Group/File的重叠管理模式,并可逐级设置;
* 支持编辑状态的断点设置,并在仿真状态下有效;
* 高速ARM指令/外设模拟器;
* 软件模拟进程中允许建立外部输入信号;
* 支持C调试描述语言,可建立与实际硬件高度吻合的仿真平台;
* 支持简单/条件/逻辑表达式/存储区读写/地址范围等断点。
* 多种流行编译工具选择
* Keil高效率C编译器;
* ARM公司的ADS/RealView 编译器;
* GNU GCC 编译器。
ARM调试工具
目前,主流的调试工具可以分为软件调试工具和硬件调试工具,二者一般是结合使用。
软件调试
所谓软件调试,是指运行在PC端的程序,需要对ARM开发板进行调试时,需要打开这个上位机程序,然后通过J-Link等硬件进行程序的调试。
1、H-JTAG
H-JTAG是一个免费的ARM调试代理,程序没有任何限制
0) 支持ARM7/ARM9,支持自动检测和手动指定内核
1) 使用RDI接口,支持SDT,ADS,REALVIEW和IAR
2) 支持ADS1.2和SDT2.51和RREAL VIEW
3) 支持个硬件断点或者数量不限的软件断点
4) 支持ARM/THUMB模式
5) 支持LITTLEENDIAN & BIGENDIAN
6) 支持SEMIHOSTING
7) 支持WIGGLER SDTJTAG和自定义接口
2、FlashMagic
与其说是调试软件,不如说是下载工具,可以直接下载hex、bin文件到开发板上。
3、LPC2000系列ISP工具
可经由Philips官方网站下载。
4、Macraigor Systems Wiggler 调试工具
硬件调试
1、J-Link
J-Link是最著名的ARM开发调试工具,J-Link由SEGGER公司生产。提供对市面上几乎所有ARM内核芯片的支持。目前最新版本的J-Link产品为V8,支持JTAG和SWD模式。并且对主要的IDE环境如KEIL、IAR都有良好的支持。优点很多,因此也是首选的调试工具。
SEGGER的J-link版本众多,超过1百种。正版的通用型J-link价格贵,国内大部分在使用的是克隆版的J-link。克隆版目前价格低於¥70。因为克隆太多,SEGGER公司最新版本的驱动对克隆版本已经不再提供支持,这是一个问题。
主要特征:
1)支持所有ARM7和ARM9
2)下载速度高达600KB/sec
3)无需电源供电,可直接通过USB取电
4)JTAG速度是8MHz
5)自动辨速
6)监控所有的JTAG管脚信号,测量电压
7)20pin标准JTAG连接器
8)配带USB口和20pin插槽
9)支持Windows 2000 和Windows XP
10)带J-Link TCP/IP server,允许通过TCP/ IP 网络使用J-Link
2、ULINK
通用的ARM JTAG工具ULINK。
ULINK是ARM官方的调试工具,KEIL出品。ULINK也可以支持大多数的ARM芯片,对KEIL的支持非常好,是KEIL的默认调试工具。缺点是因为不支持IAR,影响了ULINK的推广。
ULINK官方提供电路图等资料,属於半开放的,可以自做。目前山寨版的价格比J-Link略高。也低於¥100。
3、OpenJTAG
OpenJTAG为开源的JTAG调试工具,功能强大,并且配合其他的开源软件工具可用於在Linux对ARM芯片进行调试,因此在一些社群中使用较多。因为采用FTDI+FPGA双芯片的架构,成本相对较高。要低於¥100,需要自己制作。
4、低成本的并口JTAG
并口JTAG的电路网上很多,目前因为电脑没有了并口的关系,处于淘汰阶段。但从成本上来说是最便宜的。较流行的一种名为wigger,要注意20PIN的接线,其中RTCK的接法。
ARM调试器汇总
通用的ARM调试主要为上述几种,其他的ARM调试工具还有RDI、早期采用并口的ARM调试工具目前因为PC不带并口已经淘汰。从实现的方式来说,使用FTDI的USB驱动芯片以及采用MCU来进行协议转换的是主要的两类。一般来说采用FTDI芯片的ARM调试工具在一般被用来支持某家公司芯片,而不能支持其他公司的ARM芯片,因此往往是不通用的。
H-JTAG和J-Link的区别
你调试arm,总要遵循arm的调试接口协议,jtag就是其中的一种吧。当仿真时,iar,keil,ads等等都有一个公共的调试接口,RDI就是其中的一咱,那么我们如何完成RDI-->arm调试协议(JTAG)的转换呢?如是乎就有两种做法:
- 在电脑上写一个服务程序,把keil,ads,iar中的RDI命令解析成相关的JTAG协议,然后通后一个物理转换接口(注意,这个转换只是电气物理层上的转换,就像RS232那样的作用)发送你的的目标板。 h-jtag就是这样的。 h-jtag的硬件就仅是一个物理电平的转换接口,所以很简单。而电脑中装的h-jtag软件就是前面说到的服务程序,负责协议转换的。
2.另一种做法,就是做一个板,用此板直接接收来自keil,ads,iar等软件的调试命令,由此板做rdi->jtag协议的转换。然后与目标板通信,这就是jlink的工作原理。
由上可以看出 h-jtag由于是软件作协议转换的,所以速度较慢,但是硬件简单。而第二种方法的jlink一般带一个强劲的CPU,作硬件协议转换,把以硬件复杂,但速度快。
JTAG,J-Link及OpenJTAG的比较
1. JTAG
JTAG(Joint Test Action Group) 是IEEE1149.1 (Standard Access Port and Boundary-Scan Architecture)标准.它最初用来以边界扫描的方式测试印刷电路板,当然它现在仍然这一方面广泛使用。
JTag的用途:
1. 边界扫描测试
2. 往Flash烧写程序和数据: 可以烧写Nor Falsh 和 Nand Falsh
3. 调试ARM裸机程序,不能调试嵌入式Linux程序
JTag的接口:
JTag接口并没有统一的标准。ARM处理器通常使用2*10针(部分使用2*7针)的JTag接口。
JTag连接Host的一端通常为并口。一般笔记本及台式机都很少有并口接口,而且市面上买到的USB转并口并不能用于JTag,USB转并口主要是给老式打印机使用的。这就使得我们很难使用JTag以及笔记本进行烧写。另外的一个缺点是并口JTag的速率非常低。
JTag的替代品:
Serial Wire Debug(SWD)。
2.JLink
JLink是Segger的产品,http://www.segger.com/jlink.html。它是USB接口转到JTag接口的适配器(adaptor),并不是真正意义上的仿真器。它采用标准的14针或者20针的Jtag接口与开发板相连。它支持多种CPU内核(ARM7, ARM9,Cortex etc.)。对ARM而言,它可能是最受欢迎的适配器。
JLink的功能:
1. 往Flash烧写程序:不支持烧写NAND Flash
2. 支持Windows, Linux以及Mac: 但是Linux及Mac仅支持JLink Commander, Command Line GdbServer, 以及shared library。
3. 支持多种调试协议: 如GDB, RDI 等
4. USB转串口功能
JLink的接口:
USB接口,JLink的价格也比较低(当然是山寨的)。
3.OpenJTAG
OpenJTag是一个开源项目(包含软件和硬件),采用GNU GPL license: http://www.openjtag.org/。同样它也是一个USB接口转JTag接口的适配器,同样不是真正意义上的仿真器。
OpenJTag的功能:
1. 往Flash烧写程序: 支持NOR Flash 和 NAND Flash
2. 支持Windows以及Linux
3. 能够用在支持GDB调试协议的工具上: 如IAR, Eclipse, 但不能用在支持RDI调试协议的工具上: 如ADS
4. USB转串口功能
OpenJtag的接口:
USB接口,但是他的价格要比JLink高一些。
代码存放位置
启动代码一般下载到NorFlash之中,其余的应用程序一般下载到NandFlash、SDRAM(内存)上,当然在实际运行的时候,NandFlash中的代码需要搬移到SDRAM上运行。
支持烧写到NorFlash之中的软件有:OpenJTAG、J-Link、JTAG
支持烧写到NandFalsh之中的软件有:OpenJTAG、JTAG
支持烧写到SDRAM之中的软件有: