曲径通幽论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: beyes
打印 上一主题 下一主题

ARM 基础

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
11#
 楼主| 发表于 2009-9-8 01:00:43 | 只看该作者

RISC 体系结构

传统的 CISC ( Complex Instruction Set Computer ,复杂指令集计算机)结构有其固有的缺点,即随着计算机技术的发展而不断引入新的复杂的指令集,为支持这些新增的指令,计算机的体系结构会越来越复杂,然而,在 CISC 指令集的各种指令中,其使用频率却相差悬殊,大约有 20 %的指令会被反复使用,占整个程序代码的 80 %。而余下的 80 %的指令却不经常使用,在程序设计中只占 20 %,显然,这种结构是不太合理的。

基于以上的不合理性, 1979 年美国加州大学伯克利分校提出了 RISC ( Reduced Instruction Set Computer ,精简指令集计算机)的概念, RISC 并非只是简单地去减少指令,而是把着眼点放在了如何使计算机的结构更加简单合理地提高运算速度上。 RISC 结构优先选取使用频最高的简单指令,避免复杂指令;将指令长度固定,指令格式和寻地方式种类减少;以控制逻辑为主,不用或少用微码控制等措施来达到上述目的。

到目前为止, RISC 体系结构也还没有严格的定义,一般认为, RISC 体系结构应具有如下特点:

- 采用固定长度的指令格式,指令归整、简单、基本寻址方式有 2 ~ 3 种。

- 使用单周期指令,便于流水线操作执行。

- 大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载 / 存储指令可以访问存储器,以提高指令的执行效率。

除此以外, ARM 体系结构还采用了一些特别的技术,在保证高性能的前提下尽量缩小芯片的面积,并降低功耗:

- 所有的指令都可根据前面的执行结果决定是否被执行,从而提高指令的执行效率。

- 可用加载 / 存储指令批量传输数据,以提高数据的传输效率。

- 可在一条数据处理指令中同时完成逻辑处理和移位处理。

- 在循环处理中使用地址的自动增减来提高运行效率。

当然,和 CISC 架构相比较,尽管 RISC 架构有上述的优点,但决不能认为 RISC 架构就可以取代 CISC 架构,事实上, RISC 和 CISC 各有优势,而且界限并不那么明显。现代的 CPU 往往采用CISC 的外围,内部加入了 RISC 的特性,如超长指令集 CPU 就是融合了 RISC 和 CISC 的优势,成为未来的 CPU 发展方向之一。

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
12#
 楼主| 发表于 2009-9-8 01:01:10 | 只看该作者

ARM 的寄存器结构

ARM 处理器共有 37 个寄存器,被分为若干个组( BANK ),这些寄存器包括:

- 31 个通用寄存器,包括程序计数器( PC 指针),均为 32 位的寄存器。

- 6 个状态寄存器,用以标识 CPU 的工作状态及程序的运行状态,均为 32 位,目前只使用了其中的一部分。

同时, ARM 处理器又有 7 种不同的处理器模式,在每一种处理器模式下均有一组相应的寄存器与之对应。即在任意一种处理器模式下,可访问的寄存器包括 15 个通用寄存器( R0 ~ R14 )、一至二个状态寄存器和程序计数器。在所有的寄存器中,有些是在 7 种处理器模式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器。

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
13#
 楼主| 发表于 2009-9-8 01:01:32 | 只看该作者

ARM 的指令结构

ARM 微处理器的在较新的体系结构中支持两种指令集: ARM 指令集和 Thumb 指令集。其中,ARM 指令为 32 位的长度, Thumb 指令为 16 位长度。 Thumb 指令集为 ARM 指令集的功能子集,但与等价的 ARM 代码相比较,可节省 30 %~ 40 %以上的存储空间,同时具备 32 位代码的所有优点。

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
14#
 楼主| 发表于 2009-9-8 01:02:25 | 只看该作者

ARM的选型

鉴于 ARM 微处理器的众多优点,随着国内外嵌入式应用领域的逐步发展, ARM 微处理器必然会获得广泛的重视和应用。但是,由于 ARM微处理器有多达十几种的内核结构,几十个芯片生产厂家,以及千变万化的内部功能配置组合,给开发人员在选择方案时带来一定的困难,所以,对ARM芯片做一些对比研究是十分必要的。
以下从应用的角度出发,对在选择 ARM 微处理器时所应考虑的主要问题做一些简要的探讨。
1 ARM 芯片选择的一般原则
从应用的角度,对在选择 ARM 芯片时所应考虑的主要困素做一详细的说明。
1.1 ARM 芯核
如果希望使用 WinCE 或 Linux 等操作系统以减少软件开发时间,就需要选择 ARM720T 以上带有 MMU ( memorymanagement unit )功能的 ARM 芯片, ARM720T 、 Stron-gARM 、 ARM920T 、 ARM922T 、ARM946T 都带有 MMU 功能。而 ARM7TDMI 没有 MMU ,不支持 Windows CE 和大部分的 Linux ,但目前有uCLinux 等少数几种 Linux 不需要 MMU 的支持。
1.2 系统时钟控制器
系统时钟决定了 ARM 芯片的处理速度。 ARM7 的处理速度为0.9 MIPS/MHz ,常见的 ARM7 芯片系统主时钟为20MHz-133MHz , ARM9 的处理速度为1.1 MIPS/MHz ,常见的 ARM9 的系统主时钟为100 MHz-233MHz ,ARM10 最高可以达到700 MHz 。不同芯片对时钟的处理不同,有的芯片只有一个主时钟频率,这样的芯片可能不能同时顾及 UART和音频时钟准确性,如 Cirrus Logic 的 EP7312 等;有的芯片内部时钟控制器可以分别为 CPU 核和 USB 、 UART 、DSP 、音频等功能部件提供同频率的时钟,如 PHILIPS 公司 SAA7750 等芯片。
1.3 内部存储器容量
在不需要大容量存储器时,可以考虑选用有内置存储器的 ARM 芯片。见表1。
表1
                                                                                
芯片型号供应商FLASH容量ROM容量SRAM容量
AT91F40162
        AT91FR4081
        SAA7750
        PUC3030A
        HMS30C7202
        ML67Q4001
        LC67F500
ATMEL
        ATMEL
        Philips
        Micronas
        Hynix
        OKI
        Snayo
2M Bytes
        1M Bytes
        384K Bytes
        256K Bytes
        192K Bytes
        256K Bytes
        640K Bytes
256K bytes4K Bytes
        128K Bytes
        64K bytes
        56K bytes
        
        
        32K bytes
1.4 USB接口
许多ARM芯片内置有USB控制器,有些芯片甚至同时有USB HostUSB Slave控制器。见表2。
      
      表2 内置USB控制器的ARM芯片
                                                                                            
芯片型号ARM内核供应商USB SlaveUSB HostIIS接口
S3C2410
        S3C2400
        S5N8946
        L7205
        L7210
        EP9312
        Dragonball MX1
        SAA7750
        TMS320DSC2x
        PUC3030A
        AAEC-2000
        ML67100
        ML7051LA
        SA-1100
        LH7979531
        GMS320C7201
ARM920T
        ARM920T
        ARM7TDMI
        ARM720T
        ARM720T
        ARM920T
        ARM920T
        ARM720T
        ARM7TDMI
        ARM7TDMI
        ARM920T
        ARM7TDMI
        ARM7TDMI
        StrongARM
        ARM7TDMI
        ARM720T
Samsung
        Samsung
        Samsung
        Linkup
        linkup
        Cirrus Logic
        Motorola
        Philips
        TI
        Micronas
        Agilent
        OKI
        OKI
        Intel
        Sharp
        Hynix
1
        1
        1
        1
        1
        0
        1
        1
        1
        1
        1
        1
        1
        1
        1
        1
