EagleBear2002 的博客

这里必须根绝一切犹豫,这里任何怯懦都无济于事

嵌入式系统概论-10-嵌入式系统概论总结

考察内容:基本概念、基本原理、设计应用技术

嵌入式系统概述 **

定义

IEEE 的定义

Devices used to control, monitor, or assist the operation of equipment, machinery or plants.

嵌入式系统是用于控制、监视或者辅助操作机器和设备的装置。

此定义时从应用上考虑的,嵌入式系统是软件和硬件的综合体,还可以涵盖机电等附属装置。

国内的定义

嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统

嵌入式设备是用于特定的设备

计算机技术为基础,必须要有计算

软硬件可裁剪:印证了专用设备的特点,将不需要的设备裁剪掉

嵌入式系统就是一个具有特定功能或用途的隐藏在某种设备中的计算机软硬件集合体,没有固定的特征形状。

嵌入的可以不是设备,而是生产流程,这样的系统也是嵌入式系统

嵌入式系统三要素

  1. 嵌入性:嵌入到对象体系中,有对象环境要求
  2. 专用型:软、硬件按对象要求设计、裁剪
  3. 计算机:实现对象的智能化功能

其他的定义

嵌入封闭产品中的信息处理系统。

看不见的计算机,一般不能被用户编程, 它有一些专用的 I/O 设备, 对用户的接口是应用专用的。

An embedded system is a computer system contained within some larger device or product with the intent purpose of providing monitoring and control services to that device.

嵌入式系统是包含在某些较大的设备或产品中的计算机系统,其目的是为该设备提供监视和控制服务。

Any sort of device which includes a programmable computer but itself is not intended to be a general-purpose computer.

包括可编程计算机在内但本身不打算用作通用计算机的任何设备。

包含有计算机,但又不是通用计算机的计算机应用系统。

特点

  1. 嵌入式系统通常是形式多样、面向特定应用
  2. 嵌入式系统得到多种类型的处理器和处理器体系结构的支持
  3. 嵌入式系统通常极其关注成本
  4. 嵌入式系统有实时性和可靠性的要求
  5. 嵌入式系统使用的操作系统一般是适应多种处理器、可剪裁、轻量型、实时可靠、可固化的嵌入式操作系统
  6. 嵌入式系统开发需要专门工具和特殊方法

分类

  1. 按嵌入式处理器的位数来分类
  2. 按应用来分类
  3. 按速度分类
  4. 按确定性来分类
  5. 按嵌入式系统软件复杂程度来分类

按嵌入式处理器的位数来分类

  1. 4 位嵌入式系统:大量应用
  2. 8 位嵌入式系统:大量应用
  3. 16 位嵌入式系统:大量应用
  4. 32 位嵌入式系统:正成为主流发展趋势
  5. 64 位嵌入式系统:高度复杂的、高速的嵌入式系统已经开始采用

按应用来分类

按速度分类

  1. 强实时系统,其系统响应时间在毫秒或微秒级。
  2. 一般实时系统,其系统响应时间在几秒的数量级上,其实时性的要求比强实时系统要差一些。
  3. 弱实时系统,其系统响应时间约为数十秒或更长。这种系统的响应时间可能随系统负载的轻重而变化

按确定性来分类

根据确定性的强弱,可将嵌入式系统分为硬实时、软实时系统:

  1. 硬实时:系统对系统响应时间有严格的要求,如果系统响应时间不能满足,就要引起系统崩溃或致命的错误。
  2. 软实时:系统对系统响应时间有要求,但是如果系统响应时间不能满足,不会导致系统出现致命的错误或崩溃。

按嵌入式系统软件复杂程度来分类

  1. 循环轮询系统
  2. 有限状态机系统
  3. 前后台系统
  4. 单处理器多任务系统
  5. 多处理器多任务系统

典型应用

  1. 工控设备
  2. 军用电子设备
  3. 航天/航空
  4. 汽车电子
  5. 信息家电
  6. 通信
  7. 智能玩具
  8. 可穿戴

嵌入式系统的组成 **

TODO:嵌入式系统、IOT、CPS 的基本组成

