本篇文章主要转载自 嵌入式复习,便于自己复习使用。
1 基本概念
嵌入式系统概念:以应用为中心,以计算机为基础,软件、硬件可裁剪,功能、可靠性、成本、体积、功耗严格要求的专用计算机系统(国内);用于控制、监控或辅助操作机器和设备的装置(IEEE);
嵌入式发展阶段:无操作系统阶段、简单操作系统阶段、实时操作系统阶段、面向Internet阶段;
嵌入式应用领域:工业控制、交通管理、信息家电、家庭智能管理、网络及电子商务、环境监测和机器人等方面。
嵌入式技术的发展趋势:
- 嵌入式应用软件的开发需要强大的开发工具和操作系统的支持;
- 联网成为必然趋势;
- 精简系统内核、算法,设备实现小尺寸、微功耗和低成本;
- 提供精巧的多媒体人机界面;
嵌入式系统的基本组成:
![](https://i-blog.csdnimg.cn/blog_migrate/1fb6ac0dac4bd6564b736e25a94447f0.png#pic_center)
![](https://i-blog.csdnimg.cn/blog_migrate/f72bdbb9d850f5fe0b06954fe967842c.png#pic_center)
嵌入式系统的重要特征:
- 系统内核小
- 专用性强
- 系统精简和高实时性操作系统
- 高效率的设计
- 创新性和有效性
- 嵌入式软件开发走向标准化
- 嵌入式系统开发工具和环境
嵌入式系统的硬件组成:
嵌入式系统基本硬件架构主要包括有处理器、外围电路及接口和外部设备三大部分。其中外围电路一般有时钟、复位电路、程序存储器、数据存储器和电源模块等部件组成;
![](https://i-blog.csdnimg.cn/blog_migrate/fc3175c1dfaf479d668ef9be9ec45800.png#pic_center)
嵌入式处理器分类:
- 嵌入式微控制器(MCU):主要特点:单片化,体积大大减小,功耗和成本低、可靠性提高。
- 嵌入式DSP处理器(DSP):专门用于信号处理方面的处理器,具有在系统结构和指令算法方面进行了特殊设计,执行DSP算法,编译效率较高,指令执行速度也很快。
- 嵌入式微处理器(MPU):只保留和嵌入式应用紧密相关的功能硬件,去除冗余部分,体积小、重量轻、成本低、可靠性高的优点。
- 嵌入式片上系统(System On Chip):成功实现了软/硬件无缝结合。可以直接在处理器片内嵌入操作系统的代码模块。可以用VHDL等硬件描述语言进行系统设计。只需要使用精确的编程语言,综合时序设计可直接在器件库中调用各种通用处理器标准。
嵌入式系统好处:就是屏蔽了底层硬件的差别,给上层应用提供统一的接口,并管理进程调度和资源(如CPU时间、内存)分配等。
主要有实时系统、分时系统(非实时系统)和顺序执行系统。
(1)实时操作系统:系统内有多个程序运行,每个程序有不同的优先级,只有最高优先级的任务才能占有CPU的控制权。VXworks、UC/OS
(2)分时操作系统:系统内同时可以有多个程序运行,把CPU的时间分按顺序分成若干片,每个时间片内执行不同的程序,如UNIX,windows。
(3)顺序执行系统:系统内只含有一个程序,独占CPU的运行时间,按语句顺序执行该程序,直至执行完毕,另一程序才能启动运行。如DOS操作系统
实时性:它的正确性不仅与系统的逻辑正确性相关,而且与系统的响应时间相关。
具有强(硬)实时特点的嵌入式操作系统
系统在指定的时间内未能实现某个确定的任务,会导致系统的全面失败,则被称为硬(强)实时系统。硬实时系统,其系统响应时间在毫秒或微秒级。一个硬实时系统通常在硬件上需要添加专门用于时间和优先级管理的控制芯片,uc/os和VxWorks是典型的实时操作系统。
具有弱(软)实时特点的嵌入式操作系统
在软实时系统中,虽然响应时间同样重要,但是超时却不会发生致命的错误。软实时系统则主要在软件方面通过编程实现现实的管理。比如Windows CE、uCLinux是一个多任务分时系统。一般软实时系统,其系统响应时间在毫秒或几秒的数量级上,其实时性的要求比强实时系统要差一些(电子菜谱的查询)。
2 基本组成
嵌入式系统的硬件基本组成
嵌入式系统的硬件是以嵌入式微处理器为核心,主要由嵌入式微处理器、总线、存储器以及I/O接口和设备组成。
嵌入式微处理器的体系结构
![](https://i-blog.csdnimg.cn/blog_migrate/3b5db39280605a73e8eed9ce9ac6fc34.png#pic_center)
目前使用冯.诺依曼结构的CPU和微控制器品种有很多,例如Intel公司的8086系列及其他CPU,ARM公司的ARM7、MIPS公司MIPS处理器等。
目前使用哈佛结构的CPU和微控制器品种有很多,除DSP处理器外,还有摩托罗拉公司的MC68系列、Zilog公司的Z8系、ATMEL公司的AVR系列和ARM公司的ARM9、ARM10和ARM11等。
![](https://i-blog.csdnimg.cn/blog_migrate/4cf7972c2d3bba0bdc1a757e4b620acd.png#pic_center)
总线
- 片内总线:与嵌入式微处理器集成在一起(如:AMBA、AVALON、OCP、ISHBONE等)。
- 片外总线:集成在嵌入式微处理器内或外接芯片扩展上,用于连接外部设备。
- 片内总线的选择取决于CPU core;片外总线的选择取决与应用;
存储器
- 片内存储器:存储容量小、速度快、价格较高
可以做主存的存储器有:
- ROM类:Nor Flash、EPROM、E2PROM、PROM等;
- RAM类:SRAM、DRAM、SDRAM等;
外存:容量大、成本低
在嵌入式系统中常用的外存有:
- NandFlash
- DOC(Disk On Chip)
- CF(Compact Flash)
- SD(Secure Digital)
- MMC(Multi MediaCard)等
SRAM速度快、价格贵;
DRAM速度较SRAM慢、价格便宜;
NOR Flash具有随机存储速度快、电压低、功耗低、稳定性高等特点。
NandFlash具有容量大、回写速度快、芯片面积小等特点,主要用于外存。
输入/输出接口和设备
输入/输出接口主要有中断控制器、DMA、串行和并行接口等,设备主要有定时器(Timers)、计数器(counters)、看门狗(watchdog timers)、RTC、UARTs、PWM(Pulse width modulator)、AD/DA、显示器、键盘和网络等。
嵌入式处理器分类
按用途来分,嵌入式微处理器可以分为嵌入式DSP和通用的嵌入式微处理器两种;
在最普通的情况下,嵌入式微处理器包括:
片内存储器:部分嵌入式微处理器
外部存储器的控制器,外设接口(串口,并口)
LCD控制器:面向终端类应用的嵌入式微处理器
中断控制器,DMA控制器,协处理器
定时器,A/D、D/A转换器
多媒体加速器:当高级图形功能需要时
总线
其他标准接口或外设
流水线
通常采用单周期执行指令,可能导致比较长的流水线
流水线的概念:流水线,亦称管线,是现代计算机处理器中必不可少的部分,是指将计算机指令处理过程拆分为多个步骤,并通过多个硬件处理单元并执行来加快指令执行速度。
嵌入式微处理器的功耗管理
降低工作电压
提供不同的时钟频率
关闭暂时不使用的功能块
提供功耗管理机制
运行模式(Running Mode):处理器处于全速运行状态下。
待命模式(Standby Mode):处理器不执行指令,所有存储的信息是可用的,处理器能在几个周期内返回运行模式。
时钟关闭模式(clock-off mode):时钟完全停止,要退出这个模式系统需要重新启动。
影响功耗的其他因素还有总线和存储器的类型大小
ARM(Advanced RISC Machine)是专门从事基于RISC技术芯片设计开发的公司,主要出售芯片设计技术的授权,作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可由合作公司生产各具特色的芯片,半导体生产商从ARM公司购买其设计的ARM微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。
ARM内核是一种32位RISC微处理器,具有功耗低、性价比高、代码密度高等三大特色。
什么是Thumb指令?
Thumb指令集可以看作是ARM指令压缩形式的子集,它是为减小代码量而提出,具有16bit的代码密度。
什么是Thumb-2指令?
Thumb-2是16位Thumb指令集的一个超集,在Thumb-2中,16位指令首次与32位指令并存,结果在Thumb状态下可以做的事情丰富了许多。
‘T’是Thumb指令或者Thumb-2指令;
‘E’提供DSP能力
‘J’增加了Jazelle扩展以支持Java加速技术
数据类型
字节型类型(Byte):数据宽度为8bits
半字数据类型(HalfWord):数据宽度为16bits,存取式必须是以2字节对齐方式
字数据类型(Word):数据宽度为32bits,存取时必须以4字节对齐的方式
- char:1
- short:2
- int:4
- long:4
- float:4
- double:8
什么叫字节对齐?
如果一个数据是以能被4或者2整除的地址开始的连续存储,那么它就是字节对齐,否则就是非字节对齐。
为什么必须字节对齐?
原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。如有些只能访问偶地址,有些只能访问4的倍数地址。字节对齐存储可提高CPU效率
7种CPU模式
![](https://i-blog.csdnimg.cn/blog_migrate/f9e7dceb4577646bef8d1c961f84837f.png#pic_center)
![](https://i-blog.csdnimg.cn/blog_migrate/d1690334b332b8dddeb082c4700887b4.png#pic_center)
处理器工作状态:
- ARM:32位,执行字对准的ARM指令(从能被4整除的存储器地址一次取4字节arm指令)
- Thumb:16位,执行半字对准的Thumb指令(从能被2整除的存储器地址一次取2字节Thumb指令)
ARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内容
处理器为什么要有两种状态?
在保证处理器性能的同时,更少的占用内存,更低的功耗
ARM处理器有37个寄存器
31个通用寄存器:程序计数器、堆栈及其他通用寄存器;6个状态寄存器
R8-R12各有两组物理寄存器:一组为FIQ模式,另一组是除FIQ以外的其他模式。
R13-R14各有6个分组的物理寄存器,一个用于用户模式和系统模式,其他5个分别用于5种异常模式。访问时需要指定它们的模式,如:R13_<mode>,R14_<mode>;其中:<mode>可以从usr、svc、abt、und、irq和fiq六种模式中选取一个
程序状态寄存器
![](https://i-blog.csdnimg.cn/blog_migrate/4bc3973bb5cf768a48262af4385a552b.png#pic_center)
异常
是由内部或者外部原因引起的,当异常发生时CPU将暂停执行当前指令自动到指定的向量地址读取指令并且执行。
![](https://i-blog.csdnimg.cn/blog_migrate/d662df8dc77d6482133f6dd92569e60b.png#pic_center)
![](https://i-blog.csdnimg.cn/blog_migrate/7c3fc53b8c7860894711e5fd98579e01.png#pic_center)
![](https://i-blog.csdnimg.cn/blog_migrate/a574c2cfb735ca60d987a75b06704e5b.png#pic_center)
内存和I/O
ARM的寻址空间是线性的地址空间,2^32=4G
ARM支持大端和小端的内存数据方式
![](https://i-blog.csdnimg.cn/blog_migrate/44ff3871c0740d83efb005d50e58e3a8.png#pic_center)
![](https://i-blog.csdnimg.cn/blog_migrate/bf1adc0c65903616aecb6984040da708.png#pic_center)
![](https://i-blog.csdnimg.cn/blog_migrate/6dc7783302cbc2a6071846fdb2a313a2.png#pic_center)
总线宽度、频率与总线带宽之间的关系
答:总线带宽=(总线宽度/8)总线频率
![](https://i-blog.csdnimg.cn/blog_migrate/f41f50dd177b3efc8920bd4b0fa459d9.png#pic_center)
驱动层BSP
- BSP的概念:BSP是板级支持包,是介于主板硬件和操作系统之间的一层,属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行与硬件主板。
BSP对于不同的操作系统有不同的形式
操作系统层OS
- 操作系统功能简单来说就是隐藏硬件细节,而只提供给应用程序开发人员一个个抽象的接口。
- 操作系统层包括嵌入式内核、嵌入式TCP/IP网络系统、嵌入式文件系统、嵌入式GUI系统和电源管理等部分。其中嵌入式内核是基础和必备的部分,其他部分要根据嵌入式系统的需要来确定。
- 操作系统负责确定可在CPU上执行的程序及其执行时间的长短,此功能称为进程调度,调度的方法由操作系统所定的优先策略决定。
中间层
中间层为上层软件提供了设备操作接口。
应用层
应用层软件主要由多个相对独立的应用任务组成。每个应用任务完成特定的工作。
嵌入式软件运行流程:
![](https://i-blog.csdnimg.cn/blog_migrate/d25f0c74562d987658070b4fef450486.png#pic_center)
1、上电复位、板级初始化阶段
嵌入式系统完成上电复位后完成板级初始化工作。板级初始化程序具有完全的硬件特性,一般采用汇编语言实现。不同的嵌入式系统,板级初始化时要完成的工作具有一定的特殊性,但以下工作一般是必须完成的:
- CPU中堆栈指针寄存器的初始化。
- CPU芯片级的初始化:中断控制器、内存等的初始化。
2、系统引导/升级阶段
根据需要分别进入系统软件引导阶段或系统升级阶段。通过测试通信端口数据或判断特定开关的方式分别进入不同阶段。
- 远程升级:TFTP、FTP、HTTP
- 串口本地升级:超级终端、特定升级软件
3、系统初始化阶段
系统初始化需要按特定顺序进行
4、应用初始化阶段
进行应用任务的创建,信号量、消息队列的创建和应用相关的其它初始化工作。
5、多任务应用运行阶段
系统进入多任务状态,操作系统按照已确定的算法进行任务调度,各应用任务分别完成特定功能。
操作系统可以简单的分为通用操作系统和实时操作系统(RTOS)
实时操作系统就是”在给定时间内提供某种程度的服务,如果在规定的时间内没有得到结果,那整个的系统就是失败”。
实时操作系统特点:
-
多任务
-
任务的事件驱动
-
中断与中断优先级
-
- 异常中断的优先级
-
- 微处理器的异常中断响应过程
-
- 从异常中断处理程序中返回
-
同步与异步
-
资源与临界资源
-
容错与安全
操作系统体系结构:
体系结构是操作系统的基础,它定义了硬件与软件的界限、内核与操作系统其它组件的组织关系、系统与应用的接口。
目前操作系统的体系结构可分为:单块结构(Linux)、层次结构和客户/服务器(微内核)结构。
![](https://i-blog.csdnimg.cn/blog_migrate/9d30bc676c209ad71e64f0a29022212b.png#pic_center)
目前嵌入式操作系统主要采用分层和模块化相结合的结构或微内核结构。
分层和模块化相结合的结构将操作系统分为硬件无关层、硬件抽象层和硬件相关层,每层在划分功能模块。移植工作便集中在硬件相关层。微内核结构便于扩展。
![](https://i-blog.csdnimg.cn/blog_migrate/26f33b182ce1e6b1f4946999b6b78121.png#pic_center)
![](https://i-blog.csdnimg.cn/blog_migrate/21cd103e1553a8ce822f216bf2d739e6.png#pic_center)
1、嵌入式操作系统的功能
负责嵌入式系统的全部软、硬件资源的分配、调度,将CPU时钟、I/O、中断等资源封装起来给用户提供一个标准的API接口,供用户调用。由应用程序接口、设备驱动程序接口、设备驱动、操作系统内核等组成。
2、嵌入式内核
- 任务管理
- 内存管理
- 通信、同步和互斥机制
- 中断管理
- 时间管理任务扩展功能
实时系统的评价指标
在实时系统中主要有三个指标来衡量系统的实时性,即响应时间(Response Time)、生存时间(Survival Time)、吞吐量(Throughput)。
- 响应时间:是计算机识别一个外部时间到作出响应的时间,在控制应用中它是最重要的指标,如果实践部能即时处理,系统可能就会崩溃。
-
- 任务调度,这是操作系统内核的主要职责之一,它决定该轮到哪个任务运行了,调度是基于任务的优先级。
- 生存时间:是数据有效等待时间,在这段时间里数据是有效的。
- 吞吐量:是在一给定时间内,系统可以处理的事件总数。
![](https://i-blog.csdnimg.cn/blog_migrate/a36532f1c974ffc4bc1b0bf05adf974b.png#pic_center)
非占先式内核的优缺点:
优点:正在运行着的任务占有CPU,而不必单行被别的任务抢占。
缺点:其响应高优先级的任务慢。
![](https://i-blog.csdnimg.cn/blog_migrate/d18f172dd32ef24cc442ccf59d91bfd9.png#pic_center)
常见的嵌入式操作系统特点:
-
uC/OS-II:公开源代码、代码结构清晰、注释详尽、组织有调理、可移植性好、可裁剪、可固化、抢占式内核、最多可管理60个任务。可用于8位,16/32位单片机或DSP。
-
Linux:具有可移植性、一定的稳定性、各种性能的升级能力,开发更容易。开放源代码,不存在黑箱技术。内核小、功能强大、运行稳定、效率高。开放源代码的操作系统易于定制裁剪,在价格上极具竞争力。不支持X86CPU,还可支持其他数十种CPU芯片。有大量的且不断增加的开发工具和开发环境。其内核的结构在网络方面是非常完整的,提供了对多种互联网方式的全面支持。
-
Windows CE:其核心全是由C语言开发,内核提供内存管理、抢先多任务和中断处理功能。具有高度模块化,可在内核基础上添加各种模块,适合作为可裁剪的32位嵌入式操作系统,既适用于工业设备的嵌入式控制模块,也适用于消费类电子产品。其核允许每个进程有256个优先级,采用抢占式优先权调度法。它嚄没有DOS模式,不能运行现有的应用程序,有严格的内存限制,有精简的运行库和API,硬件并不十分标准化。
-
VxWorks:具有可靠性、实时性和可裁剪性。支持多种处理器,如:x86、i960、Sun Sparc、MIPS、PowerPC等。
嵌入式系统大致可以分为四个层次:
-
硬件层
特点: -
处理器体系结构不统一
-
硬件资源通常受限
-
外部设备的种类繁多
-
有实时性和可靠性要求
-
OEM层
-
Bootloader的功能:初始化硬件,加载操作系统映像(0S Image )到内存,然后跳转到操作系统代码去执行。
-
BSP是介于主板硬件和操作系统之间的一层也可以说是属于操作系统的一部分,主要目的是为了支持操作系统使之能够正常地运行于硬件主板上。
-
bootLoader获得操作系统的方式:
方式一:串口、USB(U-BOOT)、以太网下载(E-BOOT);
方式二:从本地的存储设备例如CF卡和硬盘中读取操作系统映像。 -
操作系统层
-
Windows CE 是一个微内核操作系统。操作系统的基本功能被放在多个独立的进程(EXE)里面实现。在运行的时候,这些进程大致有如下几个:
-
内核NK. EXE ;
-
图形系统GWES. EXE ;
-
对象存储FILESYS .EXE ;
-
设备管理系统DEVICE .EXE ;
-
服务SERVICES. EXE
-
应用程序层
-
- 应用程序层位于Windows CE层次结构的最顶层。从系统的角度看,每个应用程序都是Windows CE 中的单独的程。
-
- 在Windows CE中,应用程序与操作系统交互的接口同样是Win32 API 。
![](https://i-blog.csdnimg.cn/blog_migrate/7938b28001d4a049bf8a9b53da753277.png#pic_center)
进程与线程:
- 进程:进程即是程序的一次动态执行实例。
- 线程:线程是Windows CE中最小的可执行单元。
进程与程序的区别:
- 进程是动态概念,而程序是静态的概念。
- 进程有创建、执行及结束完整的生命周期,而程序只是一个文件。
- 一个进程可以对应多个进程,而一个进程只能对应一个程序。
进程本身不参加系统的调度,也没有有优先级和上下文。真正参加系统调度的是线程,系统只识别和调度线程,每个进程在创建的时候都会创建一个主线程作为该进程默认的执行体。进程只是线程的容器。一个进程可拥有的线程数理论上是没有限制的,只与当前可用的内存有关。系统中同时最多只能有32个进程。
wince线程的状态
![](https://i-blog.csdnimg.cn/blog_migrate/e06a31490cadcfe04a742242ced32eb2.png#pic_center)
Windows CE开发流程:
![](https://i-blog.csdnimg.cn/blog_migrate/80b3d574da722046e8e585b57e12b81d.png#pic_center)
- 硬件设计
- 自己设计硬件:开发难度大、周期长,需要开发人员有很好的硬件基础。
- 从OEM厂商购买:难度最小,周期最短,需要一定的经费,有较好的售后支持。
- 定制操作系统
- 应用程序开发
- 安装包(像桌面Windows一样)
- 作为操作系统的一个组件,打包进入操作系统的运行时映像中。
WinCE开发环境过程
- 安装.NET Framework
- 安装Platform Builder开发工具和升级包
- 安装开发板支持包根据具体的实验箱而定
- 建立并编译WinCE系统平台
- 定制软件开发工具包(SDK)
- 建立eMbedded Visual C++ 4.0开发环境(EVC文件夹)
- 安装同步软件
Windows CE开发中涉及到的工具
- Platform Buider
- 功能:
-
- 可对Windows CE操作系统进行定制、构建、下载、调试及发布;
-
- 可开发简单的基于Windows CE的应用程序;
- Visual Studio
- 功能:
-
- 可编写Windows应用程序、Web应用程序和移动设备应用程序。
- eMbedded Visual C++
- 功能:
-
- 可用C/C++语言来为Windows CE开发应用程序
-
- 如果使用EVC4为Windows CE5.0开发应用程序,那么就必须安装EVCSP4
- SDK
- SDK概念:软件开发工具包是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合。
- 功能
- 为某种特定的Windows CE平台开发应用程序,必须安装特定的SDK。
- ACtiveSync
- 简介:ActiveSync用来连接Windows CE设备和安装桌面Windows的PC机的工具。
- 主要功能:
-
- PC机可借助ActiveSync的通信功能查看Windows CE上的文件系统,以及安装软件。
-
- 对于开发人员,还可使用ActiveSync下载编写的应用程序和进行代码调试。
依赖关系:对各种软件的安装必须按一定顺序;否则可能导致软件或则软件的部分功能不能使用。
Windows CE应用程序开发工具:
- Platform Builder
应用程序将被链接到OS内核中
一旦修改代码,必须再重新编译镜像
容易调试OS内核,不容易调试应用程序
- Embedded Visual C++
易于调试和测试
必须安装相应的为特定平台开发的SDK,从而开发相应的应用程序
- VIsual Studio
目标平台上需要安装 .NET compact framework
易于调试和测试
必须安装相应的为特定平台开发的SDK,从而开发相应的应用程序
- Embedded Visual Tools 3.0
应用程序开发流程:
- 安装合适的SDk
- 编写代码和调试
- 发布应用程序
两种途径获得SDK:
- 开发人员可以从微软或者第三方处获得SDK;
- 开发人员可以通过Platform Builder导出自己的SDK;
应用程序发布涉及到代码签名和代码打包
Windows CE应用程序开发,代码的选择:
- 托管代码:是指使用.NET compact framework开发的程序代码,执行时需要有.NET的运行时环境。
- 本地代码:是指用C++等高级语言开发的程序代码,可执行文件被编译成与CPU指令集有关的机器码,可以直接运行。
托管代码主要的优缺点
- 优点:与硬件平台无关;与编程语言无关;
- 缺点:执行效率低;
托管代码优缺点与本地代码优缺点互补
Windows CE的应用编程接口(API)
Win32 API(应用程序接口)
包括源代码文件(.c/.cpp/.H等)和资源文件(.BMP/.ICO/.CUR/.FON)
源代码文件经过C/C++编译器编译后形成目标文件;资源文件经过资源编译器编译后形成.RES二进制资源。然后,链接器负责把目标文件、二进制资源及库文件等统一链接,最终形成可执行文件。
MFC与ATL
Microsoft .NET Framework精简版
各种编程接口的比较
资源大小:
![](https://i-blog.csdnimg.cn/blog_migrate/4991a2ccf47dee49bb413144c7f51464.png#pic_center)
开发效率和执行时间:
![](https://i-blog.csdnimg.cn/blog_migrate/de7e9fb8b0526b293a8a03476d656d95.png#pic_center)