make 工具

106
ARM ARM 1 Make 工工 GNU Make 工 工工工工工工工工工 工工工工 工工工工工工工工工工工工工工 一,, 工工工工 工工工工工工 工工工工工工工工工工工工工工工工工工工工工工工 、,。 Make 工工工工工工工工工工工工工工 工工工工工工工工工工工工工工 ,。 工工工工工工工工工工工工工工工工工工工工工 工工工工工工工工工工工工工工工工工 工工工工工 工工工工工工工工工工工工工工工工工 ,。

Upload: reuben-reilly

Post on 30-Dec-2015

41 views

Category:

Documents


0 download

DESCRIPTION

Make 工具. GNU Make 是一种常用的编译工具,通过它,程序员可以很方便地管理软件编译的内容、方式和时机,从而使程序员能够把主要精力集中在代码的编写上。 Make 自动判断源码中哪些部分有更新,重新编译这些文件并重新链接。 对于那些由许多源文件组成的大型软件项目来说,采用这种项目管理方法则可以极大地提高工作效率,让原本复杂繁琐的开发工作变得简单。. make 工具通过一个称为 makefile 的文件来完成并自动维护编译工作。 makefile 需要按照某种语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,并定义了源文件之间的依赖关系。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Make 工具

ARMARMARMARM

1

Make 工具

GNU Make 是一种常用的编译工具,通过它,程序员可以很方便地管理软件编译的内容、方式和时机,从而使程序员能够把主要精力集中在代码的编写上。

Make 自动判断源码中哪些部分有更新,重新编译这些文件并重新链接。

对于那些由许多源文件组成的大型软件项目来说,采用这种项目管理方法则可以极大地提高工作效率,让原本复杂繁琐的开发工作变得简单。

Page 2: Make 工具

ARMARMARMARM

2

make 工具通过一个称为 makefile 的文件来完成并自动维护编译工作。makefile 需要按照某种语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,并定义了源文件之间的依赖关系。当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也要重新编译所有依赖该文件的源文件。

Page 3: Make 工具

ARMARMARMARM

3

基本规则 :目标、依赖关系、指令

target : dependency …… command ……

目标( target ):需要由 make 工具创建的项目,是指令( command )执行的结果文件(目标文件或执行文件),也可以是一个标签( Lable ),如make clean、make all 等。依赖( dependency ):要创建的项目依赖于哪些文件或目标。依赖条件顶格书写。 指令( command ):创建每个项目时 make 需要运行的命令(任意的 Shell命令) 。指令必须使用一个 TAB 符(制表位)开始进行书写。在指令部分定义的指令会在依赖文件的内容有所变更或找不到目标文件时被执行。

Page 4: Make 工具

ARMARMARMARM

4

如果一个工程有三个源文件 write.c, read.c,main.c生成可执行程序 test 。 用于生成 test的Makefile 文件如下:test: main.o read.o write.o

gcc –o test main.o read.o write.o

main.o : io.h main.c gcc –c main.cread.o : io.h read.c gcc –c read.cwrite.o : io.h write.c gcc –c write.cclean: rm test main.o read.o write.o

-c :对源程序进行预处理、编译,产生目标文件,但不进行连接。-o < 文件名 > :定义输出的执行文件名为 < 文件名 > 。

Page 5: Make 工具

ARMARMARMARM

5

clean 不是一个文件,它只不过是一个动作名字,有点像 C 语言中的 lable 一样,其冒号后什么也没有,那么,make 就不会自动去找文件的依赖性,也就不会自动执行其后所定义的命令。要执行其后的命令,就要在make 命令后明显得指出这个 lable 的名字。

例如,使用名为 clean 标签来进行清除,可以没有依赖关系部分,即执行命令

以此来清除所有的目标文件,以便重新编译。

相当于执行了:

[root@XSBase test]# make clean

[root@XSBase test]# rm test main.o read.o write.o

Page 6: Make 工具

ARMARMARMARM

6

Makefile 依赖关系

使用 vi 编译器创建 Makefile 后,进行 make ,则生成执行文件test。Make 将按照 Makefile 中指定的依赖关系来依次执行。

[root@XSBase test]# make

Page 7: Make 工具

ARMARMARMARM

7

宏和标签

为了 makefile 的易维护,在 makefile 中我们可以使用变量。 makefile 的变量也就是一个字符串,理解成C 语言中的宏可能会更好。 比如,我们声明一个能够表示 obj 文件的宏,宏名可为 objects,OBJECTS, objs,OBJS, obj或 OBJ 等。

可使用宏( Macro )功能和标签( Label )功能使Makefile 的创建更为灵活。宏起到以替换指定的内容使程序简单化的作用。宏必须要在 $(..) 里面使用。

Page 8: Make 工具

ARMARMARMARM

8

例:利用宏来创建 Makefile 。在这里宏是 OBJECTS ,将 main.o 、 read.o 、 write.o 替换为 OBJECTS 来使用。

OBJECTS = main.o read.o write.otest: $(OBJECTS) #使用名为 OBJECTS 的宏来创建 Makefile.

gcc –o test $(OBJECTS)main.o: io.h main.c gcc –c main.cread.o: io.h read.c gcc –c read.cwrite.o: io.h write.c gcc –c write.cclean: rm test $(OBJECTS)

Page 9: Make 工具

ARMARMARMARM

9

预定义的宏 (Pre-defined Macro) 执行 make -p 可看到 Make 中事先指定好的各个值(宏,环境参数等)。

宏的定义 涵义AS = as 指定汇编器,默认值为 as

ASFLAGS = 汇编程序( AS 指令)的选项设置CC = cc 或 CC =