嵌入式系统的组成

  • 嵌入式系统一般由嵌入式硬件和软件组成
  • 硬件以微处理器为核心集成存储器和系统专用的输入/输出设备
  • 软件包括:初始化代码及驱动、嵌入式操作系统和应用程序等,这些软件有机地结合在一起,形成系统特定的一体化软件。
典型的构件

物联网的组成

物联网 IoT 是物理设备,车辆(也称为“连接设备”和“智能设备”),建筑物以及其他嵌入电子设备,软件,传感器,执行器和网络的物品的互连网络连接性,使这些对象能够收集和交换数据。

  • 互联、协同
  • RFID,工业标签:用来识别和标识物体
物联网

信息物理系统 CPS

A cyber-physical system (CPS) is a mechanism controlled or monitored by computer-based algorithms, tightly integrated with the internet and its users.

信息物理系统(CPS,Cyber-physical System)是一种基于计算机的算法控制或监视的机制,与互联网及其用户紧密集成。

  • 计算进程与物理进程的集成
    • 更多地强调嵌入式系统与物理学的深度结合
    • CPS = ES + Physics
  • 人机物融合系统
  • 深度融合了各类信息技术:传感器、嵌入式计算、云计算、网络通信、软件,使得各种信息化能力(3C:计算-Computer、通信-Communication 和控制-Control)高度协同和自治,实现生产应用系统自主、智能、动态、系统化地监视并改变物理世界的性状。

嵌入式系统设计

嵌入式系统面临挑战

  1. 需要多少硬件?
  2. 如何满足时限要求,如何处理理多项功能在时间上的协调一致关系?
  3. 如何降低系统的功耗?
  4. 如何设计以保证系统可升级?
  5. 如何保证系统可靠地工作?

传统开发过程

传统软硬件设计过程的基本特征:

  1. 系统在一开始就被划分为软件和硬件两大部分
  2. 软件和硬件独立进行行开发设计
  3. 经常采用“硬件优先”的方法

隐含的一些问题:

  1. 软硬件之间的交互受到很大限制:凭经验划分软硬件、软硬件之间的相互性能影响很难评估
  2. 系统集成相对滞后,NRE 较大,越后期发现的问题可能会导致越严重的开销
  3. 从上到下越早开始集成越好

因此:设计质量差、设计修改代价高、研制周期不能有保障

软硬件协同设计-

  1. 硬件/软件协同设计是指一种专用系统的设计,该系统由几个专用 IC 组成,这些 IC 与通用处理器上的软件过程配合使用(1994 年)
  2. 硬件/软件协同设计意味着通过并发设计来利用硬件和软件的协同作用,从而达到系统级目标(1997 年)
  3. 硬件/软件协同设计试图通过提供可以告诉设计人员系统是否满足其性能,功耗和尺寸目标的分析方法以及可以使设计人员快速评估许多潜在设计方法的综合方法,来提高嵌入式系统设计的可预测性(2003 年)
  4. 它从新兴学科(90 年代初)发展为主流技术(今天)

软硬件划分

  1. 嵌入式系统的设计涉及硬件与软件部件,设计中必须决定什么功能由硬件实现,什么功能由软件实现。
  2. 硬件和软件具有双重性
  3. 软硬件变动对系统的决策造成影响
  4. 划分和选择需要考虑多种因素
  5. 硬件和软件的双重性是划分决策的前提

通常由软件实现的部分

  1. 操作系统功能:任务调度、资源管理、设备驱动
  2. 协议栈:TCP/IP
  3. 应用软件框架
  4. 除基本系统、物理理接口、基本逻辑电路,许多由硬件实现的功能都可以由软件实现

双重性部分

  1. 算法:加密/解密、编码/解码、压缩/解压。
  2. 数学运算:浮点运算、FFT。

软硬件技术对系统结构的影响

硬软件设计的趋势:融合、渗透

  1. 硬件设计的软件化:VHDL、Verilog、HANDL-C
  2. 软件实现的硬件化:各种算法的 ASIC

对系统设计的影响:协同设计

  1. 增加灵活性
  2. 增加了风险

嵌入式硬件系统基础

嵌入式微处理器基础 *

嵌入式微处理器体系结构

