简答题
嵌入式系统【2013】【2015】【2016】
嵌入式系统定义、应用(至少五种)、结构、特点
定义:
- 用于控制、监视或辅助操作机器和设备的装置(软件和硬件的综合体,可以涵盖机电等辅助装置)
 - 国内:以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗等具有严格要求的专用计算机系统
 - 其他:看不见的计算机,一般不能被用户编程,它有一些专用的 I/O 设备,对用户的接口是应用专用的,包含有计算机,但又不是通用计算机应用系统。
 
特点:
- 嵌入式系统通常是形式多样、面向特定应用的
 - 嵌入式系统得到多种类型的处理器和处理器体系结构的支持
 - 嵌入式系统通常极其关注成本
 - 嵌入式系统有实时性和可靠性的要求
 - 嵌入式系统使用的操作系统一般是适应多种处理器、可剪裁、轻量型、实时可靠、可固化的嵌入式操作系统
 - 嵌入式系统开发需要专门工具和特殊方法
 
典型应用:可穿戴设备、通信、工控、航天航空、智能家居、智能驾驶
嵌入式系统三要素
- 嵌入式:嵌入到对象体系中,有对象环境要求
 - 专用性:软硬件按照对象要求设计、裁剪
 - 计算机:实现对象的智能化功能
 
基本组成:嵌入式硬件和软件
- 硬件:微处理器为核心集成存储器和系统专用的输入输出设备(冯诺依曼五项)
 - 软件:初始化代码及驱动、嵌入式操作系统和应用程序有机结合,形成系统特定的一体化软件(boot、driven、OS、app)
 

传感器【2015】【2019】
什么是传感器?请写出常用传感器(4 种)
- 传感器是通过物理接口,将光、声音、温度等变化转化为具体数值的装置
 - 常用的传感器有:声音传感器(声控灯)、温度传感器、光传感器、压力传感器(声光电力热磁)
 
CPS【2015】
什么是 CPS?请画出典型结构,尝试描述典型应用
- CPS,信息物理系统,计算进程和物理进程的统一体,集**计算(Computation)、通信(Communication)、控制(Control)**于一体的下一代智能系统,由嵌入式系统、互联网和控制器组成
 - 典型应用是汽车电子的 GPS 定位系统
 

设计面临挑战【2016】【2021】
- 可靠性:如何保证系统可靠地工作
 - 实时性:如何满足时限要求,如何处理多项功能在时间上的协调一致关系
 - 成本:需要多少硬件
 - 功耗:如何降低系统的功耗
 - 易升级:如何设计以保证系统可升级
 
软硬件设计折中因素【2013】【2015】
在嵌入式系统设计中,影响软硬件折衷方案的重要因素包括哪些?
软硬件的双重性、速度、灵活性和开销,其中软硬件的双重性是考虑的前提
- 软件实现的部分:操作系统功能(任务调度、资源管理、设备驱动)、协议栈(TCP/IP)、应用软件框架
 - 硬件实现的部分:基本系统,物理接口,基本逻辑电路
 - 双重性部分:算法(加密/解密,编码/解码,压缩/解压),数学运算(浮点运算,FFT)
 
交叉开发【2015】【2019】
为什么嵌入式软件要交叉开发?比较宿主机和目标机的差异
为了满足代码编写编译调试与运行环境有不同要求的情况。嵌入式系统是面向特定应用的一体化软件,不具备软件编写编译等功能,这么做可以降低嵌入式系统复杂度,降低成本
差异:
- 宿主机是通用计算机系统,而目标机则多为嵌入式系统
 - 宿主机具有完整的开发软件如 IDE、Complier、Debugger 等,用于软件的编写,生成的二进制可执行代码则通过串口传输,在专用的面向应用的目标机上运行,并采取交叉方式进行调试
 
过程:
- 宿主机上开发,模拟调试
 - 通过串口或网络传到目标机上
 - 目标机上基于监视器和操作系统的调试
 - 目标脱离宿主机运行
 
