1. 嵌入式系统的定义,特点,分类,典型应用

1.1 定义

  • 嵌入式系统:嵌入式计算机系统的简称
  • IEEE:嵌入式系统是“用于控制、监视、或者辅助操作机器和设备的装置”,软件和硬件的综合体,还可以涵盖机电等附属装置
  • 普遍认同的定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有着严格要求的专用计算机系统。

具有特定功能或用途的隐藏在某种设备中的计算机软硬件集合体,没有固定的特征形状。

  • 三要素

    • 嵌入
    • 专用
    • 计算机
  • 其他定义:看不见的计算机,一般不能被⽤户编程, 它有一些专用的I/O设备, 对用户的接⼝是应用专⽤的。(包含有计算机 但又不是通用的计算机的计算机应用系统)

1.2 特点

形式多样面向特定应用

  • 用于特定的任务,硬件和软件必须进行高效率的设计
  • 低功耗,体积小,集成度高
  • 应用程序和操作系统两种软件的一体化

多种类型的处理器和处理器体系结构的⽀持

  • 可采用多种类型的处理器和处理器体系结构,很多种嵌入式微处理器和微处理器结构可以选择
    • 通用计算机只采用少数的处理器类型和体系结构,而且主要掌握在少数大公司手中
  • 巨大产业模式也产业链

成本

  • 需要关注系统成本
    • 开发成本NRE
    • 产品成本,硬件,包装,版权
    • 批量的总体成本

实时性和可靠性的要求

  • 大多数实时系统都是嵌入式系统
  • 嵌入式系统对于实时性的要求:软件一般是固化运行或者直接加载到内存中运行
  • 一旦遇到错误需要有机制保证正常运行,出错处理和自动复位(特别是一些在极端环境下运行的嵌入式系统)
    • 看门狗定时器,一直定时加一,到某一个时间就复位,如果没有复位超过了溢出,那么就及时复位

适应多种处理器、可裁剪、轻量级、可靠可固化的嵌入式操作系统

  • 根据应用进行裁剪、配置
  • 规模小,能够固化运行
  • 实时内核
  • 时间空间,数据隔离,一种保护机制

专门的工具和特殊方法

  • 开发环境
  • 开发工具(不同的连接方式)
    • host+target

1.3 分类

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

  • 4位,8位,16位嵌入式操作系统目前已经大量应用
  • 32位嵌入式操作系统正在成为主流发展趋势
  • 64位嵌入式操作系统作为高度复杂的、高速的嵌入式系统已经开始采用

按应用来分类

  • 信息家电
  • 移动终端
  • 汽车电子
  • 工业控制
  • 通信
  • 交通管理
  • 环境工程
  • POS网络

按速度来分类

  • 强实时系统,毫秒到微妙
  • 一般实时系统,几秒
  • 弱实时系统,数十秒或者更长,响应时间可能随着系统复杂的轻重而变化

按确定性来分类

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

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

  • 循环轮询系统
  • 有限状态机系统
  • 前后台系统
  • 单处理器多任务系统
  • 多处理器多任务系统

1.4 典型应用

  • 信息家电
  • 智能玩具
  • 移动计算
  • 通信设备
  • 军用电子
  • 汽车电子
  • 工控设备
  • 智能仪表
  • 电子商务

2. 嵌入式系统,IOT,CPS的基本组成**

2.1 嵌入式系统的组成

硬件

以微处理器为核心集成存储器和系统专用的输⼊/输出设备

软件

初始化代码及驱动、嵌⼊式操作统和应⽤程序等,这些软件有机地结合在一起,形成系统特定的一体化软件。

2.2 IOT

定义

  • 物联网(IOT)是物理设备、车辆(也称为“连接设备”和“智能设备”)、建筑物和嵌入电子设备、软件、传感器、执行器和网络连接的其他物理设备之间的互联网络,这些设备使这些对 象能够收集和交换数据。通过各种信息传感器等采集所需要的信息,通过网络接入,实现车辆等物理设备与物理设备,物理设备与人之间建立广泛连接,组成互联互通的网络

  • 物联网描述了一个由物理设备组成的网络,这些设备通常被嵌入了传感器,软件,和其他技术用以设备之间和设备与外界的连接和数据交换

