2013嵌入式复习题

◆什么是嵌入式系统

嵌入式系统(Embedded Systems)是指:“嵌入到对象体系中的、用于执行独立功能的专用计算机系统”。即以应用为中心,以微电子技术、控制技术、计算机技术和通讯技术为基础,强调硬件软件的协同性与整合性,软件硬件可剪裁的,适应应用系统对功能、可靠性、成本、体积、功耗和应用环境有等严格要求的专用计算机系统。

嵌入式系统的嵌入式本质就是将一个计算机嵌入到一个对象体系中去。

◆嵌入式系统按形态可分为

◆设备级(工控机)

◆板级(单板、模块)

◆芯片级(MCU、SoC)

“嵌入性”、“专用性”与“计算机系统”是嵌入式系统的三个基本要素。

与通用的计算机系统化相比,嵌入式系统具有以下显著特点。

◆系统内核小

◆专用性强

◆运行环境差异大

◆可靠性要求高

◆系统精简和高实时性操作系统

◆具有固化在非易失性存储器中的代码

◆嵌入式系统开发工作和环境

硬件抽象层(Hardware Abstraction Layer,HAL),有时也称为板级支持包(Board Support Package,BSP)。这个新增加的中间层次位于操作系统和硬件之间,包含了操作系统中与硬件相关的大部分功能。

它能够通过特定的上层接口与操作系统进行交互,向操作系统提供底层硬件信息,并根据操作系统的要求完成对硬件的直接操作。

BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP。

嵌入式系统结构

嵌入式操作系统的主要特点如下:

◆体积小

◆实时性

◆特殊的开发调试环境。。。。

嵌入式系统按软件实时性需求分类

◆非实时系统(如PDA)

◆软实时系统(如消费类产品)

◆硬实时系统(如工业实时控制系统)

实时系统(real-time system)

◆实时系统的正确性依赖于运行结果的逻辑正确性和运行结果产生的时间正

确性,即实时系统必须在规定的时间范围内正确地响应外部物理过程的变

化。

硬实时&软实时

◆“软”意味着如果没有满足指定的时间约束并不会导致灾难性的后果,而对于

硬实时系统来说却是灾难性的。

◆从实践上说,软实时和硬实时之间的区别通常与系统的时间精度有关:典型

的,软实时任务的调度精度必须大于千分之一秒,而硬实时任务为微秒级。

采用RISC架构的ARM微处理器一般具有如下特点:

◆体积小、低功耗、低成本、高性能;

◆支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位

器件;

◆大量使用寄存器,指令执行速度更快;

◆大多数数据操作都在寄存器中完成;

◆寻址方式灵活简单,执行效率高;

◆指令长度固定。

RISC和CISC之间的主要区别:

◆ARM微处理器的工作状态一般有两种,并可在两种状态之间切换:

◆ARM状态,此时处理器执行32位的字对齐的ARM指令;

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

ARM微处理器在开始执行代码时,应该处于ARM状态。

◆大端格式

在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中

◆小端格式

在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中

ARM微处理器中支持字节(8位)、半字(16位)、字(32位)三种数据类型

存储管理单元(MMU)的完成的主要功能有:

◆将主存地址从虚拟存储空间映射到物理存储空间。

◆存储器访问权限控制。

◆设置虚拟存储空间的缓冲特性等。

ARM920T微处理器核的MMU采用了分页虚拟存储管理方式。它把虚拟存储空间分成一个个固定大小的页,把物理主存储的空间也分成同样大小的一个个页。

通过查询存放在主存中的页表,来实现虚拟地址到物理地址的转换。但由于页表存储在主存储中,查询页表所花的代价很大,因此,通常又采用快表技术(TLB translation lookaside buffer)来提高地址变换效率。

TLB技术中,将当前需要访问的地址变换条目存储在一个容量较小(通常8~16个字)、访问速度更快(与微处理器中通用寄存器速度相当)的存储器件中。当微处理器访问主存时,先在TLB中查找需要的地址变换条目,如果该条目不存在,再从存储在主存中的页表中查询,并添加到TLB中。