冯诺依曼结构计算机
  1. 存储器保存数据,指令。
  2. 中央处理器(CPU)从内存中获取指令:分离的 CPU 和内存区分可编程计算机。
  3. CPU 寄存器可提供帮助:程序计数器(PC),指令寄存器(IR),通用寄存器等。
  4. 嵌入式中两个版本的 CPU 都有
Harvard
  1. Harvard 不能使用自我修改的代码。
  2. Harvard 允许同时进行两次内存提取。
  3. 大多数 DSP(数据信号处理,Digital Signal Process)使用 Harvard 架构来传输数据:更大的内存带宽,更可预测的带宽
RISC vs. CISC
  1. CISC: 复杂指令集计算机:许多寻址模式、多种操作
  2. RISC: 精简指令集计算机:加载/存储、可传递指令
比较内容 CISC RISC
指令系统 复杂庞大 简单精简
指令数目 一般>200 一般 <100
指令格式 一般>4 一般<4
寻址方式 一般>4 一般<4
指令字长 不固定 等长
访存指令 不加限制 只有 LOAD/STORE 指令
指令使用频率 相差很大 相差不大
指令执行时间 相差很大 绝大多数在一个周期内完成
优化编译实现 很难 较容易
流水线技术

TODO

分类 *
  1. 嵌入式微处理器种类繁多,按位数可分为 4 位、8 位、16 位、32 位和 64 位。
  2. 根据功能不同,嵌入式微处理器分为四种:
    1. 嵌入式微处理单元(MPU)
    2. 嵌入式微控制器(MCU)
    3. 嵌入式 DSP 处理器
    4. 嵌入式 SoC
选型 *
选择微控制器的标准

如何选择一个适合的微服务控制器?

嵌入式系统都是实时系统,需要考虑效率

  1. 有效且经济地满足任务的计算需求
    1. 速度,ROM 和 RAM 的数量,I/O 端口和计时器的数量,大小,包装,功耗
    2. 容易升级
    3. 单位成本
  2. 软件开发工具的可用性:汇编器,调试器,C 编译器,仿真器,模拟器,技术支持(开源框架可能没有多少人维护)
  3. 微控制器的广泛可用性和可靠来源。
选择微控制器的 10 个步骤
  1. 列出所需的硬件接口(保证物理上,设备可以连接到微处理器上)
  2. 检查软件架构
  3. 选择架构
  4. 确定内存需求
  5. 开始寻找微控制器
  6. 检查成本和功率约束
  7. 检查零件可用性
  8. 选择开发套件
  9. 研究编译器和工具
  10. 开始实验
  1. 做原型可以先忽略一些东西,SBC 板机,需要考虑够不够用的问题。
  2. 计算下移到 AIoT 的位置

ARM(不考)--

  • 工作状态
  • 运行模式
  • 寄存器结构
  • 中断和异常
  • WatchDog *

嵌入式系统的存储体系

存储器系统:存储器系统的层次结构 *

  1. 平面单空间(Flat single-space)
  2. 分段式(Segmented)
  3. 组切换(Bank-switched)
  4. 多类型存储区(Multiple-space)
  5. 虚拟内存(Virtual)
平面单空间内存 分段内存
组切换内存 多空间内存
平面单空间内存
  1. 简单
  2. 示例:68K,Z80
  3. 空间可能不连续
  4. Assumed by C
  5. 关心零地址
分段内存
  1. 地址空间增加
  2. 示例:Intel x86
  3. 2 部分地址:段、偏移
  4. 需要 C 扩展:近和远
组切换内存
  1. 可以添加到任何处理器
  2. 进入更大地址空间的窗口
  3. 链接器支持有用
多空间内存
  1. 示例:68K 选件,8051
  2. 可能需要 C 语言扩展

ROM 的种类与选型

ROM 可以在工厂编程。闪存是现场可编程 ROM 的主要形式。

  1. 电可擦除,必须块擦除。
  2. 随机访问,但是写入/擦除比读取慢得多。
  3. NOR 闪存更加灵活。
  4. NAND 闪存更密集。

Flash 的种类与选型

  • 非易失性存储器:闪存可以在线(in-circuit)编程。
  • 闪存可以被电擦除和重新编程。
  • 轻便、紧凑、节能且更便宜。