组成

image.png

RFID

射频识别,其原理为阅读器与标签之间进行非接触式的数据通信,达到识别目标的目 的。RFID 的应用非常广泛,目前典型应用有动物晶片、汽车晶片防盗器、门禁管制、停车场 管制、生产线自动化、物料管理。

M2M

主要是由通信行业提出的。最初M2M主要是指:不具备信 息化能力的机械设备通过移动通信网络(无线网络)与其他设备或信息系统(IT系统)进行 通信。通信行业认为:网络在满足了人与人之间的通讯需求后,还可以使得“物与物”之间进 行通信联结,构成更高效的信息化应用。此后,M2M的概念又延伸出了“人与机器”或“机器与 人”的概念。总体来说,M2M就是指人、设备、信息系统,三者之间的信息互通和互动。

两化融合

两化融合是信息化和工业化的高层次的深度结合, 是指以信息化带动工业化、以 工业化促进信息化,走新型工业化道路;两化融合的核心就是信息化支撑,追求可持续发展 模式。

传感器

由随机分布并集成有传感器、数据处理单元和通信单元的微小节点,通过自组织方 式构成的无线网络

2.3 CPS的基本组成

定义

  • 信息物理系统(Cyber-Physical Systems)作为计算进程和物理进程的统一体,是集成计算、通信与控制于一体的下一代智能系统。
  • 高度复杂的系统运用到控制,网络,计算,使得拓展了对系统的监视
  • IoT更像是获取信息,CPS  presents a higher combination and coordination between physical and computational elements.(物理世界和计算世界之间更复杂的结合和协作)

基本组成

传感器、执行器、决策控制单元

3. 嵌入式系统设计

3.1 嵌入式系统面临的挑战

设计所面临的挑战

  • 硬件的数量
  • 处理多项功能在时间上的协调一致的关系
  • 降低系统的功耗
  • 保证系统可以升级
  • 保证系统正常工作

设计者要求

  • 懂得系统的整个构架
  • 详细了解硬件的细节
  • 软件设计需要满足实时性,低功耗,代码量小
  • 需要详细了解领域知识

3.1 传统开发过程

基本特征

  • 系统一开始就被划分为软件和硬件两大部分
  • 两部分独立进行开发设计
  • 通常是先开发硬件

隐含问题

  • 软硬件之间的交互收到很大限制
  • 凭经验划分软件和硬件
  • 软件硬件之间的相互性能影响很难评估
  • 系统集成相对滞后,开发成本高

总结

  • 设计质量差
  • 设计修改难
  • 研制周期不能得到有效保障

3.3 软硬件协同设计-

并行开发

3.4 软硬件划分

  • 什么由硬件实现,软件实现
    • 硬件:性能高,不可更改
    • 软件:成本高,灵活性更好
  • 软件硬件的双重性是划分决策的前提
  • 软硬件变动对于系统决策的影响
  • 多种因素影响划分

软件实现的部分

  • 操作系统
  • 协议栈
  • 应用软件框架
  • 除了基本系统、物理接口、基本逻辑电路,许多由硬件实现的功能都可以由软件实现

硬件实现的部分

  • 物理接口
  • 逻辑电路

双重性部分

  • 算法
  • 数学运算

4. 嵌入式硬件系统基础

4.1 嵌入式微处理器基础

4.1.1 嵌入式微处理器体系结构

冯诺伊曼结构

  • 运算器,控制器,存储器,输入设备,输出设备五大基本部分组成
  • 指令和数据不加区分地存在同一个存储器
  • 存储器是按地址访问的线性编址的一维结构,统一编址
  • 通过指令直接发出控制信号控制计算机的操作,CPU通过指令计数器获取指令
  • 以运算器为中心,IO设备与存储器间的数据传输都要经过运算器

哈佛结构

  • 哈佛结构是一种存储器并行体系结构,主要特点是将程序和数据存储在不同的存储空间中
  • 即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。
  • CPU首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。
  • 程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度。
  • 总线数是冯诺依曼结构的两倍,也就是说数据吞吐率是冯诺依曼结构的两倍。
  • 哈佛结构有两个独立的存储器模块、两条独立的总线、执行时可以预先读取下一跳指令,有较高的执行效率

