630 likes | 745 Views
嵌入式系统设计与实例开发 —— ARM 与 C/OS-Ⅱ 第二讲 嵌入式系统的基本概念. 嵌入式系统的基本概念. 1 、什么是嵌入式系统 2 、硬件基础 3 、嵌入式操作系统. IEEE 定义. 根据 IEEE (国际电气和电子工程师协会)的定义: 嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”(原文为 devices used to control, monitor, or assist the operation of equipment, machinery or plants )。
E N D
嵌入式系统设计与实例开发 ——ARM与C/OS-Ⅱ 第二讲 嵌入式系统的基本概念
嵌入式系统的基本概念 1、什么是嵌入式系统 2、硬件基础 3、嵌入式操作系统
IEEE定义 根据IEEE(国际电气和电子工程师协会)的定义: 嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)。 可以看出此定义是从应用上考虑的,嵌入式系统是软件和硬件的综合体,还可以涵盖机电等附属装置。
3、嵌入式系统的几个重要特征 (1)系统内核小 由于嵌入式系统一般是应用于小型电子装置的,系统资源相对有限,所以内核较之传统的操作系统要小得多。 比如ENEA公司的OSE分布式系统,内核只有5K,而Windows的内核则要大得多。
(2)专用性强 嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进行系统的移植。 即使在同一品牌、同一系列的产品中也需要根据系统硬件的变化和增减不断进行修改。 同时针对不同的任务,往往需要对系统进行较大更改,程序的编译下载要和系统相结合,这种修改和通用软件的“升级”是完全不同的概念。
(3)系统精简 嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能设计及实现上过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。 (4)高实时性OS 这是嵌入式软件的基本要求,而且软件要求固态存储,以提高速度。软件代码要求高质量和高可靠性、实时性。
(5)嵌入式软件开发走向标准化 嵌入式系统的应用程序可以没有操作系统直接在芯片上运行。 为了合理地调度多任务、利用系统资源、系统函数以及和专家库函数接口,用户必须自行选配RTOS(Real-Time Operating System)开发平台,这样才能保证程序执行的实时性、可靠性,并减少开发时间,保障软件质量。
(6)嵌入式系统开发需要开发工具和环境 由于其本身不具备自主开发能力,即使设计完成以后,用户通常也是不能对其中的程序功能进行修改,必须有一套开发工具和环境才能进行开发。 这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。 开发时往往有主机和目标机的概念,主机用于程序的开发,目标机作为最后的执行机,开发时需要交替结合进行。
嵌入式系统与PC之间的区别 • 嵌入式系统一般是专用系统,而PC是通用计算平台 • 嵌入式系统的资源比PC少得多 • 嵌入式系统软件故障带来的后果比PC机大得多 • 嵌入式系统一般采用实时操作系统 • 嵌入式系统大都有成本、功耗的要求 • 嵌入式系统得到多种微处理体系的支持 • 嵌入式系统需要专用的开发工具
外围电路 电源 模块 Flash 微处理器 RAM 时钟 MPU 复位 ROM 外设 Keyboard USB LCD Other 典型嵌入式系统基本组成-硬件
典型嵌入式系统基本组成-软件 应用程序 软件结构 操作系统 输入 输出 处理器 硬件结构 存储器
嵌入式处理器 嵌入式处理器是嵌入式系统的核心,是控制、辅助系统运行的硬件单元。4位、8位单片机,16位、32位、64位嵌入式CPU。 • 实时操作系统 实时操作系统是嵌入式系统目前最主要的组成部分。实时性需要调度一切可利用的资源完成实时控制任务,着眼于提高计算机系统的使用效率,满足对时间的限制和要求。
- 系统响应时间(System response time): 系统发出处理要求,到系统给出应答信号的时间。 - 任务切换时间(Context-switching time): 任务之间切换而使用的时间。 - 中断延迟(Interrupt latency): 计算机接收到中断信号到操作系统作出响应,并完成切换转入中断服务程序的时间。
二、硬件基础 • 冯·诺依曼体系结构和哈佛体系结构 • CISC与RICS • 影响CPU性能的因素 • 存储器系统 • I/O接口
冯·诺依曼体系结构模型 存储器 指令寄存器 程序 控制器 指令0 指令1 指令2 指令3 指令4 数据通道 数据 输出 输入 中央处理器 数据0 数据1 数据2
指令的执行周期T 1)取指令(Instruction Fetch):TF 2)指令译码(Instruction Decode):TD 3)执行指令(Instruction Execute):TE 4)存储(Storage):TS 每条指令的执行周期:T= TF+TD+TE+TS
冯·诺依曼体系的特点 1)数据与指令都存储在存储器中 2)被大多数计算机所采用 3)ARM7——冯诺依曼体系 在冯·诺依曼体系结构中,数据和程序存储器是共享数据总线的。数据总线共享有很多优点,比如减小总线的开销。另外一个优点在于能够把RAM映射到程序空间,这样设备也能访问EEPROM中的内存。
哈佛体系结构 程序存储器 地址 指令寄存器 指令0 控制器 指令1 指令 指令2 数据存储器 地址 数据通道 输出 输入 数据0 中央处理器 数据1 数据 数据2
哈佛体系结构的特点 1)程序存储器与数据存储器分开 2)提供了较大的数存储器带宽 3)适合于数字信号处理 4)大多数DSP都是哈佛结构 5)ARM9是哈佛结构
对于哈佛体系结构的计算机,程序和数据总线是分开的。这种方式的优势在于能够在一个时钟周期内同时读取程序和数据,这样就相应地减少了执行每一条指令所需的时钟周期。早期的哈佛架构的计算机是不能把查找表储存在程序存储器中的,而这个问题在现在的大多数设备中已经解决了。对于哈佛体系结构的计算机,程序和数据总线是分开的。这种方式的优势在于能够在一个时钟周期内同时读取程序和数据,这样就相应地减少了执行每一条指令所需的时钟周期。早期的哈佛架构的计算机是不能把查找表储存在程序存储器中的,而这个问题在现在的大多数设备中已经解决了。 • 哈佛体系结构计算机中存在的另外一个问题就是,如果要和外部的程序和数据存储器进行交互,对于两部分存储器来说,由于地址总线和数据总线的相互独立性,就需要额外增加大量的芯片管脚。因此,只有当至少有一种存储器的类型是内部的情况下,微处理器才会采用哈佛体系结构。
CISC和RISC • RISC(精简指令集计算机)和CISC(复杂指令集计算机)是当前CPU的两种架构。它们的区别在于不同的CPU设计理念和方法。 • CISC:复杂指令集(Complex Instruction Set Computer) • 具有大量的指令和寻址方式 • 8/2原则:80%的程序只使用20%的指令 • 大多数程序只使用少量的指令就能够运行。 • 指令复杂化、编译复杂化,运行时间长,部件效率不高,不利于并行处理和VLSI的实现
CISC :复杂指令集(Complex Instruction Set Computer) • 早期的CPU全部是CISC架构,它的设计目的是要用最少的机器语言指令来完成所需的计算任务。 • 比如对于乘法运算,在CISC架构的CPU上,您可能需要这样一条指令:MUL ADDRA, ADDRB就可以将ADDRA和ADDRB中的数相乘并将结果储存在ADDRA中。将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作全部依赖于CPU中设计的逻辑来实现。 • 这种架构会增加CPU结构的复杂性和对CPU工艺的要求,但对于编译器的开发十分有利。 • 比如上面的例子,C程序中的a*=b就可以直接编译为一条乘法指令。 • 今天只有Intel及其兼容CPU还在使用CISC架构。
RISC:精简指令集(Reduced Instruction Set Computer) • 在通道中只包含最有用的指令 • 确保数据通道快速执行每一条指令 • 使CPU硬件结构设计变得更为简单 • 将频率最高的操作作为指令系统的基本操作 • 适于VLSI、并行处理的发展趋势 • 当然,RISC也有它的缺点:代码密度不高,可执行文件体积较大,汇编代码可读性较差。代码密度不高是个值得关注的问题:若不使用cache,会需要更大的指令存储空间,取指时也占用更大的存储器带宽。若采用cache,又会降低cache的命中率。 • RISC架构要求软件来指定各个操作步骤。如果要在RISC架构上实现将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作都必须由软件来实现,比如:MOV A, ADDRA; MOV B, ADDRB; MUL A, B; STR ADDRA, A。这种架构可以降低CPU的复杂性以及允许在同样的工艺水平下生产出功能更强大的CPU,但对于编译器的设计有更高的要求。
CISC与RISC的数据通道 IF ID ALU MEM REG 退出 开始 微操作通道 IF ID REG ALU MEM 退出 开始 单通数据通道
关于周期的概念 • 执行一条指令所需要的时间称为指令周期,指令周期常常用若干个时钟周期来表示。 • 时钟脉冲的重复周期称为时钟周期,时钟周期是CPU的基本时间计量单位,它由计算机主频决定。 • 一个CPU同外部设备和内存储器之间进行信息交换过程所需要的时间称为总线周期。
影响CPU性能的因素:流水线、超标量和缓存 流水线技术:几个指令可以并行执行 提高了CPU的运行效率 内部信息流要求通畅流动 取指 译码 执行add Add 取指 译码 执行sub Sub 取指 译码 执行cmp Cmp 时间
超标量执行 超标量执行:超标量CPU采用多条流水线结构 指令CACHE 预取 预取 流水线2 流水线1 译码1 译码1 译码2 译码2 执行1 执行1 执行2 执行2 数据
高速缓存(CACHE) 1、为什么采用高速缓存 微处理器的时钟频率比内存速度提高快得多,高速缓存可以提高内存的平均性能。 2、高速缓存的工作原理 高速缓存是一种小型、快速的存储器,它保存部分主存内容的拷贝。 数据 高速缓存控制器 CACHE 主存 CPU 地址 数据
CPU 低速设备 低速总线 桥 高速总线 高速设备 存储器 高速设备 数据 总线和总线桥
存储器系统 RAM:随机存取存储器, SRAM:静态随机存储器, DRAM:动态随机存储器 1)SRAM比DRAM快 2)SRAM比DRAM耗电多 3)DRAM存储密度比SRAM高得多 4)DRM需要周期性刷新 ROM:只读存储器 FLASH:闪存
输入输出接口 1)I/O 2)A/D、D/A 3)键盘 4)LCD 5)存储器接口 6)设备接口
三、嵌入式操作系统 • 操作系统的分类 • 嵌入式实时操作系统 • 多任务,任务优先级,调度 • 前台与后台 • 实时操作系统中的重要概念
操作系统的分类 (1)顺序执行系统:系统内只含有一个程序,独占CPU的运行时间,按语句顺序执行该程序,直至执行完毕,另一程序才能启动运行。如DOS操作系统。 (2)分时操作系统:系统内同时可以有多个程序运行,把CPU的时间分按顺序分成若干片,每个时间片内执行不同的程序。如UNIX (3)实时操作系统:系统内有多个程序运行,每个程序有不同的优先级,只有最高优先级的任务才能占有CPU的控制权。
按实时性分类 ● 具有强实时特点的嵌入式操作系统 ● 具有弱实特点的嵌入式操作系统 ● 没有实时特点的嵌入式操作系统
1.强实时系统,其系统响应时间在毫秒或微秒级(数控机床);1.强实时系统,其系统响应时间在毫秒或微秒级(数控机床); 2.一航实时系统,其系统响应时间在毫秒-几秒的数量级上,其实时性的要求比强实时系统要差一些(电子菜谱的查询)。 3.弱实时系统,其系统响应时间约为数十秒或更长(工程机械)。
按软件结构分类 (1).循环轮询系统:(Polling Loop) 最简单的软件结构是循环轮询,程序依次检查系统的每一个输入条件,一旦条件成立就进行相应的处理。 Initialize() While(true){ if(condition_1) action_1(); if(condition_2) action_2(); …… if(condition_n) acition_n(); }
(2).事件驱动系统:(Event-Driven system) 事件驱动系统是能对外部事件直接响应的系统。它包括前后台、实时多任务、多处理器等,是嵌入式实时系统的主要形式。 应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为(background)。中断服务程序处理异步事件,这部分可以看成前台行为(foreground)。 后台也可以叫做任务级,前台也叫中断级。 例如,很多基于微处理器的产品采用前后台系统设计,如微波炉、电话机、玩具等。从省电的角度出发,平时微处理器处在停机状态,所有的事都靠中断服务来完成。
前后台系统(后台循环、前台中断) 后台 前台 ISR 时间 ISR ISR
休眠、就绪、运行、挂起、被中断 任务 1 任务 2 任务 n …… 任务 控制 块1 任务 控制 块2 任务 控制 块n 寄存器 CPU CPU寄存器 嵌入式实时操作系统 实时操作系统的特点: 1、多任务
一个任务,也称作一个线程,是一个简单的运行程序。每个任务都是整个应用的某一部分,每个任务被赋予一定的优先级, 有它自己的一套CPU寄存器和自己的栈空间。 多任务运行的实现实际上是靠CPU(中央处理单元)在许多任务之间转换、调度。 CPU只有一个,轮番服务于一系列任务中的某一个。多任务运行使CPU的利用率得到最大的发挥,并使应用程序模块化。 在实际应用中,多任务的最大特点是,开发人员可以将很复杂的应用程序层次化-综合实验(时钟、位图、USB、KEY)。
内部事件:运算结果、设备请求等 事件驱动 外部事件:开关量输入等 实时任务 绝对时间驱动 时间驱动 任务 相对时间驱动 非实时任务 2、任务的事件驱动
CPU 中断控制器1 外部事件 中断控制器2 3、中断与中断优先级
4、同步与异步 一系列时间相关事件称为同步事件,驱动的任务为同步任务 随机发生的事件称为异步事件,驱动的任务为异步任务,如中断
任务1 任务2 任务N 共享内存 5、资源与临界资源 程序进行时可使用的软硬件环境称为资源,2个以上任务可同时访问的共享资源称为临界资源。 任何任务所占用的实体都可称为资源。资源可以是输入输出设备,例如打印机、键盘、显示器,资源也可以是一个变量、一个结构或一个数组等。
嵌入式操作系统的几个主要概念 • 任务 Task • 调度 Scheduler • 优先级 Priority • 代码临界区 Critical Section • 可预测性 predictability • 上下文切换 Context Switch
任务 Task • 指拥有所有CPU资源的简单程序。 • 在进行实时应用设计时通常要把工作分割成多个任务,每个任务处理一部分问题,并被赋予一定的优先级、一套自己的CPU寄存器及堆栈。 • 实时系统中的大部分任务是周期的,体现在编程上每个任务则是一个典型的无限循环。 • 任务的状态:睡眠、就绪、运行、延迟、等待
任务:example 手持数据采集终端的打印 creatTASK(myprintf, priority) void myprintf( ) { for (;;) { 等待接收队列信息; 往打印机发送打印信息; } }
内核(kernel) • 多任务系统的一部分,负责管理任务。 • 占先式(preemptive)与非占先式 • 微内核(Micro kernel)与单内核(monolithic kernel)
非占先式与占先式 非占先式(non-preemptive) 非占先式调度法也称作合作型多任务(cooperative multitasking),各个任务彼此合作共享一个CPU。 中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务,直到改任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。 非占先式内核的一个特点是几乎不需要使用信号量保护共享数据。运行着的任务占有CPU,而不必担心被别的任务抢占。 非占先式内核的最大缺陷在于其响应高优先级的任务慢,任务已经进入就绪态,但还不能运行,也许要等很时间,直到当前运行着的任务释放CPU。内核的任务级响应时间是不确定的,不知道什么时候最高优先级的任务才能拿到CPU的控制权,完全取决于应用程序什么时候释放CPU。
低优先级任务 (2) (1) ISR (3) TIME (4) 中断服务程序使 高优先级任务就绪 (5) (6) 高优先级任务 (7) 低优先级任务释放 CPU使用权 非占先式(Non-Preemptive)