gcc指定编译器( C),默认值为 cc

CFLAGS = C编译器( gcc 指令)的选项设置CXX = g++ 指定 C++编译器,默认值为 g++

CPPFLAGS = C++编译器( g++ 指令)的选项设置LD = ld 指定链接器LDFLAGS = ld 的选项设置

Page 10: Make 工具

ARMARMARMARM

10

扩展名规则

扩展名规则( Suffix Rule )是根据文件的扩展名来进行适当的运算操作。例如, .c 一般指 C 源文件, .o 文件是目标文件。 .c 文件编译后应成为 .o 文件。

在这里出现名为 .SUFFIXES 的宏,这个宏自动处理Makefile 中需要慎重处理的文件的扩展名。

.SUFFIXES = .c .o

上面的例子对带有 .c和 .o 扩展名的文件按照扩展名规则来处理,自动操作使 .c 文件编译后生成 .o 文件。

Page 11: Make 工具

ARMARMARMARM

11

宏名 涵义$* 没有扩展名的当前目标文件

$@ 当前目标文件的完整名称

$< 第一个依赖文件的名称,即比当前目标文件更新的第一个文件名

$?所有的依赖文件,以空格分开,这些依赖文件修改日期比目标的创建日期晚。比当前目标文件更新的所有文件名

$^ 所有的依赖文件,以空格分开,重复出现的名字只保留一个

$+所有的依赖文件,以空格分开,并以出现的先后为序,保持重复出现的名字不变

内部宏定义( Internal Macro )用于简化 Makefile 的写法

Page 12: Make 工具

ARMARMARMARM

12

内部宏的用法

例子一: main.o : main.c io.h

gcc -c $*.c 说明: $* 是没有扩展名的当前目标文件,所以 $*.c 扩展为 main.c 。

例子二: test :

gcc -o $@ -c main.c 说明: $@ 是当前目标文件,相当于 test 。

Page 13: Make 工具

ARMARMARMARM

13

例子三: .c.o :

gcc -c $< test: main.o

gcc -o $@ main.o

说明:如果源文件 .c 比目标文件 .o 更新,则 .c 文件会自动编译。即在 main.o 生成之后更新了main.c 的话,那么 main.c 就会被 $< 自动重新编译。

Page 14: Make 工具

ARMARMARMARM

14

myprog:main.o display.o input.o

gcc main.o display.o input.o -o myprog

main.o:main.c commom.h

gcc -c main.c

display.o:display.c display.h common.h

gcc -c display.c

input.o:input.c input.h common.h

gcc -c input.c

clean:

rm -f myprog main.o display.o input.o

CC=gcc

OBJS=main.o display.o input.o

myprog:$(OBJS)

$(CC) $(OBJS) -o $@

main.o:main.c commom.h

$(CC) -c $<

display.o:display.c display.h common.h

$(CC) -c $<

input.o:input.c input.h common.h

$(CC) -c $<

clean:

rm -f myprog $(OBJS)

Page 15: Make 工具

ARMARMARMARM

15

实验二 Makefile

使用命令编译程序使用预定义变量编译程序使用预定义变量对多个 .c 文件编译具体练习题目详见实验指导书

Page 16: Make 工具

16

第第 55章 章 ARMARM及及 XScaleXScale介绍介绍

Page 17: Make 工具

ARMARMARMARM

17

ARM微处理器概述

Page 18: Make 工具

ARMARMARMARM

18

ARM(Advanced RISC Machines) ,既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。 1991年 ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。目前,采用 ARM 技术知识产权 (IP)核的微处理器,即我们通常所说的 ARM微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于 ARM技术的微处理器应用约占据了 32位 RISC微处理器 75% 以上的市场份额, ARM技术正在逐步渗入到我们生活的各个方面。

Page 19: Make 工具

ARMARMARMARM

19

ARM公司是专门从事基于 RISC技术芯片设计开发的公司,作为知识产权供应商,它本身不直接从事芯片生产,靠转让设计许可,由合作公司生产各具特色的芯片,世界各大半导体生产商从 ARM公司购买其设计的ARM微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的 ARM微处理器芯片进入市场。 目前,全世界有几十家大的半导体公司都使用 ARM公司的授权,因此既使得 ARM技术获得更多的第三方工具、制造、软件的支持,又使整个系统成本降低,从而使产品更容易进入市场被消费者所接受,更具有竞争力。

Page 20: Make 工具

ARMARMARMARM

20

ARM 处理器系列

下面所列的是 ARM微处理器的几个系列,以及其他厂商基于 ARM体系结构的处理器,这些处理器除了具有 ARM体系结构的共同特点以外,每一个系列的 ARM微处理器都有各自的特点和应用领域。

◆ ARM7 系列 ◆ ARM9 系列 ◆ ARM9E 系列 ◆ ARMl0E 系列 ◆ SecurCore 系列 ◆ Intel的 Xscale

◆ Intel的 StrongARM

Page 21: Make 工具

ARMARMARMARM

21

Xscale 处理器

Xscale 处理器是基于 ARMv5TE体系结构的解决方案,是一款性能全、性价比高、功耗低的处理器。它支持 16 位的 Thumb 指令和 DSP 指令集 ,已使用在数字移动电话、个人数字助理和网络产品等场合。Xscale 处理器是 Intel 目前主要推广的一款ARM微处理器。

Page 22: Make 工具

ARMARMARMARM

22

RISC体系结构

ARM 处理器实现加载/存储 (load/store)体系结构是典型的 RISC 处理器。只有加载和存储指令可以访问存储器。数据处理指令只对寄存器的内容进行操作。

Page 23: Make 工具

ARMARMARMARM