2
        2
        0
        1
        1
        3
        0
        0
        0
        0
        0
        0
        0
        0
        0
        0
1
        1
        0
        0
        0
        1
        1
        1
        0
        5
        0
        0
        0
        0
        0
        1
   1.5 GPIO数量

在某些芯片供应商提供的说明书中,往往申明的是最大可能的GPIO数量,但是有许多引脚是和地址线、数据线、串口线等引脚复用的。这样在系统设计时需要计算实际可以使用的GPIO数量。
1.6 中断控制器
ARM内核只提供快速中断(FIQ)和标准中断(IRQ)两个中断向量。但各个半导体厂家在设计芯片时加入了自己同的中断控制器,以便支持诸如串行口、外部中断、时钟断等硬件中断。外部中断控制是选择芯片必须考虑的重要因素,合理的外部中断设计可以很大程度的减少任务调度工作量。例如PHILIPS公司的SAA7750,所有GPIO都可以设置成FIQIRQ,并且可以选择升沿、下降沿、高电平、低电平四种中断方式。这使得红外线遥控接收、指轮盘和键盘等任务都可以作为背景程序运行。而Cirrus Logic公司的EP7312芯片,只有4个外部中断源,并且 每个中断源都只能是低电平或才高电平中断,样在用于接收红外线信号的场合时,就必须用查询方式,会浪费大量CPU时间。
1.7 IISIntegrate Interface of Sound)接口
即集成音频接口。如果设计者频应用产品,IIS总线接口是必需的。
1.8 nWAIT信号
外部总线速度控制信号。不是每个ARM芯片都提供这个信号引脚,利用这个信号与廉价的GAL芯片就可以实现与符合PCMCIA标准的WLAN卡和Bluetooth卡的接口,而不需要外加高成本的PCMCIA专用控制芯片。另外,当需要扩展外部DSP协处理器时,此信号也是必需的。
1.9 RTCReal Time Clock
很多ARM芯片都提供实时时钟功能,但方式不同。如Cirrus Logic公司的EP7312RTC只是一个32位计数器,需要通过软件计算出年月日时分秒;而SAA7750S3C2410等芯片的RTC直接提供年月日时分秒格式。
1.10 LCD控制器
有些ARM芯片内置LCD控制器,有的甚至内置64K彩色TFT LCD控制器。在设计PDA和手持式显示记录设备时,选用内置LCD控制器的ARM芯片如S1C2410较为适宜。
1.11 PWM输出
有些ARM芯片有2~8路PWM输出,可以用于电机控制或语音输出等场合。
1.12 ADCDAC
有些ARM芯片内置2~8通道8~12位通用ADC,可以用于电池检测、触摸屏和温度监测等。PHILIPSSAA7750更是内置了一个16位立体声音频ADCDAC,并且带耳机驱动。
1.13 扩展总线
大部分ARM芯片具有外部SDRAMSRAM扩展接口,不同的ARM芯片可以扩展的芯片数量即片选线数量不同,外部数据总线有8位、16位或32位。某些特殊应用ARM芯片如德国MicronasPUC3030A没有外部扩展功能。
1.14 UARTIrDA
几乎所有的ARM芯片都具有1~2个UART接口,可以用于和PC机通讯或用Angel进行调试。一般的ARM芯片通讯波特率为115,200bps,少数专为蓝牙技术应用设计的ARM芯片的UART通讯波特率可以达到920Kbps,如Linkup公司L7205
1.15 DSP协处理器,见表3。

      表3 ARM+DSP结构的ARM芯片

                                                                                
芯片型号供应商DSP coreDSP MIPS应  用
TMS320DSC2X
        Dragonball MX1
        SAA7750
        VWS22100
        STLC1502
        GMS30C3201
        AT75C220
        AT75C310
        AT75C320
        L7205
        L7210
        Quatro
TI
        Motorola
        Philips
        Philips
        ST
        Hynix
        ATMEL
        ATMEL
        ATMEL
        Linkup
        Linkup
        OAK
16bits C5000
        24bits 56000
        24bits EPIC
        16bits OAK
        D950
        16bits Piccolo
        16bits OAK
        16bits OAK
        16bits OAK
        16bits Piccolo
        16bits Piccolo
        16bits OAK
500
          
        73
        52
        
        
        40
        40x2
        60X2
        
        
Digital Camera
        CD-MP3
        CD-MP3
        GSM
        VOIP
        STB
        IA
        IA
        IA
        Wireless
        Wireless
        Digital Image
1.16 内置FPGA
有些ARM芯片内置有FPGA,适合于通讯等领域。见表4。
      
      表4 ARM+FPGA结构的ARM芯片

                                                                                
芯片型号供应商ARM芯核FPGA门数引脚数
EPXA1
        EPXA4
        EPXA10
        TA7S20系列
Altera
        Altera
        Altera
        Triscend
ARM922T
        ARM922T
        ARM922T
        ARM7TDMI
100K
        400K
        1000K
        多种
484
        672
        1020
        多种
1.17 时钟计数器和看门狗
一般ARM芯片都具有2~4个16位或32位时钟计数器和一个看门狗计数器。
1.18 电源管理功能
ARM芯片的耗电量与工作频率成正比,一般ARM芯片都有低功耗模式、睡眠模式和关闭模式。
1.19 DMA控制器
有些ARM芯片内部集成有DMADirect Memory Access),可以和硬盘等外部设备高速交换数据,同时减少数据交换时对CPU资源的占用。
另外,还可以选择的内部功能部件有:HDLCSDLCCD-ROM Decoder,Ethernet MAC,VGA controllerDC-DC。可以选择的内置接口有:IICSPDIFCANSPIPCIPCMCIA
最后需说明的是封装问题。ARM芯片现在主要的封装有QFPTQFPPQFPLQFPBGALBGA等形式,BGA封装具有芯片面积小的特点,可以减少PCB板的面积,但是需要专用的焊接设备,无法手工焊接。另外一般BGA封装的ARM芯片无法用双面板完成PCB布线,需要多层PCB板布线。
2 多芯核结构ARM芯片的选择
为了增强多任务处理能力、数学运算能力、多媒体以及网络处理能力,某些供应商提供的ARM芯片内置多个芯核,目前常见的ARM+DSPARM+FPGAARM+ARM等结构。
2.1 多ARM芯核
为了增强多任务处理能力和多媒体处理能力,某些ARM芯片内置多个ARM芯核。例如Portal player公司的PP5002内部集成了两个ARM7TDMI芯核,可以应用于便携式MP3播放器的编码器或解码器。从科胜讯公司(Conexant)分离出云的专门致力于高速通讯芯片设计生产的MinSpeed公司就在其多款高速通讯芯片中集成了2~4个ARM7TDMI内核。
2.2 ARM芯核+DSP芯核
为了增强数学运算功能和多媒体处理功能,许多供应商在其ARM芯片内增加了DSP协处理器。通常加入的DSP苡核有ARM公司的Piccolo DSP芯核、OAK公司16位定点DSP芯核、TITMS320C5000系列DSP芯核、Motorola的56K DSP芯核等。见表3。
2.3 ARM芯核+FPGA
为了提高系统硬件的在线升级能力,某些公司在ARM芯片内部集成了FPGA。见表4。
3 主要ARM芯片供应商
目前可以提供ARM芯片的著名欧美半导体公司有:英特尔、德洲仪器、三星半导体、摩托罗拉、飞利浦半导体、意法半导体、亿恒半导体、科胜讯、ADI公司、安捷伦、高通公司、AtmelIntersilAlcatelAlteraCirrus LogicLinkupParthusLSI LogicMicronas,Silicon WaveVirataPortalplayer inc.NetSiliconParthus。见表5。日本的许多著名半导体公司或东芝、三菱半导体、爱普生、富士通半导体、松下半导体等公司较早期都大力投入开了自主的32位CPU结构,但现在都转向购买ARM公司的芯核进行新产品设计。由于它们购买ARM版权较晚,现在还没有可销售的ARM芯片,而OKINECAKMOAKSharpSanyoSonyRohm等日本半导体公司目前都已经已经指生产了ARM芯片。韩国的现代半导体公司也生产提供ARM芯片。另外 ,国外也很多设备制造商采用ARM公司芯核设计自己的专用芯片,如美国的IBM、3COM和新加坡的创新科技等。我国台湾地区可以提供ARM芯片的公司台积电、台联电、华帮电子等。其它已购买ARM芯核,正在设计自主版板权专用芯片的大陆公司为中兴通讯等。
      
      表5 主要ARM芯片供应商及其代表性产品和主要应用领域

                                                                                            