| 特征 | 通用计算机 | 嵌入式系统 | 
|---|---|---|
| 形式与类型 | 看得见的计算机、按照其体系结构、运算速度和结构规模等因素分为大中小型机和微机 | 看不见的计算机,形式多样,应用领域广泛,按应用来分 | 
| 组成 | 通用处理器、标准总线和外设,软件和硬件相对独立 | 面向应用的嵌入式微处理器,总线和外部接口多集成在处理器内部。软件与硬件是紧密集成在一起的 | 
| 开发方式 | 开发平台和运行平台都是通用计算机 | 采用交叉开发方式,开发平台一般是通用计算机,运行平台是嵌入式系统 | 
| 二次开发性 | 应用程序可重新编制 | 一般不能再编程 | 
嵌入式微处理器类型、差别【2015】【2019】
- MPU 微处理单元:功能和微处理器基本一样,是具有 32 位以上的处理器,具有较高的性能,具有体积小、功耗少、成本低、可靠性高的特点,有的可以提供工业级应用。
 - MCU 微控制器:嵌入式微控制器就是将整个计算机系统的主要硬件集成到一块芯片中,芯片内部集成 ROM/EPROM、RAM、总线,总线逻辑、定时/计数器、Watchdog、I/O、串行口等各种必要功能和外设。
 - DSP(Data Signal Processor)数字信号处理器:嵌入式 DSP 是专门用于信号处理方面的处理器,其在系统结构和指令算法方面进行了特殊设计,具有很高的编译效率和指令执行速度。
 - SoC:嵌入式 SoC 是追求产品系统最大包容的集成器件,绝大多数系统构件都在一个系统芯片内部。
 - 都具有体积小、功耗小、可靠性高、设计生产效率高的特点。
 
TODO:华为 AI 处理器属于哪种?
微处理器架构【2015】
- 冯诺伊曼结构:数据和程序放在同一个存储单元,统一编址,指令和数据通过同一个总线访问
 - 哈佛结构:
- 数据和程序存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器。
 - 每个存储器独立编址、独立访问。
 - 与之相对应的是系统中设置的两条总线(程序总线和数据总线),从而使数据的吞吐率提高了一倍(更大存储带宽和更大可预测带宽)。
 - 哈佛结构不能使用自修改代码。
 
 
代码临界区【2017】【2021】
代码临界区是什么?什么时候使用?如何实现?
每当跨线程共享数据结构时,对数据结构的访问通常必须是原子的。这是使用互斥锁或互斥锁强制执行的。持有锁时执行的代码称为临界区。
访问共有资源的程序片段,而这些共有资源无法同时被多个进程锁访问
解决方法:信号量 PV 操作(实现互斥访问、行为同步)、中断
有限状态机【2015】【2021】
有限状态机的定义是什么?有哪两类?有什么区别?
有限状态机(FSM)表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。
TODO
分类:
- 状态模型:单线程,在任何时候只有一个状态可以有效
- Moore State models:输出信号仅与当前状态有关,即可以把 Moore 型有限状态的输出看成是当前状态的函数
 - Mealy State models:输出信号不仅仅与当前状态有关,还与所有的输入信号有关,即可以把 Mearly 型有限状态机的输出看成是当前状态和所有输入信号的函数
 
 - 层次型有限状态机:支持并发和层次结构,硬件设计上与 Mearly 上有相同的问题:与软件不相关,导致更紧凑的代码
 
示例:电话、定时炸弹、自动贩卖机、电梯等
NAND Flash 启动【2015】
如果做到从 NAND Flash 启动?请描述不同的解决方法。
- NAND Flash 与 NOR Flash 相比,具有读性能比较差、写性能较好、串行读取、成本低、容量大的特点。
 - 在 NAND Flash 中存储启动相关的 boot 代码、驱动代码,系统在启动时直接从 NAND Flash 中读取代码并执行。
 
微处理器选型【2015】【2019】
选择嵌入式微处理器需要考虑的因素有哪些?
- 嵌入式应用上下文的可靠性,包括温度、电磁干扰等因素
 - 支持的指令集结构
 - 采用的处理器体系结构
 - 成本
 - 功耗
 - 体积
 - 频率、速度、性能、延迟
 - 可扩展性、提供的接口、是否支持中断
 
Watchdog【2015】【2017】【2019】
什么是看门狗(watchdog)?看门狗有什么作用?工作原理是什么?
- 看门狗是一个定时器,要求程序每隔一段时间向其输出一个信号,如果超过了 WDT 的规定时间,就给 MCU 发送一个复位信号,使其复位,实现嵌入式系统在无人状态下的连续工作。
 - 看门狗是用于检测单片机程序运行状态的芯片,作用是防止单片机受到干扰后跑飞,导致程序崩溃的情况出现,可以及时将单片机复位,使之正常运行,工作原理是看门狗的一个接口与单片机的一个 I/O 控线引脚相连,系统运行后,开启看门狗定时器,如果定时器没有在限定时间内复位,则表示单片机已经跑飞,此时定时器会将单片机复位。
 