23

精简指令集计算机 RISC (Reduced Instruction Set Computer) 结构的产生是相对于传统的复杂指令集计算机 CISC (Complex Instruction Set Computer) 结构而言的。传统的 CISC计算机的指令集随着计算机的发

展而引入了各种各样的复杂指令 , 使得指令集和为此要实现这些指令的计算机体系结构越来越复杂 ,已经不堪重负。

Page 24: Make 工具

ARMARMARMARM

24

经过大量的研究和分析 , 发现在 CISC 的指令集中 , 各种指令的使用频度相差悬殊。

大概有 20% 的指令被反复使用 , 使用量约占整个程序的 80%; 而有 80%左右的指令则很少使用 , 其使用量约占整个程序的 20% 。这就是所谓的 20%—80% 定律。

Page 25: Make 工具

ARMARMARMARM

25

RISC特点如下:指令规整、对称、简单。指令小于 100 条,基本寻

址方式有 2~3 种。单周期指令。指令字长度一致,单拍完成,便于流水操作 ;

ARM7 三级流水线:取指、译码、执行;ARM9 五级流水线;ARMl0 六级流水线。大量的寄存器。寄存器不少于 32 个。数据处理器的

指令只对寄存器的内容操作。只有加载/存储指令可以访问存储器。

Page 26: Make 工具

ARMARMARMARM

26

几种常用的调试方法指令集模拟器

一种利用 PC机端的仿真开发软件模拟调试的方法。驻留监控软件

驻留监控程序运行在目标板上, PC机端调试软件可通过并口、串口、网口与之交互,以完成程序执行、存储器及寄存器读写、断点设置等任务JTAG仿真器

通过 ARM芯片的 JTAG边界扫描口与 ARM核进行通信,不占用目标板的资源,是目前使用最广泛的调试手段在线仿真器

使用仿真头代替目标板上的 CPU,可以完全仿真 ARM芯片的行为。但结构较复杂,价格昂贵,通常用于 ARM硬件开发中

Page 27: Make 工具

ARMARMARMARM

27

什么是 JTAG?

JTAG是 Joint Test Action Group的缩写是IEEE1149.1标准

JTAG的建立使得集成电路固定在 PCB上,只通过边界扫描便可以被测试

在 ARM7TDMI处理器中,可以通过 JTAG直接控制ARM的内部总线, IO口等信息,从而达到调试的目的

Page 28: Make 工具

ARMARMARMARM

28

Page 29: Make 工具

ARMARMARMARM

29

ARM的 JTAG调试结构

Page 30: Make 工具

ARMARMARMARM

30

ARM的 JTAG调试接口1、 ARM的 JTAG调试结构一个典型的 ARM 基于 JTAG调试结构如图所示。

Debug 主控端

协议转换器

调试目标机 处理器的开发系统

负责转换 Debug 主控端发出的高级 ARM调试指令为底层的和 ARM 内核通信的

运行ARM公司或第三方提供的调试软件的PC机

Page 31: Make 工具

ARMARMARMARM

31

Debug 主控( Host )通常是运行有 ARM公司或者第三方提供的调式软件的 PC ,通常用的调试软件有ARM Debug for Window(ADW), Linux 下的 arm-elf-gdb 等。通过这些调试软件,可以发送高级的 ARM 指令,比如:设置断点,读写存储器,单步跟踪,全速运行等。

Page 32: Make 工具

ARMARMARMARM

32

协议转换器( Protocol converter )负责转换 Debug主控端发出的高级 ARM调式命令为底层的和 ARM 内核通信的 JTAG 命令。

Debug 主控端和协议转换器之间的介质可以有很多种,比如:以太网, USB, RS-232 ,并口等。主控端和协议转换器之间的通信协议最典型的就是 ARM公司提供的 Angle 标准,也可以是第三方厂家自己定义的标准。

关于 Angle 的协议,请参考 ARM SDT和ADS, ajj公司的 OpenICE32,EPI公司的 Jeeni 等。

Debug 目标板就是指系统的调试对象。

Page 33: Make 工具

ARMARMARMARM

33

JTAG 的典型信号

TMS: 测试模式选择( Test Mode Select),通过 TMS信号控制 JTAG状态机的状态TCK : JTAG的时钟信号TDI:数据输入信号TDO :数据输出信号nTRST: JTAG复位信号,复位 JTAG的状态机和内部的宏单元( Macrocell)

Page 34: Make 工具

ARMARMARMARM

34

JTAG与 Angel

JTAG调试:协议转换器解释上位机传送过来的命令,通过 JTAG控制 ARM执行。Angel调试:协议转换器可以直接做为目标板的Firmware的一部分。直接执行从宿主机传送过来的调试命令;并回送相应的数据。Angel可以节省专门的 JTAG仿真器,但是,它需要软件,或者是嵌入式操作系统的支持,做不到完全的实时仿真。而 JTAG仿真是通过硬件和控制 ARM的 EmbeddedICE实现的,可以做到实时仿真。

Page 35: Make 工具

ARMARMARMARM

35

ARM微处理器的体系结构

Page 36: Make 工具

ARMARMARMARM

36

数据和指令类型

ARM 采用的是 32 位架构。ARM约定:

Byte: 8 bit

Halfword: 16 bits(2 bytes)

Word: 32 bits(4 bytes)

大部分 ARM core 提供:ARM 指令集 (32-bit)

Thumb 指令集 (16-bit)

Page 37: Make 工具

ARMARMARMARM

37

数据类型

字( Word )字的长度为 32 位,而在 8位 /16 位处理器体系结构中,字的长度一般为 16 位,请注意区分。半字 (Half-Word)