CISC与RISC

image.png

流水线技术

在CPU中由若干个不同功能的电路单元组成一条指令处理流水线,然后将一条指令分成若干 步后再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一条指令,因此提 高CPU的运算速度。(提高CPU利用率、并行计算)

分类

  • 按位数分为4,8,16,32,64
  • 按照功能不同分为MPU,MCU,DSP,SoC

MPU

  • 类比于单纯的CPU,体积小,功耗小

MCU

  • 将整个计算机系统的主要硬件集成到一块芯片中
  • 芯片内部集成 ROM/EPROM, RAM, 总线, 总线逻辑, 定时/计数器,Watchdog, I/O, 串行口等各种必要功能和外设.

DSP

  • 专门用于信号处理方面的处理器,在系统结构和指令算法方面进行了特殊设计,具有 很高的编译效率和指令执行速度(摩托罗拉、ADI、TI),用软件实现处理

Soc

  • 追求产品系统最大包容的集成器件,绝大多数系统构建都在一个系统芯片内部(高通、骁龙、海思)

选型

  • 高效并且经济的满足计算任务的计算需求
    • 速度,ROM/RAM的数量,IO端口和计时器的数量、大小、包装、功耗
    • 易于升级
    • 单位成本
  • 开发工具的可用性
  • 微处理器的广泛可用性
  • 选择步骤
    • 所需的硬件接口
    • 检查软件架构
    • 选择架构
    • 确定内部需求
    • 搜索微处理器
    • 检查成本和功率限制
    • 检查零件可用性
    • 选择开发工具包
    • 调查编译器和工具
    • 开始试验

4.1.2 ARM–

工作状态

运行模式

寄存器结构

中断和异常

4.1.3 WatchDog*

功能

  • 嵌入式控制系统运行时,收到外部干扰或者系统错误,程序有些时候会出现“跑飞”的情况,最终导致整个系统瘫痪,为了防止这一现象的产生,在对系统稳定性要求较高的场合往往要加入看门狗电路
  • 看门狗电路的作用就是当系统跑飞而进入死循环的时候,恢复系统的运行

基本原理

  • 设置本系统程序完整运行一个周期的时间是tp,看门狗的定时周期为ti,并且ti大于tp。
  • 在程序运行一周期后就修改,即重新设定看门狗的定时器的计数值,只要程序正常运行,就可以在规定的时间间隔内向看门狗发送一个信号,定时器就不会溢出
  • 但是如果由于干扰等原因使得系统不能在tp时刻修改定时器的计数值,定义器将会在ti时刻溢出,从而引发系统复位
  • 最终系统能够重新运行,从而起到监控作用

看门狗定时器寄存器

  • WTCON看门狗控制寄存器,通过这个寄存器可以使能/禁止看门狗、选择输入时钟源、使能/关闭中断、使能/关闭输出
  • WTDAT看门狗数据寄存器,用于设置看门狗定时器的初值,在初始化的时候不会自动加载到定时器中,首次定时器初始化的值是0x8000,之后该寄存器的值会被自动加载到WTCNT中
  • WTCNT看门狗计数寄存器,它的值表示该定时器的当前计数值,即到下一 次溢出还需要经历的时钟数。当该定时器工作在看门狗模式时使用该寄存器,每次溢出前需要重新设置其值,以防止发生复位。

4.2 嵌入式系统的存储体系

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

  • 金字塔层次结构,从上到下依次是:寄存器,高速缓存存储器,主存,硬盘,网络文件
  • 越高的越小,越贵,运行速度越快
  • 越低的越大,越便宜,运行速度越慢

image.png

4.2.2 ROM的种类与选型

  • ROM
  • PROM(Programmable ROM),具有一定的灵活性,可编程一次
  • EPROM(Erasable Programmable Read Only Memory,EPROM),可多次编程,是一种以读为主的可读可写的存储器
  • EEPROM(Electrically Erasable Programmable Read-Only Memory),一种随时可写入而无须擦除原先内容的存储器,其写操作比读操作时间要长得多,EEPROM把不易丢失数据和修改灵活的优点组合起来,修改时只需使用普通的控制、地址和数据总线
  • Flash Memory