这样,当微处理器下一次又需要该地址变换条目时,可以从TLB中直接得到,从而提高了地址变换速度。

ARM微处理器支持7种运行模式,分别为:

◆用户模式(usr):ARM处理器正常的程序执行状态。

◆系统模式(sys):运行具有特权的操作系统任务。

◆快速中断模式(fiq):用于高速数据传输或通道处理。

◆外部中断模式(irq):用于通用的中断处理。

◆管理模式(svc):操作系统使用的保护模式。

◆数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟

存储及存储保护。

◆未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于

支持硬件协处理器的软件仿真。

除用户模式外,其它模式均为特权模式。

ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。

后五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。

ARM处理器中有37个寄存器,这些寄存器包括:

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

6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,均为32位,

通用寄存器

通用寄存器包括R0~R15,可以分为三类:

◆未分组寄存器R0~R7;

◆分组寄存器R8~R14;

◆程序计数器PC(R15)。

对于分组寄存器,他们每一次所访问的物理寄存器与处理器当前的运行模式有关。

对于R8~R12来说,每个寄存器对应两个不同的物理寄存器,当使用fiq模式时,访问寄存器R8_fiq~R12_fiq;当使用除fiq模式以外的其他模式时,访问寄存器R8_usr~R12_usr。

对于R13、R14来说,每个寄存器对应6个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外5个物理寄存器对应于其他5种不同的运行模式。

寄存器R13在ARM指令中常用作堆栈指针,R14也称作子程序链接寄存器(Subroutine Link Register)或链接寄存器LR。当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份。寄存器R15用作程序计数器(PC)。

当正常的程序执行流程发生暂时的停止时,称之为异常

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

◆程序状态寄存器作用和各标志位的作用(P31)

◆对异常的响应

(1)将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。

(2)将CPSR复制到相应的SPSR中。

(3)根据异常类型,强制设置CPSR的运行模式位。

(4)强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处,同时设置中断禁止位,以禁止中断发生。

◆异常返回

◆异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:

◆⑴将连接寄存器LR的值减去相应的偏移量后送到PC中。

◆⑵将SPSR复制回CPSR中。

◆⑶若在进入异常处理时设置了中断禁止位,要在此清除。

ARM微处理器支持四种类型的堆栈工作方式,即:

◆满递增方式FA(Full Ascending):堆栈指针指向最后入栈的数据位置,

且由低地址向高地址生成。

◆满递减方式FD(Full Decending):堆栈指针指向最后入栈的数据位置,

且由高地址向低地址生成。

◆空递增方式EA(Empty Ascending):堆栈指针指向下一个入栈数据的空

位置,且由低地址向高地址生成。

◆空递减方式ED(Empty Decending):堆栈指针指向下一个入栈数据的空

位置,且由高地址向低地址生成。

◆在ARM微处理器的数据传送中,数据的源和数据的目标只有两种:一种是ARM

的寄存器R0~R15;另一种就是外部存储器(它们可能是外围模块的寄存器、外部

数据存储器或可访问的程序存储器等)。

◆把数据从存储器到寄存器的传送叫加载,数据从寄存器到存储器的传送叫存储。

在ARM汇编语言程序里有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。

◆伪指令在源程序中的作用是既要把正常的程序用指令表达给计算机以外,又要把程

序设计者的意图表达给编译器.

例如:要告诉编译器程序段的开始和结束,需要定义数据等.

通用伪指令包括:

◆符号定义伪指令

◆数据定义伪指令

◆汇编控制伪指令

◆及其他一些常用伪指令等。