半字的长度为 16 位,与 8位 /16 位处理器体系结构中字的长度一致。字节( Byte )各种处理器体系结构中,字节的长度均为 8 位。

Page 38: Make 工具

ARMARMARMARM

38

ARM微处理器的工作状态

从编程的角度看 ,ARM微处理器的工作状态一般有两种 , 并可在两种状态之间切换 :

ARM状态,此时处理器执行 32 位的字对齐的ARM 指令; Thumb状态,此时处理器执行 16 位的、半字对齐的 Thumb 指令。

Page 39: Make 工具

ARMARMARMARM

39

ARM 处理器在两种工作状态之间可以切换:进入 Thumb状态。

当操作数寄存器的状态位 ( 地址的最低位,即位 [0])为 1 时,执行 BX 指令进入 Thumb状态。如果处理器在Thumb状态进入异常,则当异常处理(IRQ、 FIQ、 Undef、 Abort 和 SWI)返回时,自动转换到 Thumb状态。

进入 ARM状态。 当操作数寄存器的状态位 (位 [0])为 0 时,执行 BX指令进入 ARM状态。处理器进行异常处理 (IRQ、 FIQ、Reset、 Undef、 Abort 和 SWI ARM状态执行 ) 。在此情况下,把 PC 放人异常模式链接寄存器中。从异常向量地址开始执行也可以进入 ARM状态。

Page 40: Make 工具

ARMARMARMARM

40

处理器工作模式

ARM微处理器支持 7 个基本工作模式,分别为: 用户模式 (User):非特权模式,大部分任务执行在这种模式, ARM 处理器正常的程序执行状态。快速中断模式 (FIQ): 当一个高优先级 (fast) 中断产生时将会进入这种模式,用于高速数据传输或通道处理。 外部中断模式( IRQ ):当一个低优先级 (normal) 中断产生时将会进入这种模式,用于通用的中断处理。 管理模式( Supervisor ):当复位或软中断指令执行时将会进入这种模式,操作系统使用的保护模式,系统复位后的缺省模式。

Page 41: Make 工具

ARMARMARMARM

41

中止模式 (Abort) :当存取异常时将会进入这种模式。

1. 指令中止模式:指令预取终止时进入该模式。 2. 数据访问中止模式:当数据访问终止时进入该模式,可用于虚拟存储及存储保护。

指令未定义模式 (Undef): 当执行未定义指令时会进入这种模式,支持硬件协处理器指令的软件仿真。系统模式 (System) :使用和 User模式相同寄存器集的特权模式,运行具有特权的操作系统任务。

Page 42: Make 工具

ARMARMARMARM

42

ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。

大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。

除用户模式以外,其余的所有 6 种模式称为非用户模式或特权模式 (Privileged Modes);

其中除去用户模式和系统模式以外的 5 种又称为异常模式 (Exception Modes) ,常用于处理中断或异常 , 以及需要访问受保护的系统资源等情况。

Page 43: Make 工具

ARMARMARMARM

43

超级模式( Supervisor)

多种特权模式变化 用户程序的运行模式

复位后的缺省模式 主要完成各模式的堆栈设置,注意不要进入用户模式

一般为用户模式

User

处理器模式

处理器启动时的模式转换图

Page 44: Make 工具

ARMARMARMARM

44

寄存器

ARM 的中央寄存器集是 16 个用户寄存器 R0 – R15 。这些寄存器均是32 位宽度, R0 – R12 没有其他特殊功能,寄存器 R13 – R15在 CPU 中有特殊功能。

R13 被用作堆栈指针 (stack pointer, SP) ,保存当前处理器模式的堆栈的栈顶。

R14 被称为链接寄存器 (link register, LR) ,保存调用子函数的返回地址。

R15 是程序计数器 (program counter, PC) 。其内容是处理器要取的下一条指令的地址。

Page 45: Make 工具

ARMARMARMARM

45

ARM状态下的寄存器组织

程序状态寄存器:• CPSR

(current program status register)

当前的程序状态寄存器

• SPSR

(saved program status register)

备份的程序状态寄存器

Page 46: Make 工具

ARMARMARMARM

46

用户的应用程序通常运行于用户模式,可访问寄存器组 R0 – R15 以及 CPSR 。为了响应诸如中断、存储器错误,或者软件中断指令之类的异常,处理器将改变运行模式。当改变模式时,寄存器 R0–R12 和 R15 的作用不变,但 R13( LR )和 R14( SP )被相应模式特有的寄存器替代。意味着每一个模式都有它自己的栈寄存器和链接寄存器。此外,快速中断模式( FIQ )有自己的 R7–R12 寄存器,不需要将寄存器入栈就可以快速进入 FIQ 中断。

Page 47: Make 工具

ARMARMARMARM

47

除了用户模式外的所有模式都有一个额外的寄存器——“程序状态保存寄存器”( SPSR )。当应用程序在用户模式下运行时,如果发生了一个异常, CPU 将改变操作模式,并将 CPSR 的当前内容保存到 SPSR 。执行完异常代码后返回时, SPSR 的内容被恢复到 CPSR ,以允许应用程序继续正常执行。ARM7 CPU 有六种用于处理异常的操作模式。由阴影标明的寄存器是当操作模式改变时使能的寄存器。 SPSR 寄存器用于在改变模式时保存 CPSR 的副本。

Page 48: Make 工具

ARMARMARMARM

48

ARM微处理器共有 37个 32 位寄存器。1 个用作 PC1 个用作 CPSR5 个用作 SPSR30 个为通用寄存器

当前处理器的模式决定着哪组寄存器可操作,任何模式都可以存取:

相应的 R0 – R12 子集相应的 R13(SP), R14(LR)相应的 R15(PC)相应的 CPSR

特权模式 (除 system模式 )还可存取:相应的 SPSR

6 个状态寄存器

Page 49: Make 工具

ARMARMARMARM

49

ARM和 Thumb寄存器组织图解

Page 50: Make 工具

ARMARMARMARM

50

Thumb状态下和 ARM状态下的 R0~R7 是相同的

Thumb状态下和 ARM状态下的 CPSR 和所有的 SPSR 是相同的

Thumb状态下的 SP 对应于 ARM状态下的 R13

Thumb状态下的 LR 对应于 ARM状态下的 R14

Thumb状态下的程序计数器对应于 ARM状态下的 R15

(1) Thumb状态下的寄存器组织与 ARM状态下的寄存器组织的关系

Page 51: Make 工具

ARMARMARMARM

52

(2) 访问 THUMB状态下的高位寄存器 (Hi-registers)

在 Thumb状态下,高位寄存器 R8~R15 并不是标准寄存器集的一部分,但可使用汇编语言程序有限制地访问这些寄存器,将其用作快速的暂存器 .

使用带特殊变量的 MOV 指令 , 数据可以在低位寄存器和高位寄存器之间进行传送 , 高位寄存器的值可以使用CMP和 ADD 指令进行比较或加上低位寄存器中的值。

Page 52: Make 工具

ARMARMARMARM

53

ARM体系结构包含一个当前程序状态寄存器 (CPSR)和 5 个备份的程序状态寄存器 (SPSRs) 。备份的程序状态寄存器用来进行异常处理,其功能包括:保存 ALU 中的当前操作信息。控制允许和禁止中断。设置处理器的运行模式。

程序状态寄存器每一位的安排如图所示.

(3) 程序状态寄存器

Page 53: Make 工具

ARMARMARMARM

54

程序状态寄存器的格式

Page 54: Make 工具

ARMARMARMARM

55

① 条件码标志 (Condition Code Flags)

N、 Z、 C、 V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。在 ARM状态下,绝大多数的指令都是有条件

执行的。在 Thumb状态下.仅有分支指令是有条件执行的。

Page 55: Make 工具

ARMARMARMARM

57

运行模式位 M[4:0]:M0、M1 、 M2、M3、M4是模式位。这些位决定了处理器的运行模式。具体含义如下。

由表可知,并不是所有的运行模式位的组合都是有效的,其他的组合结果会导致处理器进入一个不可恢复的状态。

Page 56: Make 工具

ARMARMARMARM

58

异常

异常 (exception) 由内部或外部源产生以引起处理器处理一个事件,即当正常的程序执行流程发生暂时的停止时。例如,外部中断或试图执行未定义指令都会引起异常。在处理异常之前,处理器状态必须保留,以便在异常处理程序完成后,原来的程序能够重新执行。

处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。

ARM支持 7 种类型的异常。列出了异常的类型以及处理这些异常的处理器模式。异常出现后,强制从异常类型对应的固定存储器地址开始执行程序。这些固定的地址称为异常向量 (Exception Vectors) 。

Page 57: Make 工具

ARMARMARMARM

59

ARM体系结构所支持的异常类型

Page 58: Make 工具

ARMARMARMARM

60

异常向量表( Exception Vectors )

Page 59: Make 工具

ARMARMARMARM

61

异常优先级( Exception Priorities )

Page 60: Make 工具

ARMARMARMARM

62

高端向量

一些 ARM实现允许异常向量的定位由 32 位地址空间低端的正常地址范围 Ox00000000~Ox000000lC ,移到接近于地址空间高端的另一地址范围 0xFFFF0000~ 0xFFFF00lC 。

这些改变后的地址位置称为高端向量。

Page 61: Make 工具

ARMARMARMARM

63

异常的进入和退出

只要正常的程序流程被暂时停止 , 则异常发生,例如服务外部的中断。

在异常被处理之前,必须保存当前的处理器状态,以便当处理程序完成后,原来的程序能重新开始。

如果几种异常同时发生,则对它们按固定的次序处理,可参考异常优先级。

Page 62: Make 工具

ARMARMARMARM

64

如果异常是从 ARM状态进入,则保存在 LR寄存器中的是下一条指令的地址 ( 当前 PC+4或 PC+8) ,取决于异常。如果异常是从 Thumb状态进入,则保存在 LR寄存器中的是当前 PC 的偏移值。它能使程序在异常处理返回后从正确的位置重新开始。如果在异常发生时处理器是在 Thumb状态下,那么当用中断异常向量地址加载 PC 时,自动切换进入 ARM状态。

Page 63: Make 工具

ARMARMARMARM

65

当异常产生时, ARM core :拷贝 CPSR到 SPSR_<mode>

设置适当的 CPSR 位:改变处理器状态进入 ARM态改变处理器模式进入相应的异常模式设置中断禁止位禁止相应中断 ( 如果需要 )

保存返回地址到 LR_<mode>

设置 PC 为相应的异常向量

Page 64: Make 工具

ARMARMARMARM

66

返回时,异常处理需要:从 SPSR_<mode>恢复 CPSR

从 LR_<mode>恢复 PC

Note :这些操作只能在 ARM态执行

Page 65: Make 工具

ARMARMARMARM

67

在完成异常处理后: 将 LR寄存器的值减去相应的偏移量 (偏移量根据异常

不同而不同 ) ,送到 PC 中; 将 SPSR 复制回 CPSR 中; 清除中断禁止位标志。另外,不需要显式切换回 Thumb状态,因为从 SPSR中将 CPSR T 位自动设置为异常前的原值。