供应商芯片1芯片2芯片3芯片4主要应用
Intel
        TI
        Samsung
        Motorola
        Philips
        Cirrus Logic
        Linkup
        ATMEL
        OKI
        Sharp
        Qualcomm
        ST
        Infineon
        Analog
        Hynix
        Micronas
        Conexant
        Agilent
        Portalpayer
        NEC
        NetSilicon
        LSI Logic
        Alcatel
        Altera
        Panasonic
        Silicon Wave
        OAK
        Rohm
        Parthus
        Intersil
        SiRF
        Sirius
        Sanyo
        Virata
        Agere
SA-110
        TMS320DSC21
        S3C44B0X
        Dragonball MX1
        SAA7750
        EP7209
        L7200
        AT91R40XXX
        ML67100
        LH75400/1
        MSP1000
        STLC1502
        PMB7754
        AD20MSP430
        GMS30C7201
        PUC3030A
        CN9414
        AAEC-2000
        PP5002
        UPD65977
        NET+15
        CBP3.0
        MTC20276
        EPXA1
        MN1A7T0200
        SiW1750
        Quatro
        BU6611AKU
        InfoSream
        ISL3856
        SiRF Star II
        CDMAx
        VOL101
        Helium
        T8300
SA-1100
        TMS320DSC24
        S3C2410
        
        VWS22100
        EP7212
        L7205
        AT75C310
        ML7051LA
        LH79520
        MSM3000
        STw2400
        
        
        HMS30C7202
        
        CX82100
        
        
        
        NET+40
        CBP4.0
        MTK20141
        EPXA4
        
        
        
        
        
        
        
        DIRAC
        
        Helium 200
        T8302
SA-1110
        TMS320DSC25
        S3C4510
        
        VCS94250
        EP7312
        L7210
        AT76C901
        ML67Q4000
        LH79531/2/3
        MSM5000
        
        
        
        HMS39C7092
        
        
        
        
        
        NET+50
        L64324
        MTK20285
        EPXA10
        
        
        
        
        
        
        
        
        
        Helium 210
IXP1200
        PMAP1510
        S5N8946
        
        VW26001
        EP9312
        
        AT76C502
        ML67Q2300
        LH7A400
        MSM6000
        
        
        
        
        
        
        
        
        
        
        
        MTC20277
        
        
        
        
        
        
        
        
        
        
        Lithium
Palm PC,Network
        Digital Camera
        ADSL,PDA
        BT,PDA
        MP3,GSM,3G,BT
        GP,MP3
        Wireless
        GP,Wireless
        GP,BT
        Portable handheld
        CDMA
        VOIP,BT
        BT
        GSM
        STB,GP
        GP,MP3
        Network,Modem
        IA
        MP3,PDA
        Configurable
        Ethernet
        CDMA
        ISDN,ADSL
        Configurable
        PDA,Phone
        BT
        Digital Image
        ISDN
        Wireless Internet
        802.11b,WLAN
        GPS
        3G CDMA
        CD-R HDC
        Communications
        Mobile phone
4 选择方案举例
表6列举的最佳方案仅供参考,由于SOC集成电路的发展非常迅速,今天的最佳方案到明天就可以不是最佳的了。因此任何时候在选择方案时,都应广泛搜寻一下主要的ARM芯片供应商,以找出最适合芯片。
      
      表6 最佳应用方案推荐

                                                                                                                                                                                                                                                                                                                                                                                                                        
应  用第一选择方案第二选择方案注  释
高档PDAS3C2410Dragon ball MX1
便携CDMP3播放器SAA7750
USB和CD-ROM解码器
FLASH MP3播放器SAA7750PUC3030A内置USB和FLASH
WLAN和BT应用产品L7205,L7210Dragon ball MX1高速串口和PCMCIA接口
Voice Over IPSTLC1502

数字式照相机TMS320DSC24TMS320DSC21内置高速图像处理DSP
便携式语音email 机AT75C320AT75C310内置双DSP,可以分别处理MODEM和语音
GSM手机VWS22100AD20MSP430专为GSM手机开发
ADSL ModemS5N8946MTK-20141
电视机顶盒GMS30C3201
VGA控制器
3G移动电话机MSM6000OMAP1510
10G光纤通信MinSpeed公司系列ARM芯片多ARM核+多DSP核

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
15#
 楼主| 发表于 2009-9-8 01:06:19 | 只看该作者

ARM 与 ads

ARM ADS 全称为 ARM Developer Suite 。是 ARM 公司推出的新一代 ARM 集成开发工具。现在 ADS 的最新版本是 1.2 ,它取代了早期的 ADS1.1 和 ADS1.0 。它除了可以安装在 Windows NT4 ,Windows 2000 , Windows 98 和 Windows 95 操作系统下,还支持 Windows XP 和 Windows Me 操作系统。

ADS 由命令行开发工具, ARM 时实库, GUI 开发环境 (Code Warrior 和 AXD) ,实用程序和支持软件组成。 有了这些部件,用户就可以为 ARM 系列的 RISC 处理器编写和调试自己的开发应用程序了。

下面就详细介绍一下 ADS 的各个组成部分。

命令行开发工具

这些工具完成将源代码编译,链接成可执行代码的功能。

ADS 提供下面的命令行开发工具:

armcc

armcc 是 ARM C 编译器。这个编译器通过了 Plum Hall C Validation Suite 为 ANSI C 的一致性测试。 armcc 用于将用 ANSI C 编写的程序编译成 32 位 ARM 指令代码。

因为 armcc 是我们最常用的编译器,所以对此作一个详细的介绍。

在命令控制台环境下,输入命令:

armcc – help

可以查看 armcc 的语法格式以及最常用的一些操作选项

armcc 最基本的用法为: armcc [options] file1 file2 ... filen

这里的 option 是编译器所需要的选项, fiel1,file2…filen 是相关的文件名。

这里简单介绍一些最常用的操作选项。

-c :表示只进行编译不链接文件;

-C : ( 注意:这是大写的 C) 禁止预编译器将注释行移走;

-D<symbol> :定义预处理宏,相当于在源程序开头使用了宏定义语句 #define symbol ,这里 symbol 默认为 1 ;

-E :仅仅是对 C 源代码进行预处理就停止;

-g<options> :指定是否在生成的目标文件中包含调试信息表;

-I<directory> :将 directory 所指的路径添加到 #include 的搜索路径列表中去; -J<directory> :用directory 所指的路径代替默认的对 #include 的搜索路径;

-o<file> :指定编译器最终生成的输出文件名。

-O0 :不优化;

-O1 :这是控制代码优化的编译选项,大写字母 O 后面跟的数字不同,表示的优化级别就不同, -O1 关闭了影响调试结果的优化功能;

-O2 :该优化级别提供了最大的优化功能;

-S :对源程序进行预处理和编译,自动生成汇编文件而不是目标文件;

-U<symbol> :取消预处理宏名,相当于在源文件开头,使用语句 #undef symbol;

-W<options> :关闭所有的或被选择的警告信息;

有关更详细的选项说明,读者可查看 ADS 软件的在线帮助文件。