其他常用伪指令是比较重要的,包括:ALIGN伪指令是地址对准伪指令;AREA伪指令是段指示伪指令,用于定义一个代码段或数据段;CODE16和CODE32伪指令是代码长度定义伪指令;ENTRY伪指令是程序入口伪指令,在一个完整的汇编程序中至少要有一个ENTRY;END伪指令是编译结束伪指令,用于通知编译器已经到了源程序的结尾,每个汇编语言的源程序都必须有一个END伪指令定义源程序结尾。等

◆ARM指令系统支持8种寻址方式。

●寄存器寻址

●立即寻址

●寄存器间接寻址

●变址寻址

●寄存器移位寻址

●多寄存器寻址

●堆栈寻址

●相对寻址

Arm指令包括:

存储器访问指令

数据处理类指令

分支指令

协处理器指令

软件中断指令

能够读懂并书写简单的汇编程序,(P76,P77页的例子)

S3C2440A的驱动代码可以在外部的NAND Flash存储器上被执行。为了支持NAND Flash的boot loader,S3C2440A 配备了一个内部的SRAM 缓冲器名为“Steppingstone”。启动时,NAND Flash上的前4Kbyte将被装载到Steppingstone,且执行启动代码。

一般情况下,启动代码会拷贝NAND Flash上的内容到SDRAM。使用硬件的ECC检查NAND Flash的数据。在完成拷贝的基础上,主程序将在SDRAM上被执行。

简述S3C S3C2440中Boot Loader的启动的两个阶段。P246

在S3C2440A芯片内部,除了有专门用于控制NADN Flash存储器的部件(NAND Flash控制器)外,内部还有许多支持NADN Flash存储器接口的寄存器,在设计NADN Flash存储器接口时,还必须对这些寄存器进行操作。

输入输出端口是嵌入式系统硬件平台的重要组成部分,通过输入输出端口可以连接各种类型的外部输入输出设备。这里把在S3C2440A芯片中的输入输出端口称为GPIO端口。

S3C2440A芯片中共有130个GPIO端口,分为9组,GPA ~ GPJ,这9组GPIO端口均为多功能端口,端口功能可以编程设置,若选定某个GPIO端口的功能,用户应在主程序运行之前编程设置对应的控制寄存器,从而选定所需GPIO端口的功能;如果某个GPIO引脚不用于特定功能,那么该引脚就可以设置为普通的输入输出引脚。

在S3C2440A芯片中,所有I/O引脚是功能复用的。因此,在具体使用I/O端口引脚时,应该通过编程设置端口控制寄存器,以决定使用每个I/O引脚的哪种功能。另外,I/O端口的状态(如输入/输出、数据线是否挂起),用户也需要通过编程设置控制寄存器来确定。

1.端口A控制寄存器

端口A的控制寄存器包括GPACON和GPADAT。GPACON是端口A功能设置寄存器,GPADAT是端口A数据寄存器,用来存放端口A对应的数据

2.端口B-J控制寄存器

端口B的控制寄存器包括GPBCON、GPBDAT和GPBUP。GPBCON是端口B功能设置寄存器,GPBDAT是端口B数据寄存器,GPBUP是端口B上拉设置寄存器,用来确定端口B的GPIO引脚是否内部接上拉电阻。

小灯LED编程,蜂鸣器编程(寄存器地址不用记)p124-125

中断的概念p126页

中断控制寄存器及其作用p129-135

DMA控制方式主要用于高速I/O设备与存储器之间进行大批量数据传送。DMA的主要优点就是其传输数据不受CPU的干涉。DMA控制器控制数据直接在I/O设备与存储器之间传送,而不必经过微处理器内部的寄存器,这样就大大提高了数据传送的效率

S3C2440A 通用异步接收器和发送器(UART)提供了三个独立的异步串行I/O端口,每个端口都可以在中断模式或DMA模式下操作。换言之,UART可以在微处理器与UART 接口部件之间通过产生中断或DMA 请求来传输数据。

嵌入式系统的软件开发与通用软件开发的区别主要在于软件实现部分,其中又可以分为编译和调试两部分。

1.交叉编译

所谓交叉编译就是在一个平台上生可以在另一个平台上执行的代码。