4.2.3 Flash的种类与选型

  • Flash是电可擦除的,擦除时清除一整块
  • 随机访问,写/擦除比读慢很多
  • 随着擦除次数的增多逐渐失效
  • NOR FLASH存储少量数据,更灵活,按word读
  • NAND FLASH存储高密度数据,按page读取

4.2.4 RAM的种类与选型

  • DRAM,更稠密,要求动态刷新电路,即隔一段时间要充电
  • SDRAM使用时钟提高性能,流水线式内存访问
  • SRAM,静态RAM,不需要刷新电路即可保存内部的数据,能够快速读取
  • NVRAM,随机访问,结合了dram的高速及耐写特定以及nand闪存的非易失性

4.2.4 Cache-

4.3 嵌入式系统总线*

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

总线结构

  • 单总线,使用一条单一的系统总线来连接CPU,主存和IO设备,总线只能分时间工作,使得信息传送的吞吐量受到限制
  • 双总线,在CPU和贮存之间专门设置了一组高速的存储总线,使得CPU可以通过专用总线与存储器交换信息,并且减轻了系统总线的负担,主存仍可通过系统总线与外设之间实现DMA操作,而不必经过CPU
  • 多总线,增加了IO总线,系统总线被用来在CPU,主存和通道之间进行数据传送的公共同路,IO总线用来在多个外部设备和通道之间进行数据传送的公共通路。通道IOP实际上是一台具有特殊功能的处理器,分担了一部分CPU的功能,来实现对外设的统一管理以及外设与主存之间的数据传送

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

忙等IO

  • 用指令来检查设备是不是就绪
  • CPU不能再检查设备的过程中执行其他指令
  • 很难处理同时发生的IO操作

中断IO

  • 基于子程序调用,使得下一条指令为一个子程序调用的预定位置,返回位置被保存
  • CPU和设备之间通过总线连接
  • CPU和设设备之间进行握手
  • 设备发出中断请求
  • 当CPU能处理中断的时候发出中断确认请求

中断的两种机制

  • 优先级决定哪个中断先获得CPU
  • 中断向量决定每个中断对应的执行代码

4.3.3 Programming IO: Independent IO port. Memory-Mapped IO

https://www.eefocus.com/embedded/399621

Independent IO

  • 把外设的寄存器堪称一个独立的地址空间,访问地址的指令不能用来访问这些寄存器
  • CPU通过为外设寄存器的读写设置专用指令来访问这些空间中的地址单元
  • 用于IO指令的地址空间相对来说是很小的,指令短,执行速度快,可读性强
  • 专门的IO指令访问端口,IO端口地址可以和存储器地址重叠,并且不会相互混淆,
  • 缺点:
    • 只能用专门的IO指令,访问端口的方法不如访问存储器的方法多

Memory-Mapped IO

  • 使用相同的地址总线来寻址内存和输入输出设备
  • 前提是IO设备上的设备内存和寄存器是被映射到内存空间的某个地址的
  • 当CPU访问某个地址的时候,可能是要访问物理内存,也可能是要访问IO设备上的内存
  • 这样设备IO也可以通过内存访问指令来完成度鞋,每个IO设备会检测CPU的地址总线,如果地址区域是在本设备对应的地址区域的时候做出响应,创建数据总线和响应设备寄存器之间的连接
  • 相应的地址空间必须给这些设备保留,并且不能再分配给系统物理内存
  • 缺点
    • 对cache及其不友好
    • 只有一个地址空间,性能方面更加薄弱

4.3.4 GPIO接口基本原理与结构–

5. 嵌入式系统软件知识

5.1 嵌入式软件基础知识*

5.1.1 嵌入式软件的特点

  • 实时性,嵌入式系统一般都对实时性有着比较高的要求,运行在上面的嵌入式软件
  • 轻量性,嵌入式系统的的轻量性让嵌入式软件的代码量不能太大
  • 独特性,一般在特定的嵌入式操作系统上才能运行
  • 开发难度大,硬件资源有限,涉及底层开发,开发环境与运行环境不同
  • 可靠性,抗干扰的能力更强
  • 固态存储,结果通常需要固化在目标系统的存储器或者单片机中

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