armcpp

armcpp 是 ARM C++ 编译器。它将 ISO C++ 或 EC++ 编译成 32 位 ARM 指令代码。

tcc

tcc 是 Thumb C 编译器。该编译器通过了 Plum Hall C Validation Suite 为 ANSI 一致性的测试。

tcc 将 ANSI C 源代码编译成 16 位的 Thumb 指令代码。

tcpp

tcpp 是 Thumb C++ 编译器。 它将 ISO C++ 和 EC++ 源码编译成 16 位 Thumb 指令代码。

armasm

armasm 是 ARM 和 Thumb 的汇编器 . 它对用 ARM 汇编语言和 Thumb 汇编语言写的源代码进

行汇编。

armlink

armlink 是 ARM 连接器。该命令既可以将编译得到的一个或多个目标文件和相关的一个或多个库文件进行链接,生成一个可执行文件,也可以将多个目标文件部分链接成一个目标文件,以供进一步的链接。 ARM 链接器生成的是 ELF 格式的可执行映像文件。

armsd

armsd 是 ARM 和 Thumb 的符号调试器。它能够进行源码级的程序调试。用户可以在用 C 或汇编语言写的代码中进行单步调试,设置断点,查看变量值和内存单元的内容。

GUI 开发环境 (Code Warrior 和 AXD)

CodeWarrior 集成开发环境

CodeWarrior for ARM 是一套完整的集成开发工具,充分发挥了 ARM RISC 的优势 , 使产品开发人员能够很好的应用尖端的片上系统技术 . 该工具是专为基于 ARM RISC 的处理器而设计的 , 它可加速并简化嵌入式开发过程中的每一个环节,使得开发人员只需通过一个集成软件开发环境就能研制出 ARM 产品,在整个开发周期中 , 开发人员无需离开 CodeWarrior 开发环境 , 因此节省了在操做工具上花的时间 , 使得开发人员有更多的精力投入到代码编写上来, CodeWarrior 集成开发环境 (IDE) 为管理和开发项目提供了简单多样化的图形用户界面。用户可以使用 ADS 的 CodeWarrior IDE 为 ARM 和 Thumb 处理器开发用 C , C++ ,或 ARM 汇编语言的程序代码。通过提供下面的功能, CodeWarrior IDE 缩短了用户开发项目代码的周期。

1. 全面的项目管理功能;

2. 子函数的代码导航功能,使得用户迅速找到程序中的子函数。

可以在 CodeWarrior IDE 为 ARM 配置在 8.1.1 中介绍的各种命令工具,实现对工程代码的编译, 汇编和链接。

在 CodeWarrior IDE 中所涉及到的 target 有两种不同的语义。

目标系统 (Target system)

是特指代码要运行的环境,是基于 ARM 的硬件。比如,要为 ARM 开发板上编写要运行在它上面的程序,这个开发板就是目标系统。

生成目标 (Build target)

是指用于生成特定的目标文件的选项设置 ( 包括汇编选项,编译选项,链接选项以及链接后的处理选项 ) 和所用的文件的集合。

CodeWarrior IDE 能够让用户将源代码文件,库文件还有其他相关的文件以及配置设置等放在一个工程中。每个工程可以创建和管理生成目标设置的多个配置。例如,要编译一个包含调试信息的生成目标和一个基于 ARM7TDMI 的硬件优化生成目标,生成目标可以在同一个工程中共享文件,同时使用各自的设置。

CodeWarrior IDE 为用户提供下面的功能:

源代码编辑器,它集成在 CodeWarrior IDE 的浏览器中,能够根据语法格式,使用不同的颜色显示代码;

源代码浏览器,它保存了在源码中定义的所有符号,能够使用户在源码中快速方便的跳转;查找和替换功能,用户可以在多个文件中,利用字符串通配符,进行字符串的搜索和替换;

文件比较功能,可以使用户比较路径中的不同文本文件的内容。

ADS 的 CodeWarrior IDE 是基于 Metrowerks CodeWarrior IDE 4.2 版本的。它经过适当的裁剪以支持 ADS 工具链。

针对 ARM 的配置面板为用户提供了在 CodeWarrior IDE 集成环境下配置各种 ARM 开发工具的能力,这样用户可以不用在命令控制台下就能够使用在 8.1.1 和将在 8.1.4 中介绍的各种命令。

以 ARM 为目标平台的工程创建向导,可以使用户以此为基础,快速创建 ARM 和 Thumb 工程。

尽管大多数的 ARM 工具链已经集成在 CodeWarrior IDE ,但是仍有许多功能在该集成环境中没有实现,这些功能大多数是和调试相关的,因为 ARM 的调试器没有集成到 CodeWarrior IDE 中。

由于 ARM 调试器 (AXD) 没有集成在 CodeWarrior IDE 中,这就意味着,用户不能在 CodeWarrior IDE 中进行断点调试和查看变量。

对于熟悉 CodeWarrior IDE 的用户会发现,有许多的功能已经从 CodeWarrior IDE For ARM 中移走,比如快速应用程序开发模板等。

在 CodeWarrior IDE For ARM 中有很多的菜单或子菜单是不能使用的。下面介绍一下这些不能使用的选项。

1. View 菜单下不能使用的菜单选项有:

Processes , Expressions , Global Variable , Breakpoints , Registers 。

2. Project 菜单不能使用的菜单选项:

Precompile 子菜单。因为 ARM 编译器不支持预编译的头文件。

3. Debug 菜单

该菜单中没有一个子菜单是可以使用的。

4. Browser 菜单中不能使用的菜单选项:

New Property , New Method 和 New Event Set 。

5. Help menu 中不能用于 ADS 的菜单选项有:

CodeWarrior Help , Index , Search 和 Online Manuals 。

有关 CodeWarrior IDE 中一些常用菜单的使用,将在后面的举例中具体说明的,在此,不在赘述。

8.1.3.2 ADS 调试器

调试器本身是一个软件,用户通过这个软件使用 debug agent 可以对包含有调试信息的,正在运行的可执行代码进行比如变量的查看,断点的控制等调试操作。

ADS 中包含有 3 个调试器:

AXD(ARM eXtended Debugger) : ARM 扩展调试器;

armsd(ARM Symbolic Debugger) : ARM 符号调试器;

与老版本兼容的 Windows 或 Unix 下的 ARM 调试工具, ADW/ADU(Application Debugger

Windows/Unix) 。

下面对在调试映像文件中所涉及到的一些术语做一个简单的介绍。

Debug target

在软件开发的最初阶段,可能还没有具体的硬件设备。如果要测试所开发的软件是否达到了预

期的效果,这可以由软件仿真来完成。即使调试器和要测试的软件运行在同一台 PC 上,也可以把目标当作一个独立的硬件来看待。

当然,也可以搭建一个 PCB 板,这个板上可以包含一个或多个处理器,在这个板上可以运行和调试应用软件。

只有当通过硬件或者是软件仿真所得到的结果达到了预期的效果,才算是完成了应用程序的编写工作。

调试器能够发送以下指令:

1. 装载映像文件到目标内存;

2. 启动或停止程序的执行;

3. 显示内存,寄存器或变量的值;

4. 允许用户改变存储的变量值。

Debug agent

Debug agent 执行调试器发出的命令动作,比如:设置断点,从存储器中读数据,把数据写到存储器等。

Debug agent 既不是被调试的程序,也不是调试器。在 ARM 体系中,它有这几种方式:

Multi-ICE(Multi-processor in-circuit emulator) , ARMulator 和 Angel 。其中 Multi-ICE 是一个独立的产品,是 ARM 公司自己的 JTAG 在线仿真器,不是由 ADS 提供的。

AXD 可以在 Windows 和 UNIX 下,进行程序的调试。它为用 C , C++ ,和汇编语言编写的源代码提供了一个全面的 Windows 和 UNIX 环境。