嵌入式应用开发需要良好的开发环境的支持。在嵌入式系统中,由于目标机的资源有限,不可能在其上建立庞大复杂的开发环境,因而通常的做法是把开发环境和目标运行环境进行分离。即在宿主机上建立开发环境,进行应用程序编码和交叉编译,然后在宿主机和目标机之间建立连接,将应用程序下载到目标机上进行交叉调试。经过调试和优化,最后将应用程序固化到目标机中实际运行。

其中宿主机是用于开发嵌入式系统的计算机,它通常是拥有大容量内存和硬盘的PC机或工作站。目标机可以是嵌入式应用软件的实际运行环境,也可以是能够替代实际运行环境的仿真系统。

Boot Loader的基本概念

Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

每种不同的CPU 体系结构都有不同的Boot Loader。有些Boot Loader 也支持多种体系结构的CPU。

主机和目标机之间一般通过串口建立连接,Boot Loader 软件在执行时通常会通过串口来进行I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。

Boot Loader启动的两个阶段通常包括的步骤P264

一个嵌入式Linux 系统从软件的角度看通常可以分为四个层次:

1. 引导加载程序。包括固化在固件(firmware)中的boot 代码(可选),和Boot Loader 两大部分。

2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。

3. 文件系统。包括根文件系统和建立于Flash 内存设备之上文件系统。通常用ram disk 来作为root fs。

4. 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。

建立根文件系统的必要性

Linux内核是嵌入式系统运行的基础,系统完成实际任务需要有应用程序来实现,应用程序并未包含到内核中去。Linux系统需要执行文件系统中的应用程序来完成工作,同时文件系统也是支持Linux系统运行的重要部分。Linux内核启动的最后操作之一就是安装(挂载)根文件系统。这一操作完成,Linux下的程序就可以访问基于文件系统的数据文件或者驱动程序了。

简述Linux根文件系统的结构P305

Linux内核由进程管理、内存管理、虚拟文件系统、网络接口和进程间通信五大子系统组成,各个子系统之间的依赖关系如图所示。

内核的移植涉及到如下工作:

1.编写针对特定处理器的代码。内核中关于任务调度、中断处理等的代码要根据不同的处理器类型重新编写。

2.编写针对特定硬件平台的引导和初始化代码。基于同样的处理器,由于硬件系统设计上的不同,或者操作系统装载器的不同,需要实现有针对性的引导和初始化代码。

3.编写针对特定外设的设备驱动程序代码。

内核移植工作主要是修改跟硬件平台相关的代码,一般不涉及Linux内核通用的程序。

嵌入式Linux设备驱动程序分类

●静态加载的驱动程序

●动态加载的驱动程序

Linux将设备按照功能特性划分为三种类型:字符设备,块设备和网络设备。

设备驱动程序的功能p310

在用户空间中,用insmod命令启动模块加载过程p313

同步机制

Linux内核中包含的同步机制包括:原子操作、信号量、读写信号量、自旋锁(spinlock)、大内核锁(Big Kernel Lock,BKL)、读写锁(rwlock)、读拷贝更新(Read-Copy Update,RCU)和seqlock(顺序锁)等。(知道4种)

字符设备驱动程序可以分为三个主要组成部分:

1,自动配置和初始化子程序,负责检测所要驱动的硬件设备是否存在和是否能正常工作。2,服务于I/O请求的子程序,又称为驱动程序的上半部分。

3,中断服务子程序,又称为驱动程序的下半部分。

1.主次设备号:字符设备和块设备通过文件系统中的名子来存取。

主编号标识设备相连的驱动。

次编号被内核用来决定引用哪个设备

Linux 一些简单的基本命令

使用汇编语言采用子程序调用的方法计算的结果,即实现R0=R0-R1-R2-R3 P77

LED灯显示编程,注意能够按不同的显示顺序编程理解透彻

蜂鸣器编程示例

相关文档
最新文档