Page 66: Make 工具

ARMARMARMARM

68

Xscale 系统结构 PXA255 处理器结构与特性

XSBase255 开发平台介绍

Page 67: Make 工具

ARMARMARMARM

69

Xscale 系统结构

Page 68: Make 工具

ARMARMARMARM

70

Xscale 系统结构 ---- Xscale超级流水线

PXA255拥有 7级超级流水线,主要由主流水线、 MAC流水线和内存访问流水线组成。

Page 69: Make 工具

ARMARMARMARM

71

Xscale 系统结构 ---- Xscale超级流水线

主流水线 F1/F2 指令读取 (给下一级的指令译码级提交下一条要执行的指令。是许多重要功能单元所处之地。)ID 指令译码 (接收 IFU 中的指令字节和发送到 RF寄存器文件 /移位级的译码寄存器信息)RF寄存器文件 /移位级(主要对寄存器文件单元或者 RFU 进行读写,为 ALU 操作、 MAC 操作、内存数据 Cache 的读取和协处理器接口提供相关数据)X1 执行级 (执行 ALU计算、条件指令执行和分支目标确定)

X2 执行级 (包含程序状态寄存器 PSRs 并选择哪些需要在 XWB级写入 RFU 中。)XWB 写回级(当 一条指令到达写回级时将写回寄存器文件单元RFU )

Page 70: Make 工具

ARMARMARMARM

72

Xscale 系统结构 ---- Xscale超级流水线

MAC流水线 执行所有的乘 /累加指令。它执行 40 位累加寄存器 acc0 和能把指令值转化成普通的 ARM 寄存器值。 MAC 不是真正的一条流水线,指令的类型和资源决定它所需的周期数。不会同时两条指令出现在 MAC流水线上。当 MAC 在处理一条指令的时候其他的指令不允许进出到M1 中,除非原来的指令在下一个周期中处理完成。 MAC 单元执行开始于 M1 ,接受 2个 32 位操作数, N 个周期后完成并返回寄存器文件。

Page 71: Make 工具

ARMARMARMARM

73

Xscale 系统结构 ---- Xscale超级流水线

内存访问流水线 内存流水线有 D1、 D2和 DWB3级构成,独立完成指令的装载和存储。在执行完 X1 后开始执行 D1级,计算有效的存 /取地址;在 D2级数据 cache 和小型数据 cache返回目的数据; DWB级进行填入缓冲器和写入缓冲器操作。

Page 72: Make 工具

ARMARMARMARM

74

Xscale 系统结构 ---- Xscale乘 /累加MAC

Xscale 为了多媒体的应用,支持 SIMD.

比如 MIAPH 指令,它执行 2个 16x16 位乘法,然后与 40 位累加器相加,即 2个 32 位寄存器可以看作为 2对 16 位寄存器,先高 16 位相乘并与累加器进行相加;低 16 位也相乘后与累加器相加,这 2个结果相加后再送到寄存器文件中。

Page 73: Make 工具

ARMARMARMARM

75

Xscale 系统结构 ---- 内存管理

提供内存访问保护和虚拟地址到物理地址的转换 支持指令 TLB

支持数据 TLB

(Translation Look-aside Buffer, TLB ,转换搜索缓存 )

Page 74: Make 工具

ARMARMARMARM

76

Xscale 系统结构 ---- 指令 Cache

容量为 32K

32路组相联 每路由 8 个字 (32 字节 ) 和一位有效位

(思考:有几组 ?)

循环替换算法

Page 75: Make 工具

ARMARMARMARM

77

Xscale 系统结构 ---- 指令 Cache

Page 76: Make 工具

ARMARMARMARM

78

Xscale 系统结构 ---- 数据 Cache

容量 32KB

32路组相联 每路包含 32 字节和 1 个有效位 ,还包含 2个dirty 位 ,分别对应低 16 位字节和高 16 位字节 采用循环替换法

Page 77: Make 工具

ARMARMARMARM

79

Xscale 系统结构 ---- 转移目标缓冲器 BTB  

BTB 由有 128入口的直接映像 cache构成 每个入口由 TAG 分支地址、 DATA 数据目标地址和 2位历史位组成。

Page 78: Make 工具

ARMARMARMARM

80

Xscale 系统结构 ---- 性能监视

提供 2个 32 位的性能计数器,可以分别对 2 个独立的事件同时监视。 另外还有 1个 32 位时钟计数器用来联合性能计数器记录内核时钟数。

当计算突发事件时计数器将监测到一个特定事件的发生;当测量持续事件时计数器将记录处理器时钟周期数当指定条件为真时事件发生。

所有的这些计数器都有对应的 IRQ和 FIQ资源。Xscale 的性能监视模块可以通过协处理器 CP14 的寄存器 0-3 进行控制。

Page 79: Make 工具

ARMARMARMARM

81

Xscale 系统结构 ---- 电源管理

Xscale核合并电源管理和时钟管理来控制时钟和管理电源,它控制每一个运行模式的时钟频率和管理不同电源管理模式下的性能与功耗间的优化。

Page 80: Make 工具

ARMARMARMARM

82

Xscale 系统结构 ---- 调试

通讯控制模块通过 JTAG 指令来建立目标机和宿主机的握手

硬件断点模块 有指令和数据断点寄存器,由协处理器控制

跟踪缓冲模块 对程序历史记录以实现恢复异常和跳转

代码下载模块 代码下载到 I-Cache,调试代理程序实现读 / 写

Page 81: Make 工具

ARMARMARMARM

83

PXA255 处理器结构与特性

Page 82: Make 工具

ARMARMARMARM

84

PXA255 处理器结构与特性