系统软件

  • 控制和协调计算机以及外部设备,支持应用软件开发和运行的系统
  • 无需用户干预的各种程序的集合
  • 在购买计算机系统的时候随机携带,也可以根据需要自行安装
  • 系统软件使得计算机使用者和其他软件将计算机当作一个整体

支撑软件

  • 支持其他软件的编制和维护,在软件开发中占有重要地位
  • 位于系统软件和应用软件之间
  • 提供应用软件设计、开发、测试、评估、运行检测等辅 助功能的软件

应用软件

  • 用户可以使用的各种程序设计语言,以及用各种程序设计语言编制的应用程序的集合

5.1.3 嵌入式软件体系结构

软件层次

image.png

轮询模式

  • 轮流询问各个task,如果需要服务,就提供服务,
  • 没有优先级,所有的任务组成一个序列进行,一开始的顺序就决定了执行顺序,后面的任务的执行可能会降速
  • 响应时间等于所有任务的时间的总和
  • 改变的影响显著,一个任务的改变会影响其他所有的任务
  • 没有共享数据的问题

状态机

  • 和轮训差不多,但是只有当前的状态会被执行,这里是switch,case,轮训是连续的if
  • 每个状态决定了下一个状态,不是像轮训一样的sequential execution
  • 每个状态决定了下一个状态的优先级
  • 响应时间为所有任务的响应时间
  • 改变任务或者增减任务会影响其他任务
  • 简单,没有任务共享

中断轮询

  • 中断的优先级最高,在所有if的最开始,中断本身也有优先级
  • 响应时间为所有任务的响应时间或者中断执行时间
  • 在中断服务历程中,改变的影响不大,在主循环中和轮询是一样的
  • 共享数据:要处理中断之间共享的数据

中断:

  • 中断太多会有问题
  • 高优先级中断的执行时间长于低优先级中断的,可能会发生miss
    • 或者需要处理嵌套中断
  • 中断自带优先级
  • 响应时间为中断的执行时间
  • 改变带来的影响很小
  • 需要处理中断之间的数据共享问题

函数队列

  • 函数的指针被添加到队列中
  • 循环遍历队列,执行任务
  • 任务或者中断会插入新的任务
  • 响应时间是最长的任务的执行时间
  • 添加任务:
    • 先从当前任务index遍历到最后,有空指针就插入,然后返回
    • 再从当前任务的index往前遍历,有空就插入,然后返回
  • 改变的影响小
  • 中断优先级,任务依次执行
  • 必须处理ISR之间的共享数据

函数队列的优化

  • 每一个task里面有一个time用来计时,时钟中断会降低所有task的time,当time到达0的时候,可以执行这个任务
  • 每一个task里面增加优先级,高优先级的任务被添加到队列之前

5.2 嵌入式操作系统基础知识**

5.2.1 RTOS概念,特点,选型原则

概念

  • 对外来时间能在限定的响应时间内作出处理的计算机系统
  • 当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在 规定的时间之内来控制生产过程或对处理系统做出快速响应
  • 调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。

特点

  • 可移植性
  • 强调实时性能
  • 内核精简
  • 抢占式内核
  • 使用可重入函数
  • 可配置
  • 可裁剪
  • 高可靠性。

选型原则

  • 成本,使用的成本(购买)或者是学习使用的成本(开源)
  • 可靠性,选择经得起时间考验的系统
  • 实时性,挑选能满足自己需求的,实时性最契合的系统
  • 工具链,能够选择工具链开发的权利,例如编译器,之类的
  • 模块丰富,是否有集成好的模块,或者是不是支持集成外来模块,不会发生冲突
  • 硬件,确保已有硬件资源能够保证顺畅的使用这个RTOS

5.2.2 任务管理

进程、线程、任务的概念

  • 进程是指运行中的应用程序,每一个进程都有自己的独立的内存空间,一个应用程序可以同时启动多个进程
  • 线程是操作系统能够进行运算的最小单位,线程被包含在进程之中,是进程的世纪运行单位,一条线程就指进程中的单一顺序的控制流,一个进程中可以并行运行多个线程,线程自己不拥有系统资源,但是同一个进程之间的线程是共享进程的资源的
  • 任务,是指软件完成的一个活动,又可以是一个进程,也可以是一个线程,简而言之就是指一系列共同达到某一目的的操作。