8.1.4 实用程序

ADS 提供以下的实用工具来配合前面介绍的命令行开发工具的使用

fromELF

这是 ARM 映像文件转换工具。该命令将 ELF 格式的文件作为输入文件,将该格式转换为各种输出格式的文件,包括 plain binary(BIN 格式映像文件 ), Motorola 32-bit S-record format(Motorola 32位 S 格式映像文件 ), Intel Hex 32 format(Intel 32 位格式映像文件 ) ,和 Verilog-like hex format(Verilog 16 进制文件 ) 。 FromELF 命令也能够为输入映像文件产生文本信息,例如代码和数据长度。

armar

ARM 库函数生成器将一系列 ELF 格式的目标文件以库函数的形式集合在一起,用户可以把一个库传递给一个链接器以代替几个 ELF 文件。

Flash downloader

用于把二进制映像文件下载到 ARM 开发板上的 Flash 存储器的工具

8.1.5 支持的软件

ADS 为用户提供下面的软件,使用户可以在软件仿真的环境下或者在基于 ARM 的硬件环境调试用户应用程序。

ARMulator

这是一个 ARM 指令集仿真器,集成在 ARM 的调试器 AXD 中,它提供对 ARM 处理器的指令集的仿真,为 ARM 和 Thumb 提供精确的模拟。用户可以在硬件尚未做好的情况下,开发程序代码。

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
16#
 楼主| 发表于 2009-9-8 01:06:46 | 只看该作者

ARM与Cygyin

为了在 Windows 下开发嵌入式操作系统应用程序,可以在 Windows 环境下装上 Cygwin 软件。

Cygwin 是一个在 Windows 平台上运行的 Unix 模拟环境,是 Cygnus Solutions 公司开发的自由软件。它对于学习掌握 Unix/Linux 操作环境,或者进行某些特殊的开发工作,尤其是使用 GNU 工具集在Windows 上进行嵌入式系统开发,非常有用。

Cygnus 当初首先把 gcc , gdb 等开发工具进行了改进,使它们能够生成并解释 win32 的目标文件。然后,把这些工具移植到 windows 平台上去。一种方案是基于 win32 API 对这些工具的源代码进行大幅修改,这样做显然需要大量工作。因此, Cygnus 采取了一种不同的方法 —— 他们写了一个共享库 ( 就是 cygwin1.dll) ,把 win32 API 中没有的 Unix 风格的调用 ( 如 fork,spawn,signals,select,sockets等 ) 封装在里面,也就是说,他们基于 win32 API 写了一个 Unix 系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用 Unix 主机上的交叉编译器来生成可以在Windows 平台上运行的工具集。以这些移植到 Windows 平台上的开发工具为基础, Cygnus 又逐步把其他的工具 ( 几乎不需要对源代码进行修改,只需要修改他们的配置脚本 ) 软件移植到 Windows 上来。这样,在 Windows 平台上运行 bash 和开发工具、用户工具,感觉好像在 Unix 上工作。 关于Cygwin 实现的更详细描述,请参考 http://cygwin.com/cygwin-ug-net/cygwin-ug-net.html

Cygwin 软件的安装

要得到 Cygwin 的最新安装版本,请到 Cygwin 的主页 http://cygwin.com/ 上下载最新的 Cygwin , 在该页面的右上角有 '' Install Cygwin Now '' ,点击此处,就会先下载一个叫做 setup.exe 的 GUI 安装程序,用它能下载一个完整的 Cygwin 。

在安装的过程中,会让用户选择安装哪些包,这些包主要是确定开发环境,编译工具等,如果不能确定具体需要哪些包的话,而硬盘空间足够的情况下,就选择全部安装。在出现的对话框的 ''All''的右边点击 ''Default'' ,直到变成 ''Install'' ,如下图 7.3 所示:

Cygwin 的安装过程时间比较长。当出现创建图标的画面点击 “ 完成 ” 按钮之后,屏幕会有几秒钟的闪动,这是在执行 Cygwin 安装后的脚本配置。

自动配置结束后,出现 Cygwin 成功安装结束的提示框。桌面上会出现 Cygwin 的图标。

3. 在 Cygwin 下生成交叉编译器

在自己生成交叉编译器之前,首先对 cygwin 进行一些设置。假设 Cygwin 安装在 d 目录下,在打开 Cygwin 窗口之前,进入到 D:\\cygwin 目录,在这个目录下,有一个文件名为 cygwin.bat 的批处理文件,编辑该文件,在第一行后加入 set CYGWIN=title ntea ,这是因为 cygwin 的启动批处理文件需要启动 Unix 文件系统模拟。修改完毕后,保存后退出。双击桌面上的 Cygwin 图标,打开后默认用户为在 Windows 中登录的用户名 ( 这里所使用的操作系统是 windows 2000 professsional) ,在如图7.5 所示的界面中,在根目录 ( 即 D:\\cygwin) 下键入:

cd bin

mv sh.exe sh-original.exe

ln – s bash.exe sh.exe

做上述几步的原因是因为大多数 linux 系统将 sh 符号链接到 bash , Cygwin 上的 sh.exe 和 bash.exe是不同的,因此必须用 bash 代替 sh 。

从网站 http://www.uclinux.org/pub/uClinux/arm-elf-tools/tools-20030314/ 上下载生成工具链的各种源码 ,根据脚本文件 build-uclinux-tools.sh 建立可在 windows 下编译用户应用程序的交叉编译器,生成的交叉编译器最终被打包为 arm-elf-tools-cygwin-yyyymmdd.tar.gz 的文件,其中 yyyy 为生成交叉编译器的年, mm 为生成交叉编译器的月份, dd 为日期。

这里,希望读者注意的是在生成交叉编译器的过程中,可能会遇到多次错误,读者应该根据给出的出错信息,进行相应文件的修改。由于习惯上的原因, linux 下的压缩文件一般都是以 .tar.gz 或者 .tgz 结尾的,虽然用 windows 下的解压软件比如 winzip 或者 winrar 可以解压这些文件,但是推荐读者不要用这些软件在 windows 下解压,因为这样可能会造成某些信息的丢失。

本书生成的交叉编译器名为 arm-elf-tools-cygwin-20030502.tar.gz 。

在 Cygwin 环境下建立交叉编译器

在根目录下键入:

tar xvzf arm-elf-tools-cygwin-20030502.tar.gz

进行交叉编译器的解压,解压完毕后在 /usr/local/bin/ 目录下可以看到各种 GNU 工具。有了交叉编译器后,熟悉 Windows 的读者就可以在 Windows 下编译在 uClinux 上运行的应用程序了。

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
17#
 楼主| 发表于 2009-9-8 01:07:18 | 只看该作者

ARM RealView

ARM RealView工具的嵌入式调试

随着嵌入式应用的深入和发展,特别是在数字通信领域和网络领域中的应用,对处理器的性能提出了更高的要求。为适应这种情况,现在已经出现非常多的多内核结构处理器,例如两个或多个ARM,或者再加入DSP。同时,各种用户对不同应用的需求,使得软件的复杂度极大提高。为了提高应用软件的运行效率和性能,操作系统的使用已经成为必然。再者,为了适应不同的用户需求,ARM芯片加入了很多客户需求的复杂外设。

为了满足客户对复杂ARM SoC调试的挑战,实现快速、高效的软件开发,ARM公司开发了RealView系列ARM开发工具,可以实现:

◆ SoC的技术开发调试

◆ 基于SoC的产品开发调试

◆ 应用和软件的开发调试

ARM RealView系列开发工具主要包括:

◆ 编译器、调试器:RVDS(RealView Developer Suite)

◆ JTAG仿真器:RVI(RealView ICE);Multi-ICE

◆ 硬件跟踪器:RVT(RealView Trace);Multi-Trace

指令集模拟器