RTOS 特点【2013】【2015】【2019】
- RTOS:对外来事件能在限定的响应时间内做出预定质量处理的计算机系统
 - 实时性、可靠性、紧凑、可裁剪、可预测性、可扩展性、抢占式内核
 - 选型:首先确认是否需要使用 RTOS(系统对相应延迟时间有要求,对事件处理复杂度有要求,对 RAM、ROM 的限制有一定规模要求),成本,可靠性(工具链、功耗),实时性,工具链,模块丰富,RTOS 内核 RAM、ROM 占用量,支持
 
RTOS 的引导模式【2015】【2019】
RTOS 的引导模式有哪些,说明各自特点?
- 将操作系统装入内存并开始执行的过程。
 - 有 bootloader 的引导模式,节省空间,牺牲时间,适用于性能较好,运行速度快但启动速度相对较慢的系统。
 - 无 bootloader 的引导模式,可以在闪存上快速启动,但运行速度达不到很高的要求,同时消耗存储空间。
 
上下文切换【2015】
上下文切换是指 CPU 从一个进程或线程切换到另一个进程或线程。
步骤:
- 决定是否做上下文切换以及是否允许做上下文切换
 - 保存当前执行进程的上下文
 - 使用进程调度算法,选择一处于就绪状态的进程
 - 恢复或装配所选进程的上下文,将 CPU 控制权交到所选进程手中。
 
优先级反转【2015】
什么是优先级反转?如何解决?
高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度。但其他中等优先级的任务却能抢到 CPU 资源。 从现象上来看,好像是中优先级的任务比高优先级任务具有更高的优先权。
具体来说:当高优先级任务正等待信号量(此信号量被一个低优先级任务拥有着)的时候,一个介于两个任务优先之间的中等优先级任务开始执行——这就会导致一个高优先级任务在等待一个低优先级任务,而低优先级任务却无法执行类似死锁的情形发生。
一个具体的例子:
假定一个进程中有三个线程 Thread1(高)、Thread2(中)和 Thread3(低),考虑下图的执行情况。
- T0 时刻,Thread3 运行,并获得同步资源 SYNCH1;
 - T1 时刻,Thread2 开始运行,由于优先级高于 Thread3,Thread3 被抢占(未释放同步资源 SYNCH1),Thread2 被调度执行;
 - T2 时刻,Thread1 抢占 Thread2;
 - T3 时刻,Thread1 需要同步资源 SYNCH1,但 SYNCH1 被更低优先级的 Thread3 所拥有,Thread1 被挂起等待该资源
 - 而此时线程 Thread2 和 Thread3 都处于可运行状态,Thread2 的优先级大于 Thread3 的优先级,Thread2 被调度执行。最终的结果是高优先级的 Thread1 迟迟无法得到调度,而中优先级的 Thread2 却能抢到 CPU 资源。
 上述现象中,优先级最高的 Thread1 要得到调度,不仅需要等 Thread3 释放同步资源(这个很正常),而且还需要等待另外一个毫不相关的中优先级线程 Thread2 执行完成(这个就不合理了),会导致调度的实时性就很差了。
优先级反转:当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。
解决方案:
- 优先级天花板(立即优先级)是当任务申请某资源时,把该任务的优先级提升到可访问这个资源的所有任务中的最高优先级,这个优先级称为该资源的优先级天花板。这种方法简单易行,不必进行复杂的判断,不管任务是否阻塞了高优先级任务的运行,只要任务访问共享资源都会提升任务的优先级。
 - **优先级继承(原始优先级上限)**优先级继承就是为了解决优先级反转问题而提出的一种优化机制。其大致原理是让低优先级线程在获得同步资源的时候(如果有高优先级的线程也需要使用该同步资源时),临时提升其优先级。以期能更快的执行并释放同步资源。释放同步资源后再恢复其原来的优先级。
 