任务的实现(任务的层次结构,任务控制块,任务的状态以及状态转换,队列)

  • 任务的层次结构:
  • 任务控制块:描述一个任务的核心数据结构,存放了它的各种管理信息,包括 任务堆栈指针,任务的状态、优先级,任务链表指针等; 一旦任务建立了,任务控制块 OS_TCB将被赋值。
  • 任务状态以及状态转换

image.png

  • 任务队列:系统未必能够及时处理所有任务,根据功能的不同,分为空闲队列,就绪队列,等待队列,挂起队列等等,保存未被处理的任务,后面再由调度器调度

任务调度(可抢占调度,不可抢占调度,先来先服务,时间片轮转算法,优先级算法)

  • 抢占式调度:
    • 任何时刻,最高优先级的任务被执行,如果产生了新的优先级变化或者任务状态的变化,内核可以调度新的优先级的任务来执行
  • 不可抢占调度:
    • 系统一旦把处理器分配给就绪队列中优先级最高的任务后,该任务一直执行直到完成,或者直到某个事件发生让该进程放弃处理的时候,系统才能分配cpu给其他任务
  • 先来先服务
    • 总是把处于就绪队列之首的那个任务调度到运行状态,只考虑进入就绪队列的先后,不考虑其他因素,非抢占式的调度
  • 时间片轮转
    • 每个进程被分配一个时间段,称为时间片,就是该进程允许运行的时间
    • 如果在时间片结束还在运行,CPU被剥夺,跟赔给另一个进程,没有被执行完的进入队列尾部
    • 如果在时间片内执行结束,cpu立刻切换

实时系统以及任务调度(RMS,EDF算法)

  • RMS单一速率调度,静态调度策略
    • 分配给每个进程的优先级是固定不变的
    • 周期最短的进程优先级最高
  • EDF
    • 根据截至时限的顺序制定优先级,最高优先级的进程是当前截止实现最邻近的进程

任务间通信(共享内存、消息、管道、信号)

  • 共享内存直接申请一块物理内存通过页表映射到虚拟地址空间中,操作虚拟地址空间,其实是操作同一块物理内存区域,因此进行数据传输时相较于其他通信方式,少了两步用户态与内核态数据拷贝的过 程,因此共享内存是最快的进程间通信方式。
  • 消息队列实际上是操作系统在内核为我们创建的一个队列,通过这个队列的标识符key,每一个进程都可以打开这个队列,每个进程都可以通过这个队列向这个队列中插入一个结点或者获取一个结点来完成不同进程间的通信。
  • 管道通信的中间介质是文件,通常称这种文件为管道文件。两个进程利用管道文件进行通信时,一 个进程为写进程,另一个进程为读进程。写进程通过写端(发送端)往管道文件中写入信息;读进程通过读端(接收端)从管道文件中读取信息。两个进程协调不断地进行写、读,便会构成双方通过管道传 递信息的流水线。
  • 信号,进程间通信方式之一,用于实现进程之间的同步与互斥

同步与互斥(竞争条件、临界区、互斥、信号量、死锁)

  • 竞争条件
    • 多个进程或者线程在读写一个共享数据时结果依赖于它们执行的相对时间的情形。
    • 假设两个进程P1和P2共享了变量a。在某一执行时刻,P1更新a为1,在另一时 刻,P2更新a为2。
    • 因此两个任务竞争地写变量a。在这个例子中,竞争的“失败者”(最后 更新的进程)决定了变量a的最终值。
  • 临界区
    • 一个访问共用资源的程序片段
    • 但是这些共用资源不能被多个线程访问
  • 互斥
    • 任务A在运行某个程序片段时,其他任务不能运行该程序片段,就说这两个任务存在互斥关系。
  • 信号量
    • 用来保证两个或者多个关键代码段不被并发调用,在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量
    • 其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量
    • 对信号量的操作都是原语
    • 两个进程共享信号量sv,一旦其中一个进程执行了P(sv)操作,它将得到信号量,并可以进入临界区,使sv减1。而第二个进程将被阻止进入临界区,因为当它试图执行P(sv)时,sv为0,它会被挂起以等待第一个进程离开临界区域并执行V(sv)释放信号量,这时第二个进程就可以恢复执行。
  • 死锁
    • 两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造 成的一种阻塞的现象