指令集模拟器RealView ARMulator ISS是RVDS软件中的一部分,ARMulator ISS可以提供对ARM/Thumb指令集的精确仿真,支持包括从ARM7到ARM11的内核处理器,可以使开发人员能够在硬件完成之前就开始软件的开发和验证调试。

ARMulator ISS包含了一系列模拟基于ARM核的软件模型,最基本的模型是ARM处理器内核模型和存储器模型,另外也可以定义其他的模型,例如外设、协处理器等。

ARMulator ISS不仅可以进行程序的逻辑和功能验证,同时可以进行性能分析,例如ARMulator可以通过执行应用程序来计算 程序的运行周期,可以产生 Sequential周期、Non-sequential周期、Coprocessor周期等信息,通过这些数据来分析程序内存的使用效率(图1)。

对于ARMulator,我们同时也可以定义处理器的类型、处理器内核的时钟频率以及与处理器连接的内存信息,例如地址、宽度、速度等,来得到程序的运行时间统计等。

JTAG仿真器调试方案

现在所有的ARM芯片都支持JTAG调试。JTAG是IEEE的一个标准,即IEEE1149.1。通过这个标准,可以对具有JTAG接口芯片的硬件电路进行边界扫描和故障检测。JTAG仿真器是通过ARM芯片的JTAG口进行设备调试的。JTAG仿真器连接比较方便,不占用片上的资源,仿真非常接近于目标硬件系统。使用主机调试器配合JTAG仿真器进行开发是目前使用最多的一种ARM调试方式。

ARM 内核有个EmbeddedICE逻辑模块,用于采集CPU的总线信号,对于EmbeddedICE和CPU执行单元的通信则是通过扫描链进行的,而这些扫描链则是受测试访问端口TAP(Test Access Port)控制器控制的,并通过ARM芯片的JTAG接口引出,然后通过JTAG仿真器(RVI或Multi-ICE),便可以和主机平台上的调试器(RVD)进行通讯,从而实现对ARM硬件平台的调试。

对于有的ARM应用程序,当用户使用JTAG仿真器对程序 进行单步调试时可能一切都是好的,但当全速运行时则会出现问题。对于这种问题,则可以通过ARM的硬件跟踪器(RVT或Multi-Trace)来查找问题。

硬件跟踪器是通过ARM芯片内部的嵌入式跟踪宏单元ETM(Embedded Trace Macrocell)来实现对程序跟踪的,可以对执行代码进行无干扰的高速实时跟踪,捕获出所有的程序执行过程,帮助工程师迅速地定位疑难故障,从而缩短开发周期,降低开发成本,请参看图2。

RealView调试器 —— RVD

RVD 是ARM系统调试方案的核心部分,该调试器可以为不同用户提供最为合适的调试功效。RealView调试器包括:高度集成的项目管理和编译控制工具的 IDE;功能强大的调试器,使开发者可以快速方便地实现对软件的调试。RVD调试器不仅包含基本的调试功能,例如汇编语言和C/C++的原代码调试;单步、全速运行;断点、观察点和跟踪点设置;寄存器、内存和堆栈察看等;还可以实现很多高级的功能,例如多内核调试支持(Multi-Core Debug);操作系统明了化(OS Awareness);DSP明了化(DSP Awareness);扩展的目标可见性(Extended Visibility)。下面就分别对这几种功能做一个简单说明:

◆ 多内核调试支持

随着客户应用需求的增加,很多应用已经不能由单个ARM内核来实现。针对这种需求,ARM对RVD的功能进行了扩展,可以支持多个内核,例如:多个ARM内核;ARM内核+DSP内核;多个ARM内核+多个DSP内核。调试工具通过JTAG扫描链来自动检测硬件系统的内核,用户可以根据需要来显示多个连接的内核,同时可以为每个内核开一个窗口,因此可以使用多个窗口显示多个连接的内核。用户可以通过配置来对各个被调试的内核进行异步控制,例如单独控制每个内核;也可以通过配置来对各个被调试的内核进行同步控制,例如同时启动、停止和步进等。

◆ 操作系统明了化

可以使用户在更高的抽象层次上调试整个系统,而不用专注于每一条代码,这样可以隐藏不必要的细节信息,从而关注于整个应用的开发,提高调试的效率,缩短开发的时间。现在RVD可以支持大部分操作系统的OS Awareness,通过OS Awareness可对系统的资源进行观察,例如进程(Thread)、信号量(Semaphores)、邮箱(Mailboxes)、队列(Queues)等,如图3。RVD对OS Awareness的支持主要有两种:停止系统调试HSD(Halted System Debug)和运行系统调试RSD(Running System Debug)。HSD调试时需要暂停整个系统,这是可以观察和分析整个系统的一些资源情况。RSD可以在系统运行的情况下对用户指定的线程进行调试,例如设置断点、中断、改变线程优先级等。RSD调试非常适合于一些无法停止运行的系统,例如硬盘等。

◆ DSP明了化

可以使用户在不需要DSP调试工具的情况下对系统的DSP进行调试,与ARM的调试有统一的调试环境,使用户更加方便地熟悉调试环境和节省开发成本。该调试增加了DSP 开发的透明度,使用户可以方便地实现DSP软件的开发。

◆ 扩展的目标可见性

通过这个功能,用户不仅仅可以看到ARM和DSP的内核寄存器等,而且可以定义一些自己关心的内存映射寄存器和外围设备寄存器等,并可定义有意义的显示格式,例如寄存器名字、位定义和设置值等,在调试过程中还可以方便地改变该数值用户可以方便地通过配置BCD(Board/Chip Definition)文件来印证对扩展目标的可见性。

RealView JTAG仿真器

ARM的RealView JTAG仿真器是高性能的开发工具,通过该仿真器并配合RealView调试器,便可以实现对ARM硬件平台的仿真调试。

RVI(RealView ICE)支持本地连接和网络连接,可以通过USB1.1/2.0和主机相连,也可以通过Ethernet 10/100baseT和主机相连。代码通过JTAG下载速度可以达600KB/s,并且新的差分信号线可以满足高达50MHz的JTAG时钟频率和更长的连接距离。RVI仿真器支持所有ARM7系列、ARM9系列、ARM9E系列、ARM10系列和ARM11系列芯片的调试仿真。同时,用户可以通过在线固件(Firmware)升级,来支持以后出的ARM新内核。RVI是一个可调整的、模块化的结构,用户可以根据需要在其上面叠加硬件跟踪器 RVT(RealView Trace)来实现对ARM内核的跟踪和分析,如图4。

RealView系列为先进调试解决方案

嵌入式系统变得越来越复杂,从单内核系统到越来越多的多内核系统,从单任务软件到使用操作系统的多任务软件,系统的调试也变得越来越困难。如何选择恰当的调试开发工具,对整个产品的开发起着至关重要的作用。ARM完整的RealView系列开发调试工具对各种系统提供了整体的解决方案。ARM的 RealView调试器(RVD)结合JTAG仿真器RealView ICE与硬件跟踪器RealView Trace,提供了高效、快速的调试、跟踪解决方案,成为基于ARM嵌入式系统中最为先进的调试方案。

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
18#
 楼主| 发表于 2009-9-8 01:07:45 | 只看该作者

ARM与JTAG

JTAG(Joint Test Action Group ,联合测试行动小组 ) 是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试, JTAG 技术是一种嵌入式调试技术,它在芯片内部封装了专门的测试电路 TAP ( Test Access Port ,测试访问口),通过专用的 JTAG 测试工具对内部节点进行测试。

目前大多数比较复杂的器件都支持 JTAG 协议,如 ARM 、 DSP 、 FPGA 器件等。标准的 JTAG 接口是 4 线: TMS 、 TCK 、 TDI 、 TDO ,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。