分类:

  1. NOR(放置固态代码:因为还有 XIP):字可读取,逐块擦除。
  2. NAND:按页读取(512-4K 字节),逐块擦除。NAND 相对便宜,擦除速度更快,顺序访问时间更短。

RAM 的种类与选型

动态 RAM 密集,需要刷新。

  1. 同步 DRAM 是主要类型。
  2. SDRAM 使用时钟来提高性能,以流水线方式访问存储器。

静态 RAM 更快,密度更低,消耗更多功率。

Cache-

  1. 并不是严格的内存架构
  2. 可能经常被程序员忽略
  3. 优化有效使用的关键

嵌入式系统总线

总线结构,常见总线及特点

输入输出编程:忙等 IO 和中断 IO *

忙等(busy/wait)输出

对设备进行编程的最简单方法。使用指令测试设备何时准备就绪:

1
2
3
4
5
6
current_char = mystring;
while (*current_char != '\0') {
poke(OUT_CHAR,*current_char);
while (peek(OUT_STATUS) != 0);
current_char++;
}
中断 I/O

忙等是非常低效的。而中断 I/O 是相对高效的。

  1. CPU 在测试设备时不能做其他工作。
  2. 很难实现同步 I/O

中断允许设备更改 CPU 中的控制流:导致子例程调用以处理设备。

I/O 编程:独立 I/O 端口和内存映射 I/O

通信期间选择控制寄存器或数据缓冲区的三种方法

  1. 独立的 I/O 端口:需要专门的指令来完成。
  2. 内存映射的 I/O。
  3. 混合解决方案(统一编址):混合模型包括内存映射的 I/O 数据缓冲区和用于控制寄存器的单独的 I/O 端口。

英特尔 x86 提供了输入输出说明。大多数其他 CPU 使用内存映射的 I/O。I/O 指令不排除内存映射的 I/O

(a)独立的 I/O 和内存空间、(b)内存映射的 I/O、(c)混合解决方案
内存映射的 I/O

优点:

  1. 在内存映射的 I/O 模式下,设备控制寄存器只是内存中的变量,并且可以与其他变量一样用 C 寻址。因此,可以完全用 C 语言编写 I/O 设备驱动程序。
  2. 在这种模式下,不需要特殊的保护机制即可阻止用户进程执行 I/O 操作。

缺点:

  1. 当前大多数嵌入式处理器都支持内存缓存。缓存设备控制寄存器将导致灾难。为了防止这种情况,必须为硬件提供选择性禁用缓存的功能。这将增加嵌入式系统中硬件和软件的复杂性。
  2. 如果只有一个地址空间,则所有内存模块和所有 I/O 设备都必须检查所有内存引用,以便确定要响应的内存引用。这会严重影响系统性能。

ARM 内存映射的 I/O:

  1. 定义设备地址:DEV1 EQU 0x1000
  2. 读写代码:
1
2
3
4
LDR r1,#DEV1 ; set up device adrs
LDR r0,[r1] ; read DEV1
LDR r0,#8 ; set up value to write
STR r0,[r1] ; write value to device

GPIO 接口基本原理与结构(不考)--

嵌入式系统软件知识

嵌入式软件基础知识

