1.嵌入式系统概要
计算机发展三大阶段
- 研究大型机
- 个人计算机PC
- 后PC时代(becoming an old fashion)
术语演化
- 泛在计算(任何时间任何地点都在算)
- 不可见计算机(计算机被集成到物件)
- 普适计算(计算设备进入日常生活)Bill Gates提出
- 环境智能(未来家庭、智能楼宇)
嵌入式系统定义
IEEE:用于控制、监视或辅助操作机器和设备的装置
国内:以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统(一个具有特定功能或用途的隐藏在某种设备中的计算机软硬件集合体,没有固定的特征形状)
老师喜欢:包含计算机,但又不是通用计算机
不单单指嵌入到某个设备,也可以是被嵌入到某个过程
嵌入式系统三要素
- 嵌入性:嵌入到对象体系,有对象环境要求
- 专用性:软硬件按对象进行裁剪
- 计算机
CPS 信息物理系统 Cyber-Physical System
- 嵌入式和物理学深度融合
通信的重要性
无线感知网络-wireless sensor network
许多空间中分布的自动装置组成的无线通信计算网络,使用传感器协作监控不同位置的物理或环境状况
IOT 物联网 Internet of Things
比上面那个功能强多了,智能化识别、定位、跟踪、监控和管理
物联网技术开发被称作工业4.0
2.导论
嵌入式系统的组成
- 一般由嵌入式硬件和软件组成
- 硬件以微处理器为核心集成存储器和系统专用的输入输出设备
- 软件包括:初始化代码及驱动、嵌入式操作系统和应用程序等
ROS 集成操作系统
OTA 空中下载技术
3.
处理器和处理器体系结构类型多
关注成本
最重要的成本是系统成本
成本主要包括:
- 一次性开发成本
- 硬件BOM,外壳包装,软件版税
- 批量产品的总体成本=NRE成本+每个产品成本*产品总量
- 每个产品最后的成本=总体成本/产品总量=NRE成本/产品总量+每个产品成本
实时性和可靠性的要求
- 大多数实时系统都是嵌入式系统
- 多数嵌入式系统有实时性要求
- 嵌入式系统要求有出错处理和快速启动的功能
- 大多数嵌入式系统的软件一般都包括一些机制,比如硬件看门狗计时器,软件的内存保护和重启动机制
适应多种处理器、可裁剪、轻量型、实时可靠、可固化的嵌入式操作系统
- 由于嵌入式操作系统的特点,嵌入式操作系统多种多样
- 大多数商业嵌入式操作系统可同时支持不同种类的嵌入式微处理器。可根据应用的情况进行剪裁、配置
- 嵌入式操作系统规模小,所需的资源有限如内核规模在几十KB,能与应用软件一样固化运行
- 一个实时内核,一般采用基于优先级的可抢占的调度算法(为了满足实时要求)
- 可靠
旧的交叉开发工具已经不那么流行了
嵌入式系统的分类
- 按嵌入式处理器的位数来分类
- 四位
- 八位
- 十六
- 32
- 64
- 按应用来分类
- 按速度
- 强实时系统
- 一般实时系统
- 弱实时系统
- 按确定性分类
- 硬实时:系统响应时间不能得到满足,系统就会寄掉
- 软实时:不满足也不会寄掉
- 准实时:两个之间,偏向于软实时
- 按照嵌入式软件的复杂程度分类
- 循环轮询系统
- 有限状态机系统
- 前后台系统
- 单处理器
发展趋势
- 嵌入式人工智能
- 安全
- 以往的安全策略,由于嵌入式设备不具备通用计算性,可能不可用
- 设备接入公网后漏洞百出
- 不断增加的计算需求
- 互连的需求
- 灵活性需求
- 软硬件协同设计
- 更高集成度
- IP重用
- 设计方法的多样性
- 云、边缘计算(云边端计算)
4.嵌入式系统设计
嵌入式系统面临的挑战
- 需要多少硬件?
- 如何满足时限要求,如何处理多项功能在时间协调上的一致关系?
- 如何降低系统功耗?
- 如何保证系统可升级?
- 如何保证系统可靠的工作?
嵌入式系统设计者要求
- 懂得整个系统架构
- 详细了解硬件的细节
- 详细了解硬件的细节
- 软件设计满足
- 实时要求
- 低功耗
- 代码量小
- 详细了解领域知识
设计目标
- 成本
- 性能
- 功耗
- 尺寸
- 可伸缩性和可重用性
- 容错
- …
体系结构设计
- 主要组件
- 硬件软件
软硬件划分
- 嵌入式系统的设计涉及硬件和软件,设计中必须决定什么功能由硬件实现,什么功能由软件实现
- 硬件和软件具有双重性(有很多问题既能用硬件实现,也能用软件实现)
- 算法
- 加密解密
- 编码解码
- 压缩解压
- …
- 数学运算
- 浮点运算,FFT,…
- …
- 算法
软硬件技术对系统结构的影响
- 软硬件设计的趋势
嵌入式系统设计方法的演变
- 以PCB(印刷电路板)、CAD(电脑辅助设计)和在线仿真器为主要工具
- EDA(电子设计自动化)和EOS(嵌入式操作系统)为开发平台
- 以IP(知识产权)内核库为设计基础,用软硬件协同设计技术的系统级设计方法
传统嵌入式系统的设计过程
- 基本特征
- 系统已开始就被划分为软件和硬件两大部分
- 软件和硬件进行独立开发设计
- 硬件优先
- 隐含的一些问题
- 软硬件之间的交互收到很大限制
- 凭经验划分软硬件
- 软硬件之间的相互性能很难评估
- 系统集成相对滞后,NRE(一次性工程费用:开发新产品的单次成本)较大
- 软硬件之间的交互收到很大限制
- 因此:
- 设计质量差
- 设计修改准
- 研制周期不能有效保障
软硬件协同设计HW/SW Co-design
- 任务并发管理
- 高级的转换
- 设计空间探索
- 软硬件划分
- 编译、调度
stateDiagram behavior --> SW: partitioning behavior --> HW: partitioning SW --> compilation HW --> synthesis compilation --> 验证方案 synthesis --> 验证方案
4.硬件部分
硬件总览
- 传感器:将非电信号转为电信号
- A/D D/A converter:模拟信号与数字信号之间的转换
- 微控制器
- 展示
- 执行器 actuator
- 硬件平台
- cpu
- bus
- memory
- I/O
嵌入式微处理器
Embedded Microprocessor
流行的微处理器指令集
- ARM架构:
- ARM(Advanced RISC Machine)是一种精简指令集计算机(RISC)架构,最初由英国的ARM Holdings开发。它在移动设备(如智能手机和平板电脑)和嵌入式系统中得到广泛应用。
- ARM架构具有较低的功耗和较高的能效,适合于便携式设备。它采用了三级流水线结构,具备较高的指令并行性,并且支持多核处理器。
- MIPS架构:
- MIPS(Microprocessor without Interlocked Pipeline Stages)是另一种RISC架构,最初由美国的MIPS Technologies开发。它在早期计算机和嵌入式系统中得到广泛应用。
- MIPS架构以其简洁的设计和高性能而闻名。它采用了五级流水线结构,具备较低的指令延迟和高的指令并行性。MIPS架构在路由器、嵌入式控制系统和一些游戏机中得到广泛应用。
- PowerPC架构:
- PowerPC是由IBM、摩托罗拉(Motorola)和苹果(Apple)共同开发的RISC架构。它最初是为个人电脑和工作站设计的,但后来在游戏机和服务器领域也有广泛应用。
- PowerPC架构在科学计算和高性能计算领域表现出色。它采用了乱序执行(Out-of-Order Execution)和超标量技术,具备较高的性能和并行处理能力。
- x86架构:
- x86架构是英特尔(Intel)和AMD等公司开发的复杂指令集计算机(CISC)架构,最初用于个人电脑。现如今,x86架构在桌面计算机、服务器和数据中心中占据主导地位。
- x86架构具有广泛的软件支持和较高的兼容性。它采用了复杂的指令集,可以执行多种复杂的操作。x86架构的一些变种包括IA-32和x86-64(也称为AMD64或Intel 64),后者为64位扩展。
RISC vs CISC
精简 vs 复杂
RISC比较好做编译器优化
RISC-V
- 简单、完全开源且免费
- 基准指令和扩展指令分开,可以做定制化的模块和扩展
- 提供32、64、128位指令集
设计芯片需要考虑的五件事
- 成本
- 生态系统
- 碎片化风险
- 安全性
- 设计保证
嵌入式微处理器
- 种类繁多,按位数可分为4、8、16、32、64
嵌入式微处理单元(MPU)
- 嵌入式微处理器就是和通用式计算机处理器对应的cpu
- 功能和微处理器基本一样
- 体积小、功耗少、可靠性高
- 有的可提供工业级应用
嵌入式微控制器(MCU)
- 嵌入式微处理器将整个计算机系统的主要硬件集成到一块芯片中,一块芯片内部就有了POM、EPOM、RAM、bus、Timer、I/O、串行口等各种必要功能和外设
- 特点
- 一个系列,多种衍生
- 单片化,可靠,功耗低,便宜
- 主力军,份额50%
- 一般用于性能比较低的产品,比如洗衣机冰箱的嵌入式系统
- 一般是八位或十六位
嵌入式DSP
- 嵌入式DSP是专门用于信号处理方面的处理器,其在系统结构和指令计算方面进行了特殊设计,具有很高的变异效率和指令执行速度
- 应用领域
嵌入式SoC
- 追求产品系统最大包容的集成器件,绝大多数系统构件都在一个芯片
- SoC芯片可以有效降低电子信息系统产品开打的成本
- 典型:
- 高通骁龙
- 海思
嵌入式微处理器的特点
- 基础还是通用微处理器
- 与通用相比
- 体积小重量轻可靠性高
- 功耗低
- 成本低
- 工作温度、抗电磁干扰,可靠性增强
ARM公司
- 成立于1990年11月
- 设计了ARM系列的RISC处理器内核
- 授权ARM核心设计的半导体合作伙伴制造和销售给他们的客户
- 同时开发技术以协助ARM架构设计
ARM架构
- 典型的RISC架构
- 丰富的寄存器
- 加载/存储体系结构
- 简单寻址模式
- 统一和固定长度的指令字段
Meltdown & Spectre
与推测性执行和Cache有关的硬件级漏洞
cpu进行分支预测推测操作时提前执行了代码,并且将结果存在了cache里,结果分支清空时只清空了寄存器,没有清空cache,黑客可以利用cache中的结果进行越权操作
选择微处理器
- 列出所需的硬件接口
- 检查软件架构
- 选择体系结构
- 确定内存需求
- 开始搜索微控制器
- 检查成本和功率限制
- 检查零件可用性
- 选择一个开发工具包
- 研究编译器和工具
- 开始尝试
存储器架构
- 对许多应用来说,存储系统对整个系统性能的影响比对数据流水线的影响更大
- 复杂:
- 在同一个嵌入式系统中,通常需要组合各种存储技术
- 至少需要一些非易失和易失
- 在同一个嵌入式系统中,通常需要组合各种存储技术
易失性存储器
SRAM DRAM
非易失性存储器
disk,ROM,Mash ROM,EROM,EEROM,Flash
固件firmware
一般存在EEPOM或Flash中,用户可以通过特定刷新程序来进行升级
ROMable 可固化
可以被编程到POM芯片中的机器语言
固件其实也是一种程序,是软件,只不过被固化到了ROM上
Flash
比较快的读取时间,但是还是比RAM慢
写入时间大大超过读取时间,而且写入次数是有限的
flash类型
NOR
- 按快擦除
- 擦除和写入时间较长,但能够像RAM那样访问
NAND
- 以块为单位,一个数据块是数百或数千比特
- 擦除和写入速度比较快
- 按页读取(512-4K字节)
主要应用对比
NAND NOR 文件存储 代码执行 存储容量高 低 成本低 高 动态功耗低 高 待机功耗高 低 写入速度快 慢 读取速度慢 快 execute in Place(XIP)就地执行(芯片内执行,不用拷到RAM中)不支持 支持 可靠性低 高
存储器层次结构
- 寄存器
- spm
- cache
- 内存
- 外存/互联网存储器
Cache之于ES
cache的加入导致了访问时间的不可预测,对嵌入式系统的可靠性和实时性能产生负面影响
SPM暂存存储器
比cache功耗低,速度快,和处理器集成在一个芯片上
存储器访问时间难以预测
虚拟存储器MMU,使各种存储技术看起来是一个连续的地址空间
地址转换TLB
总线式嵌入式系统
访问存储
- 独立I/O和内存空间
- I/O不占用内存
- 使用I/O指令,程序清晰
- 译码电路比较简单
- 只能用专门的I/O指令,访问的方式比较少
- 内存映射I/O
- 使用同一方式寻址,可以用C语言直接编写
- 不需要额外的保护机制
- 缓存设备控制器可能影响I/O设备的使用,一般需要专门的逻辑设置缓存禁用
- 如果只有一个地址空间,内存模块和I/O设备必须检查所有的内存引用,以决定要响应哪一个
- 混合方案
嵌入式系统
递归函数
所有递归函数都必须是可重入的
在嵌入式系统中尽量避免使用递归,递归调用栈带来的内存开销很可能是致命的
异步硬件/固件
竞态条件
设备或系统出现不恰当的执行顺序,从而得到不正确的结果
解决:
- 把导致竞态的服务禁用
- 乐观锁
- 悲观锁
IO
总线复用
多总线机制
一根高速总线,一根低速总线,中间桥接一下
常用的总线
UART(经济、简单,功能有限)、CAN(安全快速,很复杂)、USB(适用于即插即用的硬件,需要强大的主机、需要指定驱动)、SPI(快速、低成本,无即插即用硬件)、IC
嵌入式软件系统概述
与桌面软件的区别
内存十分有限
cpu能力十分保守
操作系统
实时行为
开发工具
- es使用交叉编译器
- 往往在开发中嵌入一些汇编代码
软件组件
- 库,这些库必须是适合es环境的,比如c++的STL库有一些就不适合es环境
软件、硬件的权衡
- 微处理器
- 内存大小组合(调试的时候能用ram别用rom)
- 需认真考虑设计中包含哪些外设
- 需要重点考虑硬件费用
- 有时可用软件替代
调试
- 在线仿真器ICE
- 模拟CPU的功能
- 价格昂贵
- 监控调试器
- 需要通信通道
- 占用系统资源
- 片上调试
- JTAG是边界扫描的一个标准协议
- 价格便宜,易于实现
- 广泛使用
自检
- IO电路
- 板载开关
- 状态显示
单线程模型
- 优点
- 编程再编程简单
- 改变系统响应特性的同时
多任务模型
- 优点
- 允许将系统工作划分为几个逻辑阶段
ROS
ROS是一个适用于机器人的开源操作系统
提供了操作系统应有的服务,包括硬件抽象、底层设备、常用函数、进程间消息的传递
提供用于获取、编译、编写和跨计算机
管道
ROS的核心是提供一个消息传递系统
通过匿名发布/订阅模式管理分布式节点之间的通信细节
这种方法鼓励软件开发中的良好实践
嵌入式软件设计模式
- 两部分
- 业务逻辑
- 实时依赖硬件的逻辑
- 抽象层将所需操作的高级请求转换为操作所需的低级命令
非结构化单体架构
- 很容易构建,但很难维持规模和移植
- 与应用层的应用程序紧密耦合
事件驱动架构
微服务架构
微内核架构
故障恢复机制:看门狗
一个计数器,每来一个时钟脉冲+1,一旦计数器溢出,就reset MCU,造成恢复
为了避免触发恢复,我们要“喂狗”,重置看门狗的计数器
线性数据
中断服务器直接访问,需要由锁保护起来,避免竞态条件
RTOS应用程序设计模式
RTOS程序通常有两种同步:
- 资源同步:共享资源的访问是否安全
- 活动同步:决定执行是否已达到特定状态
资源同步
中断锁定
抢占锁
当两个任务都在访问时,最先访问的任务抢到锁
在临界期内核抢占锁会被禁用,可能导致高优先级的任务无法执行
互斥锁
保护共享资源的最安全、最推荐的方法之一是使用互斥锁。互斥锁通 过创建一个对象来保护临界区,该对象的状态可以被检查,以确定是 否可以安全访问共享资源,其唯一目的是为共享资源提供互斥
互斥锁不会禁用中断,它不会禁用内核的抢占调度程序
保护共享资源的互斥锁的一个潜在问题是,开发人员需要知道它的存在
活动同步
关于协调任务执行
单向同步
双向同步
广播设计模式
发布和订阅模型(在ES中广泛使用)
发布者向特定的主题发布消息,订阅这个主题的接受者收到这类消息
系统完全可扩展
低功耗设计模式
尽可能保持设备关闭
多核架构
同构多核
异构多核
比如可以一块内核用于机器学习推理,一块内核用于标准实时运算
ROS 入门
节点 Nodes
单一用途的可执行程序,比如传感器驱动、地图构建、规划、UI
单独编译、执行和管理
使用ROS客户端库编写节点
- roscpp
- python
节点可以发布或订阅topic
节点也可以通过或使用服务/行动
节点管理器Master
为节点提供链接信息,以便各节点之间互通消息
跟踪和记录主题/服务通讯,辅助节点相互查找、建立连接
提供参数服务器,节点使用此服务存储和检索运行时的参数
唤醒参数ROS_MASTER_URL包含ROS Master的ip和port
节点管理器是违背分布式理论的,在ROS2中已经被剔除
ROS主题
已定义类型的命名消息流
可对名为scan的主题发送来自测距仪的数据,消息类型为LaserScan
ROS消息
消息:用于节点间通信的严格类型的数据结构
.msg是带有字段类型和名称的简单文本文件,编程语言无关
使用geometry_msgs/Twist表示速度命令
支持一般的数据结构
ROS服务
同步节点事务
客户机/服务器模型
使用编程语言无关的.srv文件定义请求和应答数据结构
服务角色
- 远程计算
- 出发行为
- 检索
动作action
- 与服务类似,动作客户端向动作服务器发送请求,在执行动作时,动作服务器会向动作客户端发送进度反馈消息
- 动作时异步的
- ROS1 动作借助主题完成信息交换
- ROS2 可以使用服务
ROS Bags
ROS数据记录的主要机制,用于存储来自topics和services的metadata
ROS package
- ROS中的软件以包的形式组织
- 包的目标是创建易于重用的最小代码集合
- 一个包包含一个或多个节点,文档,并提供ROS接口
- 大多数ROS包都托管在Github上
常用ROS命令
ROSshell
用起来很像linux bash
- roscd
- rosls
- rosed
- roscp
- roscore
- rosrun
- roslunch
- rosclean
- rostopic
- rosservice
- rosnode
- rosparam
- rosbag
- rosmsg
- rossrv
- rosversion
- catkin_create_pkg
- rosinstall
- rosdep
m
模型
模型应该具有的一些特征:
- 简单
- 经得起理论检验
- 高表现力
- 提供逻辑推理能力
- 可执行
- 可综合:通常要求设计正交性
- 能够适应各种不同的任务
- 描述不存在歧义,易于理解和修改
常见的一些建模
- 面向状态的建模
- 面向活动
- 面型结构
- 面向数据
- 异构模型
有限状态机
反应式
特征
- 其特征是事件驱动
- 可以定义为可能的io集合、条件、动作和时序约束
确定性FSM特性
- 确定性:对于每个状态,每个输入值仅可激活一个转移
- 可接受性:每个输入能能够被接受
Moore机和Mealy机
moore机输出完全由当前状态决定,与输入信号的当前值无关,mealy机输出依赖于当前状态和当前输入,moore机结构简单但是装太多,mealy机复杂但是比较精简
等价
对所有输入具有相同输出的FSM等价,看起来结构完全不同的FSM都可能等价,因此有限状态机是可以优化的,主要是进行状态的缩减
非确定性FSM
状态输出有多个值
NFA(非确定)可以通过幂集构造转变为DFA(确定)
常规FSM
- 经常过度指定
- 完全指定的
- 缺乏组合潜力,可伸缩性差
- 状态爆炸
- 不支持并发
- 一种解决方案是在模型中引入层次结构
层次FSM
支持并发
- 当前状态:活跃态
- 包含其他状态:超状态
- 被包含:子状态
- 不包含其他状态:基本状态
- 包含基本状态的状态是这个基本状态的:祖先状态
- 任何时候若FSM只能处于超状态S的某个状态中,则该状态被称为OR型状态
默认状态机制
超状态变为活跃时将要激活的状态
历史机制
采用这个机制,就可能回到超状态退出之前最后一个活跃子状态
也就是跳出去之后再调回来应该回到上次跳出去时候的状态
并发
与型超状态:无论什么时候包含状态S的系统在进入S状态时都将进入S的所有子状态中
相当于S里的子状态机在并发执行了
定时器
边的标号
语法: event(引发迁移的事件)[condition(进行测试的条件)]/action(执行迁移所产生的输出)
off-key[msg==true]/on:=0
优势
- 层次结构允许任意嵌套与型和或型超状态
- 语义足够详细
- 大量仿真工具
- 可以在后端自动生成C或者VHDL
不足
- 生成的玩意儿效率低下
- 难以生成分布式应用程序
- 没有结构化层次的描述
层次FSM特性
- 合理的默认活动
- 多个地方增强行为
- 所需状态数减少
- 状态转移减少
- 易于扩展
- 更复杂,实现成本更高
- 要在表现力和复杂性和可维护性中平衡
实践课:AEB
AEB需要的功能
- 碰撞预警与紧急制动
- 系统失效警告
- 驾驶员可中断
- 相邻车道不响应
- 面对低障碍物不应启动
嵌入式操作系统概论
实时系统
- 一个实时系统是指计算的正确性不仅取决于程序的逻辑正确,也取决于得到结果的时间开销,如果时间要求得不到满足,也不能得到结果
- 黑话
- 确定性
- 非确定性
- 截止时限
- 硬实时:截止实现一旦错过就是失败
- 软实时:不是失败
- 准实时:不是失败,但是服务质量可能降低
实时操作系统
支持构建实时系统的操作系统
只有实时操作系统和确定性代码同时满足才能产生实时性能
- 多任务级别
- 软件和硬件资源管理
- 为应用提供基本的OS服务
- 从软件应用抽象硬件
- 嵌入式应用上下文具有更高可靠性
- 满足应用需要的裁剪能力
- 更快
- 减少内存需求
- 为实时嵌入式系统提供可裁剪的调度策略
- 支持无盘化嵌入式系统,可以从ROM或RAM上引导和运行
- 对不同硬件平台具有更好的可移植性
RTOS关键要求
- 操作系统的时间行为必须可预测
- 任何调度策略必须是确定性的
- 为了避免关键事件处理过程中的不可预测的延迟,禁止中断的时间必须尽可能短
- 操作系统必须管理线程和进程的调度
- 一些系统要求操作系统管理时间
- 对时间的精度要求可能会有所不同
- 一些与环境的连接可用来获取精确的时间信息,如GPS或移动网络
- 操作系统必须是快速的
- 可靠性
- 简介紧凑
为什么使用RTOS
- 可被复用的标准软件组件
- 灵活性
- 响应时间
RTOS类别
- 快速专有内核
- 对于标准操作系统的实时扩展
- 通过比如RT_PREEMPT的内核补丁将Linux调度器改为完全可抢占
- Xenomai:一个协同内核,会把Linux内核视作它的最低优先级任务
- RTAI 协同内核的替代方案
标准操作系统实时扩展:
优点:
- 有标准OS API
- 快速应用
- 非实时不会影响实时
缺点:
- 设备驱动存在冲突,一般将设备划分为由实时进程处理和由标准OS处理
- 实时进程还是不能用标准OS的服务
最流行的嵌入式操作系统
- Embedded Linux
- FreeRTOS
- Ubuntu
物联网操作系统
要求:
- 内存占用小
- 如下各方面需要正确的权衡
- 性能
- 方便的API
- 操作系统内存占用小
- 如下各方面需要正确的权衡
- 支持异构硬件
- 网络连接
- 有有线有无线
- 节能
- 很多物联网设备使用电池供电
- 实时功能
- 安全
调度模型
抢占式,非抢占式
内存分配
- 内存以静态还是动态分配是一个重要问题
- 标准C的malloc是非确定性的,实时操作系统要为malloc提供一个确定性实现,比如TLSF
- 动态内存分配要处理内存不足的情况,很难处理
- 基于堆的malloc通常导致内存碎片
网络缓存管理
两种方式
- 内存复制:从资源角度是昂贵的
- 不同网络层之间传递指针:会产生谁来负责分配的问题
编程语言
主要选择
标准C与C++
调试工具
- GDB
- 为了运行实时调试系统,需要JTAG或Spy-Bi-Wire
- 用printf()简单调试
- 甚至直接用LED等闪烁
特征集
- 操作系统可以分为内核和更高级别的功能
测试
测试挑战来源于这些系统的分布式特性,并且典型的嵌入式系统通常是受限的
证书
找认证机构搞一个证书来
文档
调度程序
- 完全静态调度程序
- 静态顺序调度程序/离线调度程序
- 在线调度程序
- 静态分配调度
- 完全动态调度
任务模型
任务周期
一个任务的每次执行被称为一个作业
调度算法
两个时间T:任务重新就绪的周期 C:任务执行需要的时间
可行调度:每个任务都在截止周期之内被完成
RMS 单调速率调度
RMS直接用周期来设定优先级,周期越短,优先级越高
只要一个任务集可以被静态调度,就可以被RMS调度
RMS CPU利用率,当n(任务数)趋近于无穷时,cpu利用率趋近于0.7
优点:
- 单处理系统中最优的固定优先级抢占式调度算法
- 静态优先级
临界时刻定理
对于固定优先级调度,如果任务T1与所有更⾼优先级 的任务同时释放,那么,每个任务 在单处理器系统上执⾏的响应时间就是最⼤化的
当低优先级任务的开始相位与⾼优先 级任务的开始相位⼀致时,低优先级任务的完成时间是最差的
因此,在检查调度可⾏性时,只考 虑最坏的情况就⾜够了,即所有的 任务同时开始周期式执⾏
Jackson算法
针对有限非重复、无优先关系的任务集
最早交货期:截止时限最早的首先执行
EDD在最大延迟最小化方面是最优的
EDD不支持任务到达,可通过允许任务在任何时刻到达来扩展EDD
最早截止时限有限 EDF
允许任务一个个到达
既适用于周期任务,也适合非周期任务
最晚时限优先
从后往前安排
EDF*
- 任何任务都必须在截止时限内完成执行
- 任何任务完成执行的时间不能晚于其后记任务的最晚开始时间(也就是截止时限-执行时间)
优先级反转问题
所谓优先级翻转问题(Priority Inversion)即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级任务抢先,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。
例如:有优先级为A、B和C三个任务,优先级A>B>C,任务A,B处于挂起状态,等待某一事件发生,任务C正在运行,此时任务C开始使用某一共享资源S。在使用中,任务A等待事件到来,任务A转为就绪态,因为它比任务C优先级高,所以立即执行。当任务A要使用共享资源S时,由于其正在被任务C使用,因此任务A被挂起,任务C开始运行。如果此时任务B等待事件到来,则任务B转为就绪态。由于任务B优先级比任务C高,因此任务B开始运行,直到其运行完毕,任务C才开始运行。直到任务C释放共享资源S后,任务A才得以执行。在这种情况下,优先级发生了翻转,任务B先于任务A运行。
解决
优先级天花板(Priority Ceiling)
优先级天花板是当任务申请某资源时, 把该任务的优先级提升到可访问这个资源的所有任务中的最高优先级, 这个优先级称为该资源的优先级天花板。这种方法简单易行, 不必进行复杂的判断, 不管任务是否阻塞了高优先级任务的运行, 只要任务访问共享资源都会提升任务的优先级。
优先级继承(Priority Inheritance)
优先级继承是当任务A 申请共享资源S 时, 如果S正在被任务C 使用,通过比较任务C 与自身的优先级,如发现任务C 的优先级小于自身的优先级, 则将任务C的优先级提升到自身的优先级, 任务C 释放资源S 后,再恢复任务C 的原优先级。这种方法只在占有资源的低优先级任务阻塞了高优先级任务时才动态的改变任务的优先级,如果过程较复杂, 则需要进行判断。
调度算法都是脆弱的
如果一个具有固定优先级、执行时间和优先级约束的任务集在固定数量的处理器上
嵌入式系统内核
可移植,可固化、可扩展、抢占式、实时确定性的多任务内核,适用于微处理器、微控制器和DSP
最多可以管理64个任务,每个任务都有唯一的一个优先级
保留了四个最高优先级和四个最低优先级的任务作为系统任务
实际使用的优先级只有两个:OSTaskCreat和
系统总是创建一个优先级最低的空闲任务,空闲任务把32位计数器加一,统计任务要用
统计任务是倒数第二的任务,提供运行时间统计,统计任务是可选的
任务控制块TCB
里面有栈指针、描述任务状态的标志位、描述任务优先级的标志位、还有链表指针
空闲TCB链表
- 所有任务控制块都被放置在任务控制块链表数组OSTCBTbl[]中
- 初始化的时候所有TCB被连接成空闲的单向链表
- 一个头指针从链表头开始始终跟踪下一个空闲的指针
- 当一个任务被创建,头指针指向的TCB给了这个任务,并且加入到使用链表中,头结点向后移动
为了方便找到一个任务,提供一个64大小的OSTCBPrioTbl[]数组来帮助快速索引
状态的转换
调度:找到就绪态里面优先级最高的转为运行态
任务就绪表
每个任务的就绪态标志放入在就绪表中
就绪表中有两个变量
OSRdyGrp:任务按优先级分组,
进程同步
PV,邮箱,消息队列
实时内核:存储管理
malloc和free不能用标准c的,因为具有不确定性,可能不能保证线程安全性、产生内存碎片、占用较多代码
存储管理
- µC/OS把连续的大块内存按分区来管理,每个分区包含有整数个大小相同的块
- 在一个系统中可以有多个内存分区, 用户的应用程序就可以从不同的内存分区 中得到不同大小的内存块,但特定的内存块在释放时必须重新放回它以前所属 于的内存分区
- 这样就解决了内存碎片
Freetos内存管理
heap_1:应用程序不删除任务和信号量,加载进来跑到死
heap_2:采用一个最佳匹配算法分配内存,分配与需求最接近的内存,并支持内存释放 ,不会自动合并相邻空间,会产生内存碎片
heap_3:简单的调用了标准库malloc()和free(),但是通过暂时挂起调度器保证线程安全
时钟节拍
一种特殊的中断
提供周期性信号源,用于实现时间延迟和确认超时
节拍率应在10到100Hz之间,时钟节拍率越高,系统的额外负荷就越重
板级支持包和引导加载
期末复习
嵌入式系统概述
定义与术语
术语
- 泛在计算(任何时间、任何地点)
- 不可见计算机(计算机被集成到物件中)
- 普适计算(计算设备对日常生活的渗透)
- 环境智能(未来家庭或智能楼宇中的通信技术)
- CPS信息物理系统,计算进程和物理进程的集成,强调嵌入式系统与物理学深度结合
- 人机物融合系统
- 深度融合各类信息技术
- 无线感知网络,分布着的自动装置组成的传感器感知计算网络
定义
以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗、可伸缩性、容错有严格要求的专用计算机
嵌入式系统组成
- 嵌入式硬件
- 以微处理器为核心,集成存储器和系统专用的输入输出设备
- 嵌入式软件
- 软件包括:初始化代码及驱动、嵌入式操作系统和应用程序
嵌入式系统设计方法
嵌入式系统设计所面临的挑战
- 需要多少硬件
- 如何满足时限要求,如何处理多项功能在实践上的协调一致性
- 如何降低系统的功耗
- 如何保证系统可升级
- 如何保证系统可靠的工作
嵌入式系统设计目标
- 成本
- 性能
- 功耗
- 尺寸
- 可伸缩性和可重用性
- 容错
传统嵌入式系统设计过程
需求分析、规格说明、体系结构、构建设计、系统集成
- 基本特征
- 系统在一开始就被划分为软件和硬件两大部分
- 软件和硬件独立开发设计
- 一般硬件优先
- 隐含的问题
- 软硬件之间的交互收到很大限制
- 凭经验划分软硬件
- 软硬件之间的相互影响难以评估
- 系统集成相对滞后 NRE
- 软硬件之间的交互收到很大限制
- 导致
- 设计质量差
- 设计难修改
- 研制周期不能有效保障