物联网【2016】【2017】
物联网的概念、典型结构、典型应用?
物联网就是万物互联的互联网,是互联网与嵌入式系统发展到高级阶段的融合。是物理设备、联网设备、智能设备和其他嵌入式电子设备、软件、传感器、执行器和网络连接的项目之间的互联网络,使这些对象能够收集和交换数据。
参考嵌入式系统的定义、结构、应用。
应用:智能家居制造业、环境监测
组成:传感器、控制器、终端、无线模组、通信网络、应用开发平台
开源硬件【2016】
开源硬件:定义、理解
开源硬件是可以通过公开渠道获得的硬件设计,任何人都可以对已有的设计进行学习、修改、发布、制作和销售。
硬件设计的源代码的特定的格式可以为其他人获得,以方便对其进行修改。理想情况下,开源硬件使用随处可得的电子元件和材料,标准的过程,开放的基础架构,无限制的内容和开源的设计工具,以最大化个人利用硬件的便利性。开源硬件供人们在控制他们的技术自由的同时共享知识并鼓励硬件设计开放交流贸易。
智能硬件【2017】【2021】
智能硬件:定义与理解
智能硬件是继智能手机之后的一个科技概念,通过软硬件结合的方式,对传统设备进行改造,进而让其拥有智能化的功能。智能化之后,硬件具备连接的能力,实现互联网服务的加载,形成“云+端”的典型架构,具备了大数据等附加价值。
可重入性【2016】
可重入性:定义,一个程序具备可重入性需要满足的特性
一个函数可以同时被多次调用。可重入函数在任何时候都可以被中断,一段时间后继续运行时数据不会丢失。
特性:
- 原子地使用所有共享变量
 - 程序内不调用非可重入的函数
 - 不以非原子方式使用硬件(即以原子方式使用硬件)
 
建模【2016】
建模:定义,举例建模技术
建模是为了理解系统,对系统做出抽象,建立模型的过程
- 面向状态的模型:FSM
 - 面向活动的模型:数据流图、过程模型
 - 面向结构的模型:系统框图
 - 面向数据的模型:ER 图
 
流水线【2013】【2016】
影响流水线性能的因素有哪些?分支指令对流水线性能有何影响?如何解决?
影响流水线性能的因素:
- 结构阻滞:多条指令进入流水线后,硬件资源满足不了指令重叠执行
 - 数据阻滞:指令在流水线中重叠执行时,后继指令需要用到前面指令的执行结果
 - 控制阻滞:流水线遇到分支指令和其他改变 PC 寄存器值的指令
 
分支指令的影响:遇到分支指令时,由于处理器要执行跳转操作,因此已经在流水线上的顺序指令就是无效的,需要被清空。处理器重新形成流水线需要时间,因此影响效率。
解决方法:应用分支预测技术
忙等 I/O 与中断驱动 I/O【2013】
忙等 I/O:用指令来检查设备是否就绪
- 最简单的设备驱动方式
 - CPU 不能在检查设备的过程中执行其他指令
 - 很难处理同时发生的 I/O 操作
 
中断 I/O:基于子程序调用,使下一条指令为一个子程序调用的预定位置,返回位置被保存确保执行前台程序
- CPU 和设备之间通过总线连接
 - CPU 和设备之间进行握手
 - 设备发出中断请求
 - 当 CPU 能处理中断时发出中断确认请求
 
两种机制确保中断更加有效:
- 优先级决定哪个中断先获得 CPU;
 - 中断向量决定每个中断对应的执行代码,忙等 I/O 效率比较低,中断 I/O 允许设备修改 CPU 控制流。
 
NOR VS NAND【2013】【2016】
比较 NOR Flash 和 NAND Flash 的区别?从 NOR Flash 启动和 NAND Flash 启动有什么不同?
NOR:快读、慢写、可靠、贵、存代码(而非数据)
- 性能不同:NOR 的读速度比 NAND 稍快,NAND 的写速度比 NOR 快很多
 - 接口不同:NOR 的地址线与数据线分开、可以直接读写;NAND 的地址线与数据线在一起,读写时需要程序控制
 - 启动方式不同:NOR 可以 XIP,NAND 需要 Boot Loader 将程序复制或映射到内存上再运行
 
| NOR | NAND | 
|---|---|
| 存储代码 | 存储文件 | 
| 随机存取 | 顺序存取 | 
| 不容易坏 | 容易坏 | 
| 单位价格高 | 单位价格低 | 
| 待命时省电 | 运行时省电 | 
嵌入式系统存储结构【2014】【2019】
画出嵌入式系统存储结构的金字塔图