PXA255 除了采用 Xscale 内核,还具有以下特点: 内核工作频率: 200MHz、 300MHz和 400MHz

系统存储器接口 时钟和电源控制器 DMA控制器 LCD控制器 系统集成模块 串行通信口 多媒体通信口

Page 83: Make 工具

ARMARMARMARM

85

PXA255 处理器结构与特性

时钟模块:控制系统每一个模块的时钟频率优化计算处理和电源管理的功能。有三个寄存器: 核时钟设置寄存器 CCCR L :晶振频率至存储器频率倍因子,可以设置成

27、 32、 36、 40或 45 。 M :存储器频率至运行方式频率倍因子,可以设置成 1或 2 。 N :运行方式频率至快速方式频率因子,可以设置成

1.0、 1.5、 2.0或 3.0 。

时钟允许寄存器 CKEN

振荡器设置寄存器 OSCC

Page 84: Make 工具

ARMARMARMARM

86

PXA255 处理器结构与特性

电源管理模块 运行模式 快速模式 ( CCCR的 N )空闲模式 空闲模式没有改变时钟的产生。应用程序选择 PWRMODE寄存器的M段来选择空闲方式。

睡眠模式 许多处理器内部单元功能关闭,实时时钟和电源管理模块继续工作

。通过使用 PWRMODE寄存器来进入睡眠模式。33MHz空闲模式 在 33MHz空闲模式下其他所有的外设单元都不能使用包括

SDRAM、 LCD和 DMA控制器。

Page 85: Make 工具

ARMARMARMARM

87

PXA255 处理器结构与特性

GPIO口 PXA255 可以使用和控制的 GPIO 管脚有 81 个。使用 27 个寄存器可以配置这些 GPIO 管脚的方向( 进或出 ) 、管脚功能、管脚的状态 ( 输出 ) 、管脚的高低电平检测 ( 输入 ) 和选择第二功能。许多 GPIO 管脚的第二功能已经被处理器或外设配置使用。

Page 86: Make 工具

ARMARMARMARM

88

PXA255 处理器结构与特性

中断控制器

Page 87: Make 工具

ARMARMARMARM

89

PXA255 处理器结构与特性

实时时钟 RTC

使用实时时钟可以配置成频率很广的周期时钟信号,通常 RTC设置 1Hz信号输出用来当作系统时间的基准。 实时时钟芯片是 RTC4513

Page 88: Make 工具

ARMARMARMARM

90

PXA255 处理器结构与特性

DMA控制器 (DMAC )DMAC有 16 个通道,从通道 0 到通道 15

在嵌入式 Linux中 DMA 在设备驱动上常常要用到。 DMA控制器对内存的访问和 CPU 的运行完全互斥,因此在DMA控制器访问内存时 CPU 不访问内存。 DMA控制器在传输数据上要比 CPU快得多,它的操作完全由硬件驱动,只要一个时钟周期就可以完成一个字节的传输。在 DMA控制器暂时占住了内存, CPU仍能取指令,而许多指令的执行是不要求访问内存的,这样 CPU和 DMA控制器之间有了一定的并行度,提高的综合效率。即使 CPU 要访问内存也可以在数据 cache 中读取。

Page 89: Make 工具

ARMARMARMARM

91

XSBase255 的配件

Page 90: Make 工具

ARMARMARMARM

92

XSBase255硬件介绍

Page 91: Make 工具

ARMARMARMARM

93

XSBase255硬件介绍

Page 92: Make 工具

ARMARMARMARM

94

XSBase255 Linux BSP介绍

Page 93: Make 工具

ARMARMARMARM

95

XSBase255 Linux光盘内容

Page 94: Make 工具

ARMARMARMARM

96

Xsbase255 开发系统 ----硬件资源

项目 描述处理器 Intel XScale PXA255 400MHz

SDRAM Samsung 64Mbyte

Flash Intel strata flash 32MByte

以太网 CS8900A 10BaseT

声卡 AC’97 Stereo audio

显示 LG TFT LCD 6.4”( 640 * 480)

触摸屏 ADS7843 touch screen

USB Host 2 Slot

USB Slave 1 Slot

PCMCIA 1 Slot

实时时钟 Real time clock RTC4513

红外 HDSL3600

CF 1 Slot

MMC 1 Slot

Page 95: Make 工具

ARMARMARMARM

97

Xsbase255 开发系统 ----硬件资源

存储器接口主要可以分成 3类 :SDRAM SDRAM有 4块区域静态 FLASH静态存储器有 6块卡存储器卡存储器有 2块。

Page 96: Make 工具

ARMARMARMARM

98

Xsbase255 开发系统 ----硬件资源

LCD 接口 PXA255 处理器内置的 LCD控制器支持被动 (DSTN) 或主动 (TFT)模式的显示器,还支持单色或多种的彩色像点格式,支持单屏或双屏显示;被动彩色方式有 65536 种颜色 ( 使用16位 TMED抖动算法 ) ,主动彩色方式有 65536 种颜色(16 位,绕过调色板 ) ,显示可以达到 1024x1024 ,推荐使用最大值 800x600;内置 2 个专用 DMA 通道。Xsbase255 系统使用的 LCD是 6.4’TFT 的彩色显示屏,分辨率是 640x480 。

Page 97: Make 工具

ARMARMARMARM

99

Xsbase255 开发系统 ----硬件资源

以太网接口 Xsbase255 开发系统采用 Cirrus Logic公司CS8900A 以太网芯片,是符合 IEEE802.3协议的工业标准架构总线的一款低成本的以太网芯片。它高度集成了一些常用的部件比如:片内的RAM、 10BASE-T传输和接受过滤器和 ISA总线接口等 。