线程1锁住了记录1并且等待记录2,线程2锁定了记录2并等待记录1

5.2.3 存储管理

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

  • 静态分配:在编译的时候分配
  • 动态分配:在任务运行的时候使用malloc函数来动态申请内存空间
  • 在动态分配中,可能存在内存碎片问题,特别是当用户反复的建立和删除任务的时候,内存堆中可能会存在大量的碎片,导致没有足够大的一块连续内存区域可用作任务栈,这时malloc()便无法成功地为任务分配栈空间。 μC/OS采用的是固定分区的存储管理方法,用以解决碎片问题

5.2.4 设备管理–

5.2.5 文件系统基础知识–

5.2.6 操作系统移植基础知识–

5.3 嵌入式系统程序设计–

5.3.1 嵌入式软件开发基础知识

5.3.2 嵌入式程序设计语言

5.3.3 嵌入式软件开发环境

5.3.4 嵌入式软件开发

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

6.1 实时任务调度

  • μC/OS_II进行任务调度的思想是 “近似地每时每刻总是让优先级最高的就绪任务处于运行状 态” 。为了保证这一点,它在系统或用户任务调用系统函数及执行中断服务程序结束时总是调 用调度器,来确定应该运行的任务并运行它。
  • μC/OS_II进行任务调度的依据就是任务就绪表
  • 空闲任务(把32位计数器OSIdleCtr加1,该计数器被统计任务所使用)、统计任务(提供运行时间统计,可以计算当前CPU的利用率)、任务控制块、空闲列表、任务就绪表

6.2 中断与时钟

中断

  • μC/OS-II系统响应中断的过程为:系统接收到中断请求后,这时如果CPU处于中断允许状态(即中断是开放的),系统就会中止正在运行的当前任务
  • 而按照中断向量的指向转而去运行中断服务子程序
  • 当中断服务子程序的运行结束后,系统将会根据情况返回到被中止的任务继续运行
  • 或者转向运行另一个具有更高优先级别的就绪任务。

时钟

  • OSTimeDLY():任务延时函数,申请该服务的任务可以延时一段时间
  • OSTimeDLYHMSM():OSTimeDly()的另一个版本,即按时分秒延时函数
  • OSTimeDlyResume():让处在延时期的任务提前结束延时,进入就绪状态
  • OSTimeGet():获得该计数器的当前值

6.3 同步与通信

系统中的多个任务在运行的时候,经常需要互相没有冲突的访问同一个共享资源,或者需要互相支持和依赖和互相的限制和制约才能保证任务的顺利运行
操作系统必须具有对任务的运行进行协调的能力

事件控制块ECB

  • 任务间通信的管理核心

同步与互斥

  • 临界区
  • 信号量

低级通信

  • 只能传递状态和整数值等控制信息,传送的信息量小

高级通信

  • 共享内存
  • 邮箱:可以使得一个任务或者中断服务子程序向另一个任务 发送一个指针型的变量,通常指针指向一个包含了消息的特定数据结构
  • 消息队列:邮箱数组

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

μC/OS

  • 采用固定分区的存储管理方法
  • 把连续的大块内存按照分区来管理,每个分区包含有整数个大小相同的块
  • 在一个系统中可以有多个内存分区,这样用户的应用程序就可以从不同的内存分区中得到不同大小的内存块
  • 特定的内存块在释放的时候必须重新放回它之前所属于的内存分区
  • 从而解决了内存碎片问题

    7. bsp,bootloader

7.1 嵌入式系统的启动过程

image.png

上电复位和板级初始化

  • 上电复位后完成板级初始化工作
  • 板级初始化程序具有完全的硬件特性,一般采用汇编语言 实现

系统引导阶段

  • 软件可压缩存储在Flash中,拿出来在ram中运行
  • 也可以直接在NorFlash中运行
  • 也可以从外存中读取出来加载到RAM中运行