ROM 种类:
- ROM:固定内容、掩膜工艺、无法修改
 - PROM:一次编程 ROM,一旦导入、无法改变
 - EPROM:加电可擦除,多次
 - FLASH:快闪存储器
 
Flash 种类:

RAM 种类:
- SRAM:不用刷新,速度快,价格贵,容量小
 - DRAM:(内存)速度稍慢,加电更新
 - SDRAM:使用时钟来提高性能,以流水线方式访问存储器。
 
总线【2014】【2017】
嵌入式系统的几种总线与区别?
单总线结构:使用一条单一的系统总线来链接 CPU、主存和 I/O 设备。总线只能分时工作,使信息传送的吞吐量受到限制。四次握手(1 enq, 2 ack,2 low_ack,1 low_enq)

双总线结构:在 CPU 和主存之间专门设置了一组高速的存储总线,使 CPU 可通过专用总线与存储器交换信息,并减轻了系统总线的负担。中间用桥连接。主存仍可通过系统总线与外设之间实现 DMA 操作,而不必经过 CPU。

多总线结构:在双总线系统的基础上增加 I/O 总线,其中系统总线是 CPU、主存和通道(I/OP)之间进行数据传送的公共通路,而 I/O 是多个外部设备与通道之间进行数据传送的公共通路。通道实际上是一台具有特殊功能的处理器,它分担了一部分 CPU 的功能,以实现对外设的统一管理及外设与主存之间的数据传送。

中断设计方法【2016】
- 先设计中断再编写 ISR(Interrupt Service Routine)
 - 保持 ISR 简短
 - ISR 执行后立即离开中断
 - 用空指针填充未被使用的中断向量
 
中断处理【2016】
中断处理过程,中断机制相关的执行开销
中断处理过程:
- 中断请求
 - 中断排队或优先级
 - 中断处理
 - 中断返回
 
中断机制的执行时间开销:
- 中断延迟
 - 寄存器的现场保护(保存全部寄存器的值),将全局变量嵌套层次+1
 - 进行中断服务
 - 中断恢复(恢复寄存器的值)
 
内存管理【2017】【2019】
TODO:嵌入式系统静态和动态内存管理
存储管理:固定分区的存储管理方法 OSMemCreate,OSMemGet, OSMemPut
put 时必须放入 get 时取出的内存块:
- Heap1:不支持 
free,简单的数组分配,适用于确定性任务 - Heap2:简单的 
free,会导致碎片,适用于每次申请和释放内存大小相同的任务 - Heap3:调用了 
malloc和free,通过挂起调度器达到了线程安全性 
启动过程【2017】
嵌入式系统的启动过程
上电复位、板级初始化:
- 嵌入式系统上电复位后完成板级初始化工作。
 - 板级初始化程序具有完全的硬件特性,一般采用汇编语言实现。不同的嵌入式系统,板级初始化时要完成的工作具有一定的特殊性,但以下工作一般是必须完成的:
- CPU 中堆栈指针寄存器的初始化。
 - BSS 段(Block Storage Space)表示未被初始化的数据)的初始化。
 - CPU 芯片级的初始化:中断控制器、内存等的初始化。
 
 
系统引导/升级:
- 根据需要分别进入系统软件引导阶段或系统升级阶段。
 - 软件可通过测试通信端口数据或判断特定开关的方式分别进入不同阶段。
- 直接在 NOR Flash 上运行
 - 软件直接从外存读取加载入 RAM,成本更低
 
 
系统引导:
- 将系统软件从 NOR Flash 中读取出来加载到 RAM 中运行:这种方式可以解决成本及 Flash 速度比 RAM 慢的问题。软件可压缩存储在 Flash 中。
 - 不需将软件引导到 RAM 中而是让其直接在 NOR Flash 上运行,进入系统初始化阶段。
 - 将软件从外存(如 NAND Flash、 CF 卡、MMC 等)中读取出来加载到 RAM 中运行:这种方式的成本更低。
 
系统升级:
- 进入系统升级阶段后系统可通过网络进行远程升级或通过串口进行本地升级。
 - 远程升级一般支持 TFTP、FTP、HTTP 等方式。
 - 本地升级可通过 Console 口使用超级终端或特定的升级软件进行。
 