Page 98: Make 工具

ARMARMARMARM

100

Xsbase255 开发系统 ----硬件资源

音频接口 PXA255 处理器包含 AC’97控制单元,支持音频控制器 (AC-link) ,能通过串口传输数字音频、调制调解器、音频输入、控制寄存器和状态信息等。因为 PXA255 处理器内置了 AC’97控制器,需要外扩一个音频解码芯片。Xsbase255外扩了 Cirrus Logic CS4299 用作音频解码器。

Page 99: Make 工具

ARMARMARMARM

101

Xsbase255 开发系统 ----硬件资源

实时时钟 RTC

当关闭 Xsbase255 系统电源, RTC4513 可以通过一个电池来保持当前的时间。系统外扩了实时时钟芯片 RTC4513 和一个纽扣电池组成 RTC电路 。

Page 100: Make 工具

ARMARMARMARM

102

Xsbase255 开发系统 ----硬件资源

串口 Xsbase 开发系统提供 1 个全功能的 (FF, Full Function) 串口, 1 个蓝牙串口 (BT,Bluetooth)和1 个标准 UART(红外接口 ) 。它们使用 PXA255中的第二功能 GPIO引脚。全功能串口支持Modem控制功能,其最高波特率为 230.4Kb/s;蓝牙串口是一个高速 UART ,最高波特率为921.6Kb/s ,可连接蓝牙模块 。

Page 101: Make 工具

ARMARMARMARM

103

Xsbase255 开发系统 ----硬件资源

USB 接口 Xsbase255 开发系统有 1个 USB-Client 接口和 2个 USB-Host 接口 ( 其中一个是 mini USB 接口 ) 。 USB-Client 接口作为 USB 的从设备,一般与主设备如宿主机连接,用于下载数据和程序,也可以用作 USB网口来使用。 USB-Client控制器 UDC 集成在 PXA255处理器内部。

USB-Host 接口作为 USB 的主设备,用于连接 USB外设,例如 U盘、鼠标、键盘和摄像头等。

Page 102: Make 工具

ARMARMARMARM

104

Xsbase255 开发系统 ----硬件资源

扩展接口 1个 PCMCIA 接口1个 CF卡接口1个MMC卡接口120pin 的扩展接口。

Page 103: Make 工具

ARMARMARMARM

105

PCMCIA

通常,台式机和服务器等用的网卡均不支持 PCMCIA 标准, PCMCIA 是专门用在笔记本或 PDA 、数码相机等便携设备上的一种接口规范(总线结构)。也就是笔记本网卡通常都支持 PCMCIA 规范,而台式机网卡则不支持此规范。 PCMCIA 是英文“ PERSONAL COMPUTER MEMORY CARD INTERNATIONAL ASSOCIATION” 的缩写, PCMCIA定义了三种不同型式的卡,它们的长宽都是 85.6×54mm ,只是在厚度方面有所不同。 Type I 是最早的 PC卡,厚 3.3mm 主要用于 RAM和 ROM; Type II 将厚度增至 5.5mm 适用范围也大大扩展包括了大多数的 modem (调制解调器)和 faxmodem(传真调制解调器), LAN 适配器和其它电气设备; Type III则进一步增大厚度到 10.5mm 这种 PC卡主要用于旋转式的存储设备(例如硬盘)。 PCMCIA总线分为两类,一类为 16 位的 PCMCIA ,另一类为 32 位的 CardBus 。

Page 104: Make 工具

ARMARMARMARM

106

CF卡

CF卡( Compact Flash )是 1994年由 SanDisk最先推出的。CF卡重量只有 14g ,仅纸板火柴般大小( 43mm x 36m x m3.3mm ),是一种固态产品,也就是工作时没有运动部件。 CF卡采用闪存( flash )技术,是一种稳定的存储解决方案,不需要电池来维持其中存储的数据。对所保存的数据来说,CF卡比传统的磁盘驱动器安全性和保护性都更高;比传统的磁盘驱动器及Ⅲ型 PC卡的可靠性高 5到 10倍,而且 CF卡的用电量仅为小型磁盘驱动器的 5% 。这些优异的条件使得大多数数码相机选择 CF卡作为其首选存储介质。

Page 105: Make 工具

ARMARMARMARM

107

MMC

MMC(MultiMedia Card )卡由西门子公司和首推 CF的SanDisk于 1997年推出。 1998年 1月十四家公司联合成立了MMC协会( MultiMedia Card Association 简称 MMCA ),现在已经有超过 84 个成员。 MMC 的发展目标主要是针对数码影像、音乐、手机、 PDA 、电子书、玩具等产品,是把存贮单元和控制器一同做到了卡上,智能的控制器使得 MMC保证兼容性和灵活性。 MMC 被设计作为一种低成本的数据平台和通讯介质,它的接口设计非常简单:只有 7针!接口成本低于 0.5美元,相比之下SmartMedia和Memory Stick 的接口成本都要高于 1美元。在接口中,电源供应是 3针,而数据操作只用 3针的串行总线即可( SPI模式再加上 1针用于选择芯片)。MMC 的操作电压为 2.7伏到 3.6伏,写 /读电流只有 27mA和23mA ,功耗很低。

Page 106: Make 工具

ARMARMARMARM

108

Xsbase255 开发系统 ---- 软件资源

Linux( Linux2.4.18 )

FLASH (32M 32bit)

Root Filesystem

Kernel Image

Reserved

Bootloader

0x0200 0000

0x001C 0000

0x000C 0000

0x0004 0000

0x0000 0000

30 MByte

1MByte

512KByte

256KByte