计算机三级嵌入式系统开发技术考点总结Word格式.docx
《计算机三级嵌入式系统开发技术考点总结Word格式.docx》由会员分享,可在线阅读,更多相关《计算机三级嵌入式系统开发技术考点总结Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
目前程序存储器大都采用Flash存储器,而数据存储器可采用SRAM和DDR或DDR2或普通的DRAM。
中断控制器:
一般采用向量中断(VIC)或嵌套向量中断(NVIC)方式管理中断。
Cortex-M系列就支持嵌套的向量中断。
DMA控制器:
直接存储器访问控制器
电源管理与时钟控制器:
ARM处理芯片内部的电源管理主要有正常工作模式、慢时钟模式、空闲模式、掉电模式、休眠模式、深度休眠模式等。
时钟信号是ARM芯片定时的关键。
GPIO端口:
通用输入/输出端口。
输入时具有缓冲功能,输出时具有锁存功能。
定时计数组件:
看门狗定时器(WDT)、Timer通用定时器、RTC、脉冲宽带调制器(PWM)
模拟通道组件:
ADC、DAC、比较器。
ADC:
模拟到数字的转换器。
DAC:
数字到模拟的转换器。
比较器主要功能是当比较器正端电压高于负端电压时,输出电压值接近正电源电压,反之输出电压接近负电源电压。
互联通信组件:
UART、I^2C、SPI、CAN、USB、Ethernet等。
UART:
通用异步收发器。
I^2C:
集成电路互连的一种总线标准,只有两根信号线,一根是时钟线SCL,一根是数据线SDA(双向三态)
I^2S:
面向多媒体应用的音频串行总线。
SPI:
串行外设接口。
包括MISO、MOSI、SSL和SCK。
可完成全双工的同步串行通信,用于板级芯片之间的短距离通信。
CAN:
控制器局域网,仅有CANH和CANL两根信号线,采用差分方式传输数据,可以进行远距离多机通信。
主要用于要求抗干扰能力强的工业控制领域,可组成多主多从系统。
USB:
通用串行总线,主要应用于与外部设备的短距离通信,也采用差分方式传输数据,是目前应用最广的串行总线接口形式。
Ethernet:
以太网通信接口
常用ARM嵌入式处理芯片:
NXP的、TI的、Samsung的、Atmel的、ST的、Freescale的、Nuvoton的、Intel的等等
嵌入式处理芯片选型遵循:
性价比原则和参数选择原则
3.3嵌入式系统的存储器
存储器层次结构
对于CPU使用最频繁的少量的程序代码和数据用SRAM作为高速缓冲存储器(Cache)存放;
正在运行中的程序的大部分数据和代码存放在主存储器(内存)中;
尚未启动运行的其余程序或数据则存放在容量大的外部存储器如磁盘(虚拟内存)中待命。
目前嵌入式系统采用SRAM作为Cache,Cache又分为嵌入式处理器内部一级Cache(L1)和二级Cache(L2)
存储器分类
按存取特性可分为随机存取存储器(RAM)和只读存储器(ROM);
按所处物理位置可分为片内春初期(芯片内置的存储器)和片外存储器(外部扩展的存储器)以及外部存储设备;
按照存储信息的不同可分为程序存储器和数据存储器。
在嵌入式系统中把片内存储器及片外扩展的存储器简称内存,把外部存储设备简称外村。
嵌入式系统的存储器以半导体存储器为主。
FRAM:
铁电随机存取存储器;
MRAM:
磁性随机存取存储器
随机存取存储器
包括静态和动态两种形式,即SRAM和DRAM,都是易失性存储器。
目前嵌入式处理器内嵌的数据存储器基本都采用SRAM,外部扩展的存储器大都采用DRAM及改进型(DDRSDRAM、DDR2SDRAM、DDR3、DDR4)
只读存储器
MROM、PROM、EPROM、EEPROM、FlashROM、NORFlash和NANDFlash
NANDFlashROM以页(行)为单位随机存取,速度慢,变成复杂,大多作为数据存储器使用。
(数码相机、MP3随身听记忆卡、U盘)
NORFlashROM以字节为单位随机存取,写入和擦除速度较慢。
铁电存储器:
非易失,可取代SRAM和Flash存储器
磁性存储器:
可取代Flash存储器
存储器主要性能指标
存储器的存取速度、存储容量、带宽
容量:
对于内存容量而言,单位之间换算以2^10=1024倍表示,对于外存容量(磁盘、U盘、Flash存储卡),以10^3=1000倍表示。
内存储器容量取决于存储单元的个数和存储器各单元的位数:
内存容量=单元总数*数据位数/单元
存储芯片的容量完全取决于存储器芯片的地址线条数和数据线的位数。
V=2^m*n(L:
单元个数,n:
数据线位条数,m:
地址条数,m=log2L)
存取时间:
从CPU给出有效的存储器地址开始到存储器读出数据所需要的时间。
带宽:
存储器每秒可传输的最大数据总量。
并行总线的存储器带宽:
带宽=总线频率*数据宽度/8*传输次数/总线周期(B/s)串行总线带宽=总线频率*1/10以10位为一个数据帧(含一字节数据)
片内存储器
片内Cache、片内FlashROM(嵌入式微控制器内部集成的程序存储器)、片内SRAM(集成的数据存储器,SRAM属于易失性存储器)、片内E2PROM(作为长期保存重要数据的存储器,属于非易失性)
、片内FRAM(具有RAM和ROM的全部特点,是当前嵌入式微控制器内部的主要存储器之一)
片外存储器
外部存储器的扩展是靠ARM内核提供的高带宽外部存储器控制器接口完成的。
片外程序存储器:
NORFlash、NANDFlash
片外数据存储器:
SDRAM、DDR/DDR2/DDR3/DDR4
外部存储设备
SM卡、CF卡、MMC、SD卡、记忆棒、XD卡、U盘、微硬盘
3.4I/O接口及常用I/O设备
通用I/O接口GPIO
嵌入式系统外部通信接口
基于UART的RS-232/RS-485接口
RS-232接口:
传输距离可以达到15m左右,无法消除共模干涉。
RS-485接口:
采用差分信号传输方式,具有很强的抗共模干扰能力,传输距离可达1200m,不能构成多主系统
CAN总线接口
广泛应用于工控领域以及要求抗干扰和实时性强的场合;
采用差分创术,控制器内置CRC教研,传输可靠性强,可构成多主多从系统;
CAN总线的数据帧由7不同的域组成:
帧起始、仲裁域、控制域、数据域、CRC域、应答域。
帧结尾,其中数据域的长度可选为0-8B
以太网通信接口:
分为基于内置以太网控制器的以太网接口(以太网控制器MAC层,物理层PHY层的收发器电路)和不带内置以太网控制器的以太网接口
常用无线通信接口
GPS、GPRS、WiFi、蓝牙以及通用射频通信模块等
GPS模块:
必须具备GPS终端、传输网络和监控平台三个要素。
GPRS模块:
以封包(Packet,也称为分组)方式进行数据传输。
WiFi模块:
使用IEEE802.11系列协议,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户串口、TTL电平、USB接口或SPI接口数据到无线网络之间的转换。
蓝牙模块:
支持设备短距离通信(10m内)的无线低速(1Mb/s)通信技术,基于串口UART或USB
其他无线模块:
射频无线收发模块,如Si4432
嵌入式系统的软件组成
嵌入式系统与通用计算机系统的软件的相同之处指的是:
嵌入式系统具备引导加载程序、外部设备驱动程序、操作系统、文件系统、网络协议栈、图形用户界面、数据库、各种各样的应用程序等
区别:
嵌入式系统的软件配备没有通用计算机那样多;
通用计算机的软件系统无疑以操作系统为核心,不可或缺;
对于数据库、图形用户界面、因特网浏览器、媒体播放器等基于操作系统的外围工具软件,如果运行在通用计算机上则具有内部结构细致化、运行效率高效化、代码重量化的特点。
嵌入式操作系统
RTOS:
实时操作系统IEEE:
美国电气电子工程师协会
实时系统的属性
时间约束性。
分为硬实时系统、软实时系统。
常见的系统大多是软实时系统。
可预测性;
可靠性
按响应时间将实时系统分为三类:
强实时系统:
响应时间在毫秒级或微秒及。
普通实时系统:
响应时间一般在几秒;
弱实时系统:
响应时间一般在数十秒。
实时操作系统
IEEE的实时UNIX分委会认为实时操作系统应该具备7个特征:
1.具有异步I/O和中断处理能力2.任务切换时间和中断延迟时间确定3.优先级中断和调度4.抢占式调度5.内存锁定6.连续文件7.同步
RTOS的三个主要实时指标:
响应时间(中断延迟时间和任务切换时间)、吞吐量(在给定时间内,实时系统可以处理的事件总数)、生存事件(输入数据的有效等待时间)
嵌入式操作系统概述
嵌入式操作系统(EOS)是嵌入式系统中的软件。
与通用计算机的操作系统相比较具有可移植、强调实时性能、内核精简、抢占式多任务处理、使用可重入函数、可配置、可裁剪、高可靠性等特点。
嵌入式操作系统可粗略地分为内核、驱动程序、服务模块与行命令解释程序几大部分。
内核有广义和狭义两种解释。
广义:
指装入在存储器里的嵌入式软件中的操作系统部分。
狭义:
指嵌入式操作系统中负责多任务管理及任务间通信的多任务处理部分。
它执行任务创建与初始化、任务调度、时钟管理、中断管理。
内存管理等。
例如μCOS-II就是典型的纯内核例子。
主流嵌入式操作系统
TinyOS:
开源,深度轻量级,先进先出调度,用于无线传感器网络
μC/OS-II/III:
小型嵌入式操作系统内核,不含设备驱动程序和文件系统。
开源,用于工控领域。
iOS:
苹果公司,微内核,系统结构分为4个层次:
核心操作系统、核心服务层、媒体层、触摸框架层,系统运行占用约512MB。
iOS与苹果公司的MacOSX操作系统一样,也是以DarwinOS为基础的,因此同样属于类Unix的商业操作系统。
WindowsEmbeddedCompact8:
即以前的WinCE操作系统。
属于大型嵌入式操作系统。
可用于手持设备。
。
具有HAL和OAL。
WindowsPhone8:
前驱产品是2003年问世的WindowsMobile。
用于手机操作系统。
VxWorks:
目前公认为实时性最强、可靠性最高的一种嵌入式实时操作系统。
广泛应用于航空航天、通信和国防领域。
属于大型商用操作系统,具有配套的Tornado集成开发环境。
嵌入式Linux:
普通Linux操作系统移植到嵌入式硬件平台上的版本。
开源、不存在黑箱技术,
安卓操作系统:
以Linux为基础,半开放源代码操作系统,属于大型操作系统,通过AndroidSDK使用Java作为编程语言来开发Android应用程序。
eCOS:
免费和开源的实时操作系统,使用于嵌入式系统和那些只需要一个进程多个线程的应用项目。
QNX:
实时,可扩充,内核小巧,速度快,可应用于虚拟机。
嵌入式操作系统分类
(1)按源代码规模分类:
分为小型和大型,区别是源代码行数数量大小,超过10000行语句为大型,否则为小型。
(2)按内核大小分类:
小内核和大内核,前者最小内核8KB,后者最小320KB。
(3)按照能否免费获得源代码分类:
开放源代码和不开放源代码,开源系统:
μCLinux、RTLinux、NucleusPlus、ECOS、μC/OS-II(4)按照实时性能分类:
分为强实时型和普通实时型。
强实时:
VxWorks、片SOS、μCOS-II等,普通实时:
WindowsEmbedded、μCLinux、Symbian等。
(5)按照内核结构分类:
单内核和微内核。
单内核又称宏内核,内部含有进程管理、调度器、时间管理、设备管理、文件管理等模块。
耦合度高,通过函数调用实现模块之间通信。
如Unix、嵌入式Linux、WinCE、MacOS、AndroidOS和DOS
微内核:
内核小巧,接口一致,松散耦合,人物间通信机制为消息机制,以消息传递方式相传。
如:
Symbian、VxWorks、QNX、μC/OS-II、iOS等,iOS前身是在DarwinOS基础上研发的iPhoneOS,是一个类Unix操作系统,属于微内核架构。
嵌入式操作系统的仿真平台
一般指嵌入式系统开发过程中使用的指令集模拟器、仿真软件或者虚拟机管理软件。
如ARM公司的Armulator和清华大学研发的SkyEye都是ARM指令集模拟器,更奇安达的为VMware虚拟机,可搭建嵌入式Linux的仿真开发平台。
硬件抽象层、板级支持包和引导加载程序
底层软件主要就是指硬件抽象层、板级支持包和启动引导程序。
硬件抽象层(HAL)WindowsNT。
板级支持包(BSP)由美国风和公司(VxWorks研发商)提出。
一般而言,音质VxWorks操作系统有四种操作类型
:
宿主机移植、体系结构移植、目标板移植、升级以前Tornado集成开发环境版本的BSP到最新版本。
硬件抽象层(HAL)
热点:
是嵌入式硬件电路板的最基本软件,基本上是用标准C编写的,负责嵌入式操作系统移植,需集中精力在HAL上座关键代码的编程工作,从而加速操作系统的移植。
含有HAL的操作系统:
RTAL、eCOS、μITRON和NiosII。
板级支持包BSP
HAL和BSP的异同:
对于同样的一个电路板,HAL一般只有一个,但是不同的操作系统拥有不同的BSP;
移植一个操作系统A到一块新的电路板,为了构造BSP,需要改写的源代码基于两种来源,一种是操作系统A在类似电路板的BSP,另一种是这块电路板的HAL。
BSP含有电路板的全套初始化程序,包括操作系统初始化,它要为操作系统的正常运行做好准备,而HAL通常也包括硬件初始化程序,但是不完整,例如不包括操作系统的初始化处理。
引导加载程序
嵌入式系统加电后执行的第一批最初操作成为引导或者自举(Boot),对应的程序成为引导程序或者引导加载程序(Bootloader)。
引导加载程序主要完成内存加电自检、外设存在自检、内存地址映射、初始化外围设备、内存寻址定位、加载和启动操作系统。
典型嵌入式系统启动顺序:
(1)上电后,Bootloader将执行基本的硬件自检、初始化硬件控制寄存器、初始化SDRAM等工作
(2)Bootloader将OS内核映像文件从非挥发存储介质(如Flash)中复制到SDRAM中,并将控制权转交给OS。
(3)OS内核执行创建页表、驱动外设、初始化中断控制系统等OS的流程,最终创建应用程序执行环境甚至图形用户界面。
Bootloader的两个执行阶段
stage1的基本步骤:
基本硬件初始化,为加载stage2准备RAM空间,拷贝stage2的执行代码到RAM空间中,设置栈区指针SP,跳转到stage2的C程序入口点。
硬件初始化一般包括:
关闭WatchDog、关中断、设置CPU的速度和时钟频率、RAM初始化等。
stage2的基本步骤:
启动加载模式下Bootloader的stage2操作流程:
初始化本阶段要使用到的硬件设备,检测系统内存映射,将内存映像和根文件系统映像从Flash上读到RAM空间中,为内核设置启动参数,调用内核。
下载模式下Bootloader的stage2操作流程:
初始化本阶段要使用到的硬件设备,主要是串口、网口和Flash存储器等;
等待用户输入行命令以进入下载模式,否则直接进入启动加载模式;
通过串口终端与调试主机建立连接,提供人机交互接口;
接收用户输入,通过串口或者网口进行文件下载,将文件写入Flash存储器保存;
下载完毕,继续等待用户输入或者重启系统。
嵌入式Linux的Bootloader执行步骤
初始化处理器及外设的硬件资源配置;
建立内存空间的映射管理,使能MMU,将系统的外存和内存地址变换激活,为最终调用操作系统内核做好准备;
装载操作系统映像到内存;
对Flash存储器编程;
运行操作系统;
传递系统启动参数;
命令行解析和输入/输出控制。
U-Boot被认为是功能全面、具有灵活性以及应用广泛的开放源代码Bootloader,目前由DENX公司维护。
就目前来说,U-Boot对PowerPC系列处理器的支持最为丰富,对Linux的支持最为完善,国内ARM9实验箱通常使用U-boot作为Bootloader,引导多种嵌入式操作系统。
嵌入式Linux操作系统
Linux是目前唯一可免费获得的、能为多用户提供多任务、多线程功能的大型操作系统。
最初以Unix为原型,以实现POSIX标准为目标,是最好的类Unix操作系统。
嵌入式Linux:
MontanaVistaLinux、μClinux、RTLinux(硬实时)、RTAI
从顶视图看,嵌入式Linux操作系统主要由用户进程、OS服务组件和Linux内核三大子系统组成。
用户进程:
在Linux系统上运行的应用程序集合。
OS服务组件:
位于Linux操作系统内核之上的一层服务模块或者实用程序集合,例如行命令解释程序(Shell)、窗口系统(例如XWindows、QT)、内核编程接口等。
Linux内核:
主要作用:
进程管理与调度、内存管理、文件管理、网络接口和进程间通信。
由5个子系统组成:
进程调度SCHED、内存管理MM、虚拟文件系统VFS、网络接口NET、进程间通信IPC。
嵌入式操作系统μC/OS-II
μC/OS-II的基本特点
μC/OS-II是抢占式实时操作系统内核,不涉及硬件驱动程序。
只能管理64个任务,目前版本保留8个任务给系统,这样用户编写的应用程序最多可以有56个任务。
不支持时间片轮转调度法,赋予每个任务的优先级是不同的,每个任务拥有自用栈。
使用μC/OS-II的栈空间校验函数可以确定每个任务到底需要多少栈空间。
μC/OS-II的层次位置
μC/OS-II嵌入式应用系统开发具有面向任务的特点。
任务中的功能处理可以通过调用API函数实现,也可以通过中断服务例程ISR实现。
应用程序接口层(API)主要包括文件系统、TCP/IP网络协议栈、图形用户界面、中文系统、嵌入式数据库、因特网Web浏览器等。
μC/OS-II的代码结构与初始化
大部分代码由标准C语言写成。
μC/OS-II主要由三大类程序文件构成,这三大类程序按照硬件和应用相关性分为:
与处理器类型无关的代码、与应用程序有关的代码和与硬件平台移植相关的代码。
按照功能还可以把这些文件分成核心模块、预处理模块、进程间通信(IPC)模块、内存管理模块、任务与调度管理模块、时间管理模块以及移植模块。
μC/OS-II的启动过程:
Bootloader执行完毕后,调用应用程序主文件(main()函数)。
main()函数在执行过程中,除了用户函数和硬件初始化函数外,按照以下次序执行3个主要的μC/OS-II函数:
1.操作系统初始化OSInt();
2.任务创建OSTaskCreat();
3.任务调度开始OSStart()。
一旦OSStart()函数开始执行,就标志着μC/OS-II进入了多任务调度的正常运行状态。
OSInit函数先建立最初的任务就绪表,然后建立4个空白的数据链表。
这些内存的空白数据区开辟之后,OSInt创建第1个任务,这就是空闲任务(IdleTask),优先级设为最低(取常量OS_LOWEST_PRIO的值),创建之后进入就绪态。
条件满足的话,OSInt还创建一个统计任务OSTaskStat,也让进入就绪态,OSTaskStat优先级取为OS_LOWEST_PRIO-1(次低级)。
在main.c代码文件中还有两个μC/OS-II的函数,其中OSTaskCreate函数创建用户定义的一个任务,OSStart启动μC/OS-II多任务调度。
在μC/OS-II多任务调度启动前,用户至少要使用OSTaskCreate函数建立一个应用任务。
μC/OS-II任务的创建:
可以使用OSTaskCreate函数或者OSTaskCreateExt函数。
一个任务通常是一个无限的循环,有函数返回类型,有形式参数变量,但是任务绝不会返回的,故返回参数必须定义为void。
μC/OS-II的内核
μC/OS-II是嵌入式操作系统领域中的最小内核之一,只提供任务调度、任务间通信(ITC)与同步、任务管理、时间管理、内存管理、等基本功能。
抢占式任务调度、多任务通信。
临界区:
指处理时不可分割的代码。
一旦执行,不允许任何中断。
在进入临界区之前必须关中断,执行完临界区代码之后要立即开中断。
μC/OS-II调用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()两个宏来执行关中断和开中断。
μC/OS-II的任务状态
μC/OS-II操作系统可以定义的最大任务数是64个,最高优先级定为0,最低优先级取值为实际定义的最大任务数减1.任务建立之后,拥有优先级、执行函数、自用栈空间和任务控制块(TCB),运行时能够完全控制CPU的操作以及全部用户可访问寄存器的操作。
绝大多数情况下μC/OS-II的每个任务都是一个无限的循环。
每个任务处在以下5个状态之一:
休眠态、就绪态(记录在就绪任务集中)、运行态、挂起态和被中断态。
任务控制块OS_TCB:
内核对任务的管理通过任务控制块OS_TCB进行。
OS_TCB全部驻留在RAM。
OS_TCB数据结构中的OSTCBX、OSTCBY、OSTCBBitX、OSTCBBitY4个变量用于加速任务进入就绪态的过程或进入等待事件发生状态的过程。
μC/OS-II的任务调度
μC/OS-II的就绪任务登记在就绪表中。
就绪表由两个变量OSRdyGrp和OSRdyTbl[]构成。
μC/OS-II总是运行处于就绪态任务中优先级最高的那一个,由调度器(Scheduler)确定哪个任务优先级最高,下面应该执行哪一个任务。
任务级的调度是由函数OSSched()完成的,是任务调度的前导函数;
中断级的调度是由另一个函数OS