系统初始化:
- 在该阶段进行操作系统等系统软件各功能部分必需的初始化工作,如根据系统配置初始化数据空间、初始化系统所需的接口和外设等。
 - 系统初始化阶段需要按特定顺序进行,如首先完成内核的初始化,然后完成网络、文件系统等的初始化,最后完成中间件等的初始化工作。
 
应用初始化:在该阶段进行应用任务的创建,信号量、消息队列的创建和与应用相关的其它初始化工作。
多任务应用运行:各种初始化工作完成后,系统进入多任务状态,操作系统按照已确定的算法进行任务的调度,各应用任务分别完成特定的功能
嵌入式系统、人工智能、自动控制【2019】
TODO:请说明嵌入式系统、人工智能、自动控制三者之间的关系
使用 malloc() 的问题、解决方案【2019】
为什么在嵌入式开发中不常用 C 标准库中的 malloc 函数?有什么常见的解决方案?
- 容易造成碎片
 - 固定分区存储管理
 
嵌入式系统的分类
- 按处理器位数:4 位、8 位、16 位、32 位(主流)、64 位
 - 按应用:信息家电、汽车电子、通信、移动终端、工业控制
 - 按速度:强实时系统(ms、us),一般实时系统(s),弱实时系统(s+)
 - 按确定性:硬实时系统(严格要求响应事件、否则或崩溃或错误)、软实时系统
 - 按复杂程度:循环轮询系统、有限状态机系统、前后台系统、单处理器多任务系统、多处理器多任务系统
 
CISC 与 RISC
- CISC:复杂指令集(许多地址格式,许多操作,支持多操作码)
 - RISC:精简指令集(流水型指令,存取指令)
 - RISC 机器用来减少指令周期的一种技术,可提高处理器和总线的使用率
 

信息存储的字节顺序
不管是大端法还是小端法存储,计算机在内存中存放数据的顺序都是从低地址到高地址。
大端法是首先取高字节的数据放在低地址;小端法是首先取低字节的数牧据放在低地址。
进程、线程、任务
进程:操作系统进行资源分配的基本单元,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,式操作系统结构的基础。
线程:轻量级进程,是操作系统任务调度和执行的基本单位
任务:最抽象、软件完成一个活动,可以是进程可以是线程。
任务控制块
任务控制块(TCB)描述一个任务的核心数据机构,包括任务堆栈指针、任务状态、优先级等。任务创建的时候创建 TCB 表
任务间通信
- 共享内存、消息、管道、信号
 - 使用邮箱和消息队列
 - 管理核心:事件控制块 ECB
 
ucOS-II 如何从 64 位系统位扩展到 256 位
- 修改
os_cfg.h中#define OS_LOWEST_PRI/O 63 -> 254 - 新版的 ucos-II 可以自动根据
OS_LOWEST_PRI/O的大小判断 TBL 大小和算法,不需要修改,对于旧版,则ucos_ii.h中修改 TCB 表的大小(8->16),在os_core.c中个修改算法- 将 16 位修改成低 8 位和高 8 位:若低 8 位为 0,则在高 8 位,反之则为低 8 位,找到高低之和,再进行进一步判断
 - 总之将 8 组 _ 8 个/组->16 组 _ 16 个每组,高八位计算按位运算模式使用 Map,并在最后计算优先级时+8 再算。
 
 
ucOS-II 的特点
- 可抢占多任务实时内核,是优先级最高的
 - 不支持时间片轮转法
 - 任务调度所花时间为常量
 - 采用实模式存储管理
 - 不划分内核空间和用户空间
 - 资源共享,任务都是线程级任务
 - 代码段、数据段、bss 段、堆栈、多内存分区,每个分区大小
 
响应中断的条件
- 至少有一个中断源向 CPU 发出中断信号;
 - 系统允许中断,且对此中断信号未予屏蔽。
 
中断定义
中断:由于某种事件的发生而导致程序流程的改变。产生中断的事件称为中断源。
同步与互斥
同步可以通过开关中断实现,互斥使用信号量。
bsp、特点与 BIOS 区别
bsp 概念:全称“板级支持包”(Board Support Packages),一段启动代码
特点:
- 硬件相关性:因为嵌入式实时系统的硬件环境具有相关性,所以,作为高层软件与硬件之间的接口,BSP 必须为操作系统提供操作和控制具体硬件的方法。
 - 操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式.
 