JTAG 测试允许多个器件通过 JTAG 接口串联在一起,形成一个 JTAG 链,能实现对各个器件分别测试。 JTAG 接口还常用于实现 ISP ( In-System Programmable 在系统编程)功能,如对 FLASH器件进行编程等。

通过 JTAG 接口,可对芯片内部的所有部件进行访问,因而是开发调试嵌入式系统的一种简洁高效的手段。目前 JTAG 接口的连接有两种标准,即 14 针接口和 20 针接口,其定义分别如下所示。

14 针JTAG 接口定义:

14 针 JTAG 接口定义引 脚 名 称 描 述

1 、 13               VCC 接电源

2 、 4 、 6 、 8 、 10 、 14    GND 接地

3  nTRST             测试系统复位信号

5  TDI              测试数据串行输入

7  TMS              测试模式选择

9  TCK              测试时钟

11 TDO              测试数据串行输出

12 NC               未连接

20 针 JTAG 接口定义引 脚 名 称 描 述

1 VTref             目标板参考电压,接电源

2 VCC               接电源

3 nTRST              测试系统复位信号

4、6、8、10、12、14、16、18、20  GND 接地

5 TDI               测试数据串行输入

7 TMS               测试模式选择

9 TCK               测试时钟

11 RTCK              测试时钟返回信号

13 TDO               测试数据串行输出

15 nRESET             目标系统复位信号

17 、 19 NC            未连接

下面以S3C4510B开发板为例说明JTAG接口:

在保证电源电路、晶振电路和复位电路正常工作的前提下,可通过JTAG 接口调试S3C4510B,在系统上电前,首先应检测JTAG 接口的 TMS 、 TCK 、 TDI 、 TDO 信号是否已与 S3C4510B 的对应引脚相连,其次应检测 S3C4510B 的 nEWAIT 引脚( Pin71 )是否已上拉, ExtMREQ 引脚( Pin108 )是否已下拉,对这两只引脚的处理应注意,作者遇到多起S3C4510B 不能正常工作或无法与JTAG 接口通信,均与没有正确处理这两只引脚有关。

给系统上电后,可通过示波器查看 S3C4510B 对应引脚的输出波形,判断是否已正常工作,若S3C4510B 已正常工作,在使能片内 PLL 电路的情况下, SDCLK/MCLKO 引脚( Pin77 )应输出频率为 50MHz 的波形,同时, MDC 引脚( Pin50 )和其他一些引脚也应有波形输出。

在保证 S3C4510B 已正常工作的情况下,可使用 ADS 或 SDT 通过 JTAG 接口对片内的部件进行访问和控制。

在此,首先通过对片内控制通用 I/O 口的特殊功能寄存器的操作,来点亮连接在 P3 ~ P0 口上的4 只 LED ,用以验证 ADS 或 SDT 调试环境是否已正确设置,以及与 JTAG 接口的连接是否正常。

ADS 和 SDT 均为 ARM 公司为方便用户在 ARM 芯片上进行应用开发而推出的一整套集成开发工具,其中, ADS 为 SDT 的升级版本。该系统的调试以 ADS 为例,同时也适合于 SDT 开发环境。

连接好硬件后,打开 AXD Debugger ,建立与目标板(待调试的系统板)的连接, AXDDebugger 有软件仿真方式和带目标系统的调试方式,此时应工作在带目标系统的调试方式。

选择菜单 System Views → Command Line Interface 功能,该选项为 AXD Debugger 的一个命令行窗口,可在该窗口内输入各种调试命令,使用非常方便。在命令行窗口输入:

> setmem 0x3FF5000, 0xFFFF, 32

> setmem 0x3FF5008, 0xFFFF, 32

setmem 命令用于对特定的地址设置特定的值,待设定的值可以是 8 位、 16 位或 32 位,在此,对通用 I/O 口的模式寄存器和数据寄存器设置相应的值,点亮 LED 。

S3C4510B 在复位后,特殊功能寄存器的基地址为 0x3FF0000, 由表 5 -2-3 可知,I/O 口的模式寄存器偏移地址为0x5000,因此, I/O 口的模式寄存器的物理地址为 0x3FF5000 ,设定该寄存器的值为 0xFFFF ,将 I/O 口置为输出方式。 I/O 口的数据寄存器的物理地址为 0x3FF5008 ,设定该寄存器的值为 0xFFFF ,将 I/O 口的输出置为高电平。

在执行完以上两条命令后,连接在通用 I/O 口的 4 只 LED 应被点亮,表示调试系统的软、硬件连接完好,可进行下一步的调试工作,否则,应重新检查调试系统。

用户若使用 SDT 作为调试工具,操作方法类似。 连接好硬件后,打开 ARM Debugger for Windows ,建立与目标板(待调试的系统板)的连接,选择菜单 View → Command 功能,即可显示命令行窗口,在命令行窗口输入:

Debug:let 0x3FF5000 = 0xFFFF

Debug:let 0x3FF5008 = 0xFFFF

执行完以上两条命令后,连接在通用 I/O 口的 4 只 LED 应被点亮。

关于通用 I/O 口更具体的工作原理和使用方法,可参考S3C4510B 用户手册。

用户系统若能正常完成上述操作并成功点亮连接在P3~P0 口上的LED 显示器,则表明S3C4510B已在正常工作,且调试环境也已正确建立,以后的调试工作就相对简单。笔者曾遇到多个用户系统因为不能完成这步工作,使开发者失去信心而最终放弃。

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
19#
 楼主| 发表于 2009-9-8 01:08:18 | 只看该作者

ARM与uClinux

在 PC 机上开发应用程序的用户都会有这样的感觉, PC 机有完善的操作系统并提供应用程序接口( API ),开发好的应用程序可以直接在操作系统上运行。虽然嵌入式系统的应用程序完全可以在裸板上运行,但为了使系统具有任务管理、定时器管理、存储器管理、资源管理、事件管理、系统管理、消息管理、队列管理和中断处理的能力,提供多任务处理,更好的分配系统资源的功能,用户就需要针对自己的硬件平台和实际应用选择适当的嵌入式操作系统( Embedded Operating System ,以下简称 EOS )。

uClinux 是一个完全符合 GNU/GPL 公约的操作系统,完全开放代码,现在由 Lineo 公司支持维护。 uClinux 的发音是 “ you-see-linux ” , 它的名字来自于希腊字母 “ mu ” 和英文大写字母 “ C ” 的结合。 “ mu ” 代表 “ 微小 ” 之意,字母 “ C ” 代表 “ 控制器 ” ,所以从字面上就可以看出它的含义,即 “ 微控制领域中的 Linux 系统 ” 。

为了降低硬件成本及运行功耗,有一类 CPU 在设计中取消了内存管理单元( Memory Management Unit ,以下简称 MMU )功能模块。最初,运行于这类没有 MMU 的 CPU 之上的都是一些很简单的单任务操作系统,或者更简单的控制程序,甚至根本就没有操作系统而直接运行应用程序。在这种情况下,系统无法运行复杂的应用程序,或者效率很低,而且,所有的应用程序需要重写,并要求程序员十分了解硬件特性。这些都阻碍了应用于这类 CPU 之上的嵌入式产品开发的速度。

然而,随着 uClinux 的诞生,这一切都改变了。

uClinux 从 Linux 2.0/2.4 内核派生而来,沿袭了主流 Linux 的绝大部分特性。它是专门针对没有MMU 的 CPU ,并且为嵌入式系统做了许多小型化的工作。适用于没有虚拟内存或内存管理单元( MMU )的处理器,例如 ARM7TDMI 。它通常用于具有很少内存或 Flash 的嵌入式系统。 uClinux是为了支持没有 MMU 的处理器而对标准 Linux 作出的修正。它保留了操作系统的所有特性,为硬件平台更好的运行各种程序提供了保证。在 GNU 通用公共许可证( GNU GPL )的保证下,运行uClinux 操作系统的用户可以使用几乎所有的 Linux API 函数,不会因为没有 MMU 而受到影响。由于 uClinux 在标准的 Linux 基础上进行了适当的裁剪和优化, 形成了一个高度优化的、代码紧凑的嵌入式 Linux ,虽然它的体积很小, uClinux 仍然保留了 Linux 的大多数的优点:稳定、良好的移植性、优秀的网络功能、完备的对各种文件系统的支持、以及标准丰富的 API 等。图 7.1 为 uClinux 的基本架构。