嵌入式软件的特点

  • 内存:有限,影响编程语言的选择以及开发工具的使用(比如编译器优化)。

  • CPU 处理能力:成本和功耗的考虑,ES 不得不采用保守的设计方案,其中的 CPU 往往只是恰好满足要求。

  • 操作系统:OS(Windows/Linux)、RTOS、专有 OS 或裸机

  • 实时性:

    • 实时系统不一定会运行得很快,但一定是可预测的,通常的术语叫做确定性
    • 实时性的要求对于 OS 的选择和程序设计都有影响
  • 开发流程:

    • ES 往往没有足够的资源进行软件开发。交叉开发对于工具的选择有很大影响。
    • 开发过程也不同,编辑/编译/调试的循环是一样的,但执行程序这一步却非常复杂,需要把代码转移到目标机上或者在某种环境下运行。
  • 执行流程:多数嵌入式设备从开机开始就会运行某个程序,该程序会一直运行到系统关机。这个程序可能存储在 ROM,也可能是从非易失性存储器转移到 RAM 中执行。

  • 每一个嵌入式设备都是不同的:

    • 可能是技术层面的:不同的 CPU 架构、内存、外设、应用程序和操作系统
    • 也可能是商业运作层面的,比如手机开发、生产的商业模式就和核磁共振扫描仪完全不同。
  • 嵌入式软件工具和组件:与桌面软开发一样,嵌入式软件工程师需要运用工具来构建和测试软件。同时,也很可能会引入可重用的软件组件

  • 开发工具:从表面上看,嵌入式软件的开发过程和桌面软件很像:编译代码模块,然后在调试器的控制下执行。然而,并不这么简单,有着显著的不同。

    • 往往是使用交叉编译器来进行嵌入式软件的开发。

    • 有时候嵌入式应用中会直接包含小部分的汇编代码:出于对性能的考量。

    • 嵌入式链接器除了将多个对象模块和函数库例程整合在一起以外,链接器还负责在内存中正确定位代码和数据。嵌入式系统的内存映射十分复杂,对于精确性的要求也十分严格。链接器必需能够灵活地应对这些要求。

    • 嵌入式调试器并不是一个单一的组件,而是一系列对应不同运行环境的工具。借由在本地或者指令集模拟器中运行代码,代码可以仅在宿主机上运行。调试器也可以和一个目标板相连接(JTAG 或其他方式,如以太网),并执行代码。

    • 其他一些更有针对性的工具,典型的选项包括分析实时性能、代码执行时设备功耗情况的分析器。

  • 软件组件:最简单和显而易见的可重用的软件组件是库。一些库是由编译器提供的,嵌入式编译器提供的库应当是适合嵌入式环境的:可以重入、可以被存储在 ROM 中。(不会使用 printf:会有问题)

    • 其他可用的库,特别是针对 C++ 的库,如标准模板库 STL。这些库可能并不适合嵌入式应用,在使用时要多加小心。
    • 与硬件交互是难点之一。在 OS 内部设备驱动提供了这样的接口
    • ES 的互联性不断提高,需要不同的网络支持,TCP/IP 或总线 CAN2C,其他网络技术 SNMP、Zigbee、Bluetooth、WiFi 和 USB。最重要的是应该检查有效性,确保符合标准,并能和其他系统互通互联。
    • 嵌入式设备对于有组织的数据存储是有需求的,比如能够应对电源故障和支持多线程。
    • LCD(往往是触摸式的)成本减低让其能够被应用到嵌入式设计中。软件于是迎来了一项挑战:支持复杂的图像和用户界面。

嵌入式软件的分类(系统软件、支撑软件、应用软件)

嵌入式软件体系结构 *

嵌入式操作系统基础知识

RTOS 概念、特点、选型原则(商业化 RTOS) *

概念
特点
选型
规则

任务管理

进程、线程、任务的概念
任务的实现(任务的层次结构、任务控制块、任务的状态及状态转换、任务队列)
任务调度(可抢占调度、不可抢占调度、先来先服务、时间片轮转算法、优先级算法)
实时系统及任务调度(RMS、EDF 算法) **
任务间通信(共享内存、消息、管道、信号)
同步与互斥(竞争条件、临界区、互斥、信号量、死锁)

存储管理 *

嵌入式系统静态和动态内存管理

设备管理(不考)--

设备无关性、I/O 地址、I/O 控制、中断处理

文件系统基础知识(不考)--

操作系统移植基础知识(不考)--

嵌入式系统程序设计

嵌入式软件开发基础知识

嵌入式程序设计语言(不考)--

汇编、编译、解释系统的基础知识和基本工作原理
汇编语言
各类程序设计语言的主要特点和适用情况

嵌入式软件开发环境

交叉开发(宿主机、目标机) *
编辑器、编译器、链接器、调试器、模拟器
常用嵌入式开发工具
集成开发环境
开发辅助工具

嵌入式软件开发

嵌入式实时内核(结合 ucOS-II 和 freertos)

实时任务调度

中断与时钟

同步与通信

存储管理(静态、动态) *

bsp & bootloader(不重要)

嵌入式系统的启动过程

bsp,特点,与 bios 区别

引导模式 *

bootloader 及其启动过程

建模(重要) **

有限状态机及其应用。

有限状态机的实现。