功能:
- 单板硬件初始化,主要是 CPU 的初始化,为整个软件系统提供底层硬件支持
 - 为操作系统提供设备驱动程序和系统中断服务程序
 - 定制操作系统的功能,为软件系统提供一个实时多任务的运行环境
 - 初始化操作系统,为操作系统的正常运行做好准备
 
与 BIOS、EFI 区别:
- BIOS: BIOS 主要是负责在电脑开启时检测、初始化系统设备(设置栈指针,中断分配,内存初始化)、装入操作系统并调度操作系统向硬件发出的指令。
 - BSP 是和操作系统绑在一起运行在主板上的,尽管 BSP 的开始部分和 BIOS 所做的工作类似,可是大部分和 BIOS 不同,作用也完全不同。程序员还可以编程修改 BSP,在 BSP 中任意添加一些和系统无关的驱动或程序,甚至可以把上层开发的统统放到 BSP 中。而 BIOS 程序是用户不能更改,编译编程的,只能对参数进行修改设置。更不会包含一些基本的硬件驱动。
 - EFI:由于 EFl 框架比 BIOS 要大得多,其启动过程也比 BIOS 要复杂。于 BIOS 最大的区别就是 EFI 首先需要 EBC 虚拟机,然后再启动设备驱动和 EFI 应用程序,最后通过 EFI boot manager 加载操作系统引导程序。
 
bootloader 及其启动过程
- bootloader:嵌入式系统中的 OS 启动加载程序
 - 作用:将操作系统内核从外部存储设备拷贝到内存中,并跳转到内核的首条指令
 - 启动过程:
- 初始化硬件,如设置 UART(至少设置 1 个),检测存储器等
 - 设置启动参数,告诉内核硬件的信息,如用哪个启动界面,波特率.
 - 跳转到操作系统的首地址
 - 消亡
 
 
任务调度
- 可抢占调度:系统将处理机分配给优先级最高的进程,更好满足紧迫作业的要求。
 - 不可抢占调度:系统将处理机分配给优先级最高的进程后,该进程一直执行下去,主要用于批处理或某些实时性要求不严的实时系统。
 - 先来先服务:将处理机分配给最先来的进程,只考虑先后。
 - 时间片轮转算法:主要用于分时系统中的进程调度,先将进程按照先进先出原则排列成一个队列,让首进程在 CPU 运行一个时间片的时间(通常 10-100ms)后,将该进程放置在队列末尾。
 - 优先级算法:系统将处理器分配给就绪队列中优先数最高的进程(分为抢占式优先级算法和非抢占式优先级算法)
 
问答题
给出嵌入式软件轮询模式的伪代码描述?描述有何种变种或者改进?使用时需要注意什么?【2015】【2017】【2019】
1  |  | 
改进:采用 FlagI 标记位和 FlagO,结合终端使用,在服务例程中置位
使用注意事项:
- 要注意及时将寄存器状态恢复,避免在应用程序造成不可预知的错误
 - 轮询式占用了大量的 CPU 时间,使其不能用于其他计算任务,使用要谨慎
 
具体应用:
- 单用户交互与实时 I/O 设备控制
 - 轮询模式的嵌入式软件结构
 
TODO:补充:前后台系统是什么?【2019】
描述 RTOS μcOS-II 采用哪些策略与机制来确保任务的实时性【2017】
- 存储管理:采用固定分区存储管理,以固定块大小来分配,避免内存碎片的产生
 - 任务调度:采用固定优先级的优先级调度(MRS),为确保任务的实时性,μcOS-II 要确保每次调度的耗时具有可预测性,以 64 个进程为例
- 使用 8*8 的数组来表示进程是否等待被调度,就绪态置为 1,同时位置越低表示优先级越高,即(0,0)优先级最高
 - 使用 
TaskUnMapTbl表格存储 256 种情况下出现 1 的最低位,在代码为Y = TaskUnMapTbl[TaskRdyGrp]X = TaskUnMapTbl[TaskRdyTbl[Y]]PrI/O = (Y << 3) + X- 由此找到相应进程,保证耗时固定
 
 
 - 软件体系结构:允许中断与异常存在,使得系统允许实时的高优先级任务执行。
 - 任务调度总是选择就绪任务中优先级最高的一个运行
 - 允许任务间的抢占
 - 具有优先级的中断机制
 - 有确定性的任务调度/切换时间和中断延迟
 - 精度高的时钟节拍产生时钟中断
 - 通信机制:信号量、互斥量、信箱、消息队列等任务间通信机制。
 