Boot Loader :负责 Linux 内核的启动,它用于初始化系统资源,包括 SDRAM 。这部分代码用于建立 Linux 内核运行环境和从 Flash 中装载初始化 ramdisk 。

内核初始化: Linux 内核的入口点是 start_kernel ()函数。它初始化内核的其他部分,包括捕获, IRQ 通道,调度,设备驱动,标定延迟循环,最重要的是能够 fork “ init ” 进程,以启动整个多任务环境。

系统调用函数 / 捕获函数:在执行完 “ init ” 程序后,内核对程序流不再有直接的控制权,此后,它的作用仅仅是处理异步事件 ( 例如硬件中断 ) 和为系统调用提供进程。

设备驱动:设备驱动占据了 Linux 内核很大部分。同其他操作系统一样,设备驱动为它们所控制的硬件设备和操作系统提供接口。

文件系统: Linux 最重要的特性之一就是对多种文件系统的支持。这种特性使得 Linux 很容易地同其他操作系统共存。文件系统的概念使得用户能够查看存储设备上的文件和路径而无须考虑实际物理设备的文件系统类型。 Linux 透明的支持许多不同的文件系统,将各种安装的文件和文件系统以一个完整的虚拟文件系统的形式呈现给用户。

下面介绍一些和 uClinux 相关的知识。

1 、 MMU (内存管理单元) 和 VM (虚拟内存)

许多嵌入式微处理器都由于没有 MMU 而不支持虚拟内存。没有内存管理单元所带来的好处是简化了芯片设计,降低了产品成本。由于大多数的嵌入式设备没有磁盘或者只有很有限的内存空间,所以无需复杂的内存管理机制。但是由于没有 MMU 的管理,操作系统对内存空间是没有保护的,所有程序访问的地址都是实际物理地址。但从嵌入式系统一般都是实现某种特定功能的角度考虑, 对于内存管理的要求完全可以由程序开发人员考虑。

2 、实时性的支持

uClinux 本身并不支持实时性,目前存在两种不同的方案提供 uClinux 对实时性的支持,它们分别是 RTLinux(RTL) 和 RTAI(Real Time Application Interface) 。有了这两种方案, uClinux 可以应用到对实时性要求较高的场合。

3、 平台支持

开发 uClinux 的工具链:

开发 uClinux 通常用标准的 GNU 工具链。经过修改的工具链支持一些高级特性,比如XIP(Execute-In-Place) 技术,共享库支持等。

uClinux 所适用的微控制器:

uClinux 适用于摩托罗拉的 ColdFire/Dragonball , ARM 系列 ( 例如 Atmel, TI, Samsung 等生产的芯片 ) , Intel i960, Sparc ( 例如无 MMU 的 LEON), NEC v850 ,甚至是开放的可综合 ( 到 CLPD 内 ) 的CPU 核,比如 OPENcore 。

4、与标准 Linux 的兼容性

uClinux 除了不能实现 fork() 而是使用 vfork() 外,其余 uClinux 的 API 函数与标准 Linux 的完全相同。这并不是意味着 uClinux 不能实现多进程,实际上 uClinux 多进程管理是通过 vfork() 来实现的,或者是子进程代替父进程执行,直到子进程调用 exit() 函数退出,或者是子进程调用 exec() 函数执行一个新的进程。大多数标准的 Linux 应用程序在从 Linux 操作系统移植到 uClinux 系统时,几乎不用做什么大的改动,就可以完全达到对一个嵌入式应用程序的要求 ( 例如合理的资源使用 ) 。

uClibc 对 libc( 可用于标准 Linux 的函数库 ) 做了修改为 uClinux 提供了更为精简的应用程序库。

5 、 网络的支持

uClinux 带有一个完整的 TCP/IP 协议,同时它还支持许多其他网络协议。 uClinux 对于嵌入式系统来说是一个网络完备的操作系统。

6、应用领域

uClinux 广泛应用于嵌入式系统中,例如 VPN 路由器 / 防火墙,家用操作终端,协议转换器, IP电话,工业控制器, Internet 摄像机, PDA 设备等。

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
20#
 楼主| 发表于 2009-9-8 01:08:44 | 只看该作者

ARM与交叉编译

简单地讲,交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。这里的平台,实际上包含两个概念:体系结构 (Architecture) 、操作系统 (Operating System) 。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的 x86 Linux 平台实际上是 Intel x86 体系结构和 Linux for x86 操作系统的统称;而 x86 WinNT 平台实际上是 Intel x86 体系结构和 Windows NT for x86 操作系统的简称。

就ARM而言,之所以使用交叉编译是因为在该硬件上无法安装我们所需的编译器,只好借助于宿主机,在宿主机上对即将运行在目标机上的应用程序进行编译,生成可在目标机上运行的代码格式。

读者可以从 http://mac.os.nctu.edu.tw/->download 处下载工具链 : arm-elf-binutils-2.11-5.i386.rpm , arm-elf-gcc-2.95.3-2.i386.rpm , genromfs-0.5.1-1.i386.rpm 的文件复制到宿主机上的任一目录下。键入下面的命令来安装 rpm 包:

$su

# rpm – ivh *.rpm

RPM(Red Hat Package Manger) 软件包管理程序,是将原本复杂的软件包安装程序,轻松利用单一操作来完成。

RPM 目前支持的平台有 3 种类型: x86(i386) , Sparc 以及 Alpha ,可以很容易的从文件名就来判断出使用的平台。像目前下载文件比如 arm-elf-binutils-2.11-5.i386.rpm , arm-elf-binutils 表示文件名, 2.11 表示版本编号, 5 表示发行序号,也就是目前已经发行的次数, i386 是指此软件包为适用于 Intel x86 的二进制 (binary) 程序,也就是已经编译并且可以直接安装的软件包,最后的 “ rpm ” 表示这是 Red Hat 的 RPM 程序。每一版的 RPM 发布后,若是发现软件有问题,都会重新进行 patch 和 build ,这样在发行序号的部分就会增加 1 ,以表示该版本是上个版本的更新。

这里在所用的命令 rpm – ivh 中, -i 表示 Installation ,就是安装指定的 RPM 软件包; -h 表示 Hash ,该参数可在安装期间出现 ”#” 符号,来显示目前的安装过程,这个符号一直持续到安装完成后才停止;

-v 表示 Verbose ,显示安装时候的详细信息。

至此我们把交叉编译器已经安装到了宿主机。以后我们就可以用交叉编译器 arm-elf-gcc 编译操作系统内核和用户应用程序了。

读者也可以从网站 http://www.uclinux.org/pub/uClinux/arm-elf-tools/ 上下载最新的 arme-elf-gcc 工具 ,即脚本文件 arm-elf-tools-20030314.sh ,在宿主机上安装该工具链,在该文件所在目录下,键入:

$ su

# ls – l arm-elf-tools-20030314.sh

该命令显示文件的各种属性,如果该脚本文件属性的不是可执行的,则还需要输入命令:# chmod 755 arm-elf-tools-20030314.sh

以将其属性改为可执行属性,然后通过键入命令 :

# sh ./arm-elf-tools-20030314.sh

就可以执行该文件。执行后 /usr/local/bin/ 路径下有 gcc, g++, binutils, genromfs, flthdr 和 elf2flt 等各种实用工具。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-5 20:56 , Processed in 0.096107 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表