系统升级阶段

  • 可通过网络进行升级
  • 或者是通过串口进行本地升级

系统初始化阶段

  • 进行操作系统等系统软件各功能部分必需的初始化工作,例如根据系统配置初始化数据空间、 初始化系统所需的接口和外设等
  • 需要按特定顺序进行,如首先完成内核的初始化,然后完成网络、文件系统等的初始 化,最后完成中间件等的初始化工作

应用初始化阶段

  • 进行应用任务的创建,信号量、消息队列 的创建和与应用相关的其它初始化工作

多任务应用运行阶段

  • 各种初始化工作完成后,系统进入多任务状态,操 作系统按照已确定的算法进行任务的调度,各应用 任务分别完成特定的功能。

7.2 bsp,特点,与bios区别

BSP

全称“板级支持包”(Board Support Packages),类似于一段启动代码,跟计算机主板上的BIOS差不多,但是提供的功能区别相差很大
处于硬件和实时内核之间

特点

  • 硬件相关性:因为嵌入式实时系统的硬件环境具有相关性,所以,作为高层软件与硬件之间的接口,BSP 必须为操作系统提供操作和控制具体硬件的方法
  • 操作系统相关性,:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式

区别

  • BIOS主要是负责在电脑开启时检测、初始化系统设备(设置 栈指针,中断分配,内存初始化..)、装入操作系统并调度操 作系统向硬件发出的指令。BIOS程序是用户不能更改的,只能改变传入的参数
  • UEFI,“统一的可扩展固件接口”, 旨在代替BIOS, 提高软件互操作性和解决BIOS的局限性。UEFI作为旧式BIOS的后继者,用来定义操作系统与系统固件之间的软件界面,作为BIOS的替代方案,UEFI没有加电自检过程(Windows),加快了启动方式
  • BSP是和操作系统绑在一起运行,尽管BSP的开始部分和BIOS 所做的工作类似,但是 BSP还包含和系统有关的基本驱动,用户可以编程修改BSP,添加一些与系统无关的驱动或者程序

7.3 引导模式

引导:将操作系统装入内存并开始执行的过程

不需要BootLoader的引导模式

  • 时间效率高,系统快速启动,直接在非易失性存储介质中运行,但是不满足运行速度的要求

需要BootLoader的引导模式

  • 节省空间,牺牲时间,硬件成本低,运行速度快,启动速度比较慢,在RAM中运行,内核被压缩,搬迁到内存后被展开

7.4 bootloader及其启动过程

概念

  • 嵌入式系统中的OS启动加载程序
  • 引导加载程序包括两部分,一部分是固件中的boot代码,一部分是BootLoader
  • 是系统加电后运行的第一部分软件代码
  • 对于操作系统来说,相当于一个硬件抽象层

启动第一阶段

  • 硬件设备初始化
  • 为加载BootLoader的第二阶段准备ram空间
  • 拷贝第二阶段的代码到ram空间中
  • 设置好堆栈
  • 跳转到stage2的入口

启动第二阶段

  • 初始化本阶段要用到的硬件设备
  • 检测系统内存映射
  • 将内核映像和根文件系统映像从falsh上读取到ram空间中
  • 为内核设置启动参数
  • 调用内核,内核接管

8. 建模**

8.1 有限状态机及其应用

概念

  • 一个有限状态机是一个设备,或者是一个设备模型,具有有限数量的状态,它可以在任何给定的时间根据输入进行操作,使得一个状态变换到另一个状态,或者是使一个输入或者一种行为的发生。一个有限状态机在任何瞬间只能处在一种状态。
  • 状态寄存器的下一个状态不仅与输入信号有关,还与当前该寄存器的状态有关

Moore状态机

  • 状态的输出只依赖于当前状态

Mealy状态机

  • 状态的输出依赖于输入和当前状态

分层状态机

image.png

8.2 有限状态机的实现

switch-case的实现

表驱动,函数指针实现

if-else实现

状态模式

更易于维护和拓展,降低了实际状态之间的耦合,通过抽象接口来实现,当需要修改或者添加状态的时候,只需要修改内部实现,不用改变接口