调度算法题【2017】

- 
RMS:单一速率调度
- 静态调度策略,分配给每个进程的优先级是固定不变的。基于单一速率分析。
 - 周期最短的进程被指定为最高优先级。每个周期开始,P 进去,根据优先级调度执行,执行结束就从就绪状态退出直到他下一个周期开始。看书
 
 - 
EDF:最早截止时限优先调度
- 动态的优先级方案,在进程执行时根据进程的启动时间改变进程的优先级。
 - 根据截止时限顺序指定优先级。最高优先级的进程是当前截至时限最临近的进程。
 - 做法:看书 p205 先写出 all 时间片内的截至时限,然后根据截至时限进行选择调度
 - 抢占式?默认选择就绪队列第一个
 
 
为什么需要仿真开发?仿真开发有哪些特点?【2015】
- 利用模型复现实际系统中发生的本质过程,并通过对系统模型的实验来研究存在或设计中的系统
 - 利用计算机实现对系统的仿真研究不仅方便、灵活,而且是经济的
 - 在研制、鉴定和定型全过程都必须全面的应用先进的仿真技术,否则任何新型的、先进的飞行器和运载工具的研制都将是不可能的。
 
描述嵌入式软件系统主要采用的软件系统体系结构以及各自的优缺点(至少五种)【2015】

| 优先级 | 响应时间 | 变动的影响 | 共享数据 | |
|---|---|---|---|---|
| 轮询 | 无,一切按序运行 | 所有任务之和 | 非常大,增加任务或修改任务时间影响所有任务 | 无 | 
| 状态机 | 当前状态决定下一个状态优先级 | 所有任务之和 | 同上 | 同上 | 
| 带中断轮询 | 中断比主循环优先级高,中断之间有优先级 | 任务和中断执行时间和 | 主循环同轮序一样,对中断服务例程影响不大 | 必须处理和中断服务例程分享的数据 | 
| 纯中断 | 中断有优先级 | 中断执行时间 | 对中断服务例程影响不大 | 同上 | 
| 函数队列 | 中断有优先级,其他任务按序进行 | 最长任务执行时间 | 低,中断管理优先级功能,队列管理较低优先级 | 同上 | 
- 函数队列:函数指针被添加到队列中,主循环在队列中循环并执行任务,任务或中断将新任务添加到功能队列中。以中断优先为优先级
 
单 CPU
设计题
编号:2015A

FSM 的有限状态机设计

层次型有限状态机的设计

- 细节补充
- 没有明确说明放下听筒操作,改进:在呢该放下听筒的操作,使系统终止
 - 没有限制用户操作时间,改进:增加明确的时间限制 30s
 
 

- 实现方式:
- Switch-case
 - 状态表
 - 状态模式
 - 选择状态模式:因为状态模式相比于其他方式,更容易维护和扩展,降低了实际状态之间的耦合,通过抽象接口来实现,当需要修改或添加状态时,只需要修改内部实现而不需要改变接口,隐藏内部实现一定程度上分解了复杂度,使得代码容易理解。
 
 
编号:2015B
嵌入式发展到今天,对应于各种微处理器的硬件平台都是通用的、固定的:各种相应的软件比较成熟,模块化程度比较高:因此,当今的开发过程更多的注重开发流程,合理、科学的开发流程往往可以达到事半功倍的效果。假设你现在某从事嵌入式产品开发的公司工作,被要求开发一通用的数字电视接收控制器,即通常所说的“机顶盒”,对于机顶盒的开发,请你结合嵌入式系的设计流程叙述一下将采取的设计开发流程。(整个流程需的从产品定义到产品测试和发布)
- 特征:一开始就被划分为软硬件两大部分,软硬件独立开发设计,硬件优先
 - 问题:
- 软硬件交互收受到很大限制,凭经验划分软硬件,软硬件之间的相互性能影响很难评估;
 - 系统集成相对滞后,NRE 较大
 
 - 后果:设计质量差,设计修改难,研制周期不能有效保障
 - 基本流程:需求分析,规格说明,体系结构,构件设计,系统集成
 
编号:2019
针对自动食品售卖机,有多种支付方式,给出:
- 基于有限状态机的设计,给出状态图和状态转移表
 - 基于层次有限状态机的设计。
 
状态图和状态转移表