Exam-嵌入式总结
1. 简答题
1.1. 什么是CPS?请画出典型结构,尝试描述典型应用【2015】
- CPS,信息物理系统,计算进程和物理进程的统一体,集计算、通信、控制于一体的下一代智能系统,由嵌入式系统、互联网和控制器组成
- 典型应用是汽车电子的GPS定位系统
1.2. 什么是传感器?请写出常用传感器(4种)【2015】【2019】
- 传感器是通过物理接口,将光、声音、温度等变化转化为具体数值的装置
- 常用的传感器有:声音传感器(声控灯)、温度传感器、光传感器、压力传感器
1.3. 在嵌入式系统设计中,影响软硬件折衷方案的重要因素包括哪些?【2013】【2015】
软硬件的双重性、速度、灵活性和开销,其中软硬件的双重性是考虑的前提
- 软件实现的部分:操作系统功能(任务调度、资源管理、设备驱动)、协议栈(TCP/IP)、应用软件框架
- 硬件实现的部分:基本系统,物理接口,基本逻辑电路
- 双重性部分:算法(加密/解密,编码/解码,压缩/解压),数学运算(浮点运算,FFT)
1.4. 为什么嵌入式软件要交叉开发?比较宿主机和目标机的差异【2015】【2019】
- 为了满足代码编写编译调试与运行环境有不同要求的情况。嵌入式系统是面向特定应用的一体化软件,不具备软件编写编译等功能,这么做可以降低嵌入式系统复杂度,降低成本
- 差异:
- 宿主机是通用计算机系统,而目标机则多为嵌入式系统
- 宿主机具有完整的开发软件如IDE、Complier、Debugger等,用于软件的编写,生成的二进制可执行代码则通过串口传输,在专用的面向应用的目标机上运行,并采取交叉方式进行调试
- 过程
- 宿主机上开发,模拟调试
- 通过串口或网络传到目标机上
- 目标机上基于监视器和操作系统的调试
- 目标脱离宿主机运行
特征 | 通用计算机 | 嵌入式系统 |
形式与类型 | 看得见的计算机、按照其体系结构、运算速度和结构规模等因素分为大中小型机和微机 | 看不见的计算机,形式多样,应用领域广泛,按应用来分 |
组成 | 通用处理器、标准总线和外设,软件和硬件相对独立 | 面向应用的嵌入式微处理器,总线和外部接口多集成在处理器内部。软件与硬件是紧密集成在一起的 |
开发方式 | 开发平台和运行平台都是通用计算机 | 采用交叉开发方式,开发平台一般是通用计算机,运行平台是嵌入式系统 |
二次开发性 | 应用程序可重新编制 | 一般不能再编程 |
1.5. 如果做到从NAND Flash启动?请描述不同的解决方法。【2015】
- NAND Flash与NOR Flash相比,具有读性能比较差、写性能较好、串行读取、成本低、容量大的特点
- 在NAND Flash中存储启动相关的boot代码、驱动代码,系统在启动时直接从NAND Flash中读取代码并执行。
1.6. 选择嵌入式微处理器需要考虑的因素有哪些【2015】【2019】
- 嵌入式应用上下文的可靠性,包括温度、电磁干扰等因素
- 支持的指令集结构
- 采用的处理器体系结构
- 成本
- 功耗
- 体积
- 频率、速度、性能、延迟
- 可扩展性、提供的接口、是否支持中断
1.7. 什么是看门狗(watchdog)?看门狗有什么作用?工作原理是什么?【2015】【2017】【2019】
- 看门狗是一个定时器,要求程序每隔一段时间向其输出一个信号,如果超过了WDT的规定时间,就给MCU发送一个复位信号,使其复位,实现嵌入式系统在无人状态下的连续工作。
- 看门狗是用于检测单片机程序运行状态的芯片,作用是防止单片机收到干扰后跑飞,导致程序崩溃的情况出现,可以及时将单片机复位,使之正常运行,工作原理是看门狗的一个接口与单片机的一个I/O控线引脚相连,系统运行后,开启看门狗定时器,如果定时器没有在限定时间内复位,则表示单片机已经跑飞,此时定时器会将单片机复位。
1.8. 嵌入式微处理器有几种类型【2015】【2019】请比较三类嵌入式处理器,即嵌入式微处理器(MPU)、微控制器(MCU)和DSP的区别【2015】
- MPU微处理单元:功能和微处理器基本一样,是具有32位以上的处理器,具有较高的性能,具有体积小、功耗少、成本低、可靠性高的热点,有的可以提供工业级应用。
- MCU微处理器:嵌入式微控制器就是将整个计算机系统的主要硬件集成到一块芯片中,芯片内部集成ROM/EPROM、RAM、总线, 总线逻辑、定时/计数器、Watchdog、I/O、串行口等各种必要功能和外设.
- DSP(Data Signal Process)处理器:嵌入式DSP是专门用于信号处理方面的处理器,其在系统结构和指令算法方面进行了特殊设计,具有很高的编译效率和指令执行速度。
- SOC:嵌入式SoC是追求产品系统最大包容的集成器件,绝大多数系统构件都在一个系统芯片内部。
- 都具有体积小、功耗小、可靠性高、设计生产效率高的特点。
1.9. RTOS的引导模式有哪些,说明各自特点【2015】【2019】
- 将操作系统装入内存并开始执行的过程。
- 有bootloader的引导模式,节省空间,牺牲时间,使用于性能较好,运行速度快但启动速度相对较慢的系统。
- 无bootloader的引导模式,可以在闪存上快速启动,但运行速度达不到很高的要求,同时消耗存储空间。
1.10. 描述RTOS的主要特点【2013】【2015】【2019】
- RTOS:对外来事件能在限定的响应时间内做出预定质量处理的计算机系统
- 实时性、可靠性、紧凑、可裁剪、可预测性、可扩展性、抢占式内核
- 选型:首先确认是否需要使用RTOS(系统对相应延迟时间有要求,对事件处理复杂度有要求,对RAM、ROM的限制有一定规模要求),成本,可靠性(工具链、功耗),实时性,工具链,模块丰富,RTOS内核RAM、ROM占用量,支持
1.11. 描述冯诺依曼体系结构和哈佛体系结构的区别【2015】
- 冯诺伊曼结构:数据和程序放在同一个存储单元,统一编址,指令和数据通过同一个总线访问
- 哈佛结构:
- 数据和程序存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器。
- 每个存储器独立编址、独立访问。
- 与之相对应的是系统中设置的两条总线(程序总线和数据总线),从而使数据的吞吐率提高了一倍(更大存储带宽和更大可预测带宽)。
- 哈佛结构不能使用自修改代码。
1.12. 什么是上下文切换?上下文切换都包含什么步骤【2015】
- 上下文切换是指CPU从一个进程或线程切换到另一个进程或线程
- 步骤
- 决定是否做上下文切换以及是否允许做上下文切换
- 保存当前执行进程的上下文
- 使用进程调度算法,选择一处于就绪状态的进程
- 恢复或装配所选进程的上下文,将CPU控制权交到所选进程手中。
1.13. 给出有限状态机的定义?有哪两类状态机?两者有何区别?给出至少3个示例应用【2015】
- 有限状态机表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。
- 分类:
- 状态模型:单线程,只有一个状态可以在任何时候有效
- Moore State models:输出信号仅与当前状态有关,即可以把Moore型有限状态的输出看成是当前状态的函数
- Mealy State models:输出信号不仅仅与当前状态有关,还与所有的输入信号有关,即可以把Mearly型有限状态机的输出看成是当前状态和所有输入信号的函数
- 层次型有限状态机:支持并发和层次结构,硬件设计上与Mearly上有相同的问题:与软件不相关,导致更紧凑的代码
- 示例:电话、定时炸弹、自动贩卖机、电梯等
1.14. 什么是优先级反转?如何解决?【2015】
- 优先级反转:当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。
- 解决方案:
- 优先级天花板是当任务申请某资源时,把该任务的优先级提升到可访问这个资源的所有任务中的最高优先级,这个优先级称为该资源的优先级天花板。这种方法简单易行,不必进行复杂的判断,不管任务是否阻塞了高优先级任务的运行,只要任务访问共享资源都会提升任务的优先级。
- 优先级继承是当任务A申请共享资源S时,如果S正在被任务C使用,通过比较任务C与自身的优先级,如发现任务C的优先级小于自身的优先级,则将任务C的优先级提升到自身的优先级,任务C释放资源S后,再恢复任务C的原优先级。这种方法只在占有资源的低优先级任务阻塞了高优先级任务时才动态的改变任务的优先级,如果过程较复杂,则需要进行判断。
1.15. 嵌入式系统定义、应用(至少五种)、结构、特点【2013】【2015】【2016】
- 定义:
- 用于控制、监视或辅助操作机器和设备的装置(软件和硬件的综合体,可以涵盖机电等辅助装置)
- 国内:以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗等具有严格要求的专用计算机系统
- 其他:看不见的计算机,一般不能被用户编程,它有一些专用的I/O设备,对用户的接口是应用专用的,包含有计算机,但又不是通用计算机应用系统。
- 特点:
- 形式多样,面向特定应用
- 适用于各种微处理器及微处理器架构
- 极其关注成本
- 对可靠性和实时性有极高的要求
- 所有的操作系统具有实时性、可靠性,紧凑、可裁剪、适应于各种微处理器及微处理器架构。
- 使用专用工具和特殊方法开发
- 典型应用:可穿戴设备、通信、工控、航天航空、智能家居、智能驾驶
- 嵌入式系统三要素
- 嵌入式:嵌入到对象体系中,有对象环境要求
- 专用性:软硬件按照对象要求设计、裁剪
- 计算机:实现对象的智能化功能
- 基本组成:嵌入式硬件和软件
- 硬件:微处理器为核心集成存储器和系统专用的输入输出设备
- 软件:初始化代码及驱动、嵌入式操作系统和应用程序有机结合,形成系统特定的一体化软件
1.16. 物联网:概念、典型结构、典型应用【2016】【2017】
- 物联网就是万物互联的互联网,是互联网与嵌入式系统发展到高级阶段的融合。是物理设备、联网设备、智能设备和其他嵌入式电子设备、软件、传感器、执行器和网络连接的项目之间的互联网络,使这些对象能够收集和交换数据。
- 参考嵌入式系统的定义、结构、应用。
- 应用:智能家居制造业、环境监测
- 组成:传感器、控制器、终端、无线模组、通信网络、应用开发平台
1.17. 开源硬件:定义、理解【2016】
- 开源硬件是可以通过公开渠道获得的硬件设计,任何人都可以对已有的设计进行学习、修改、发布、制作和销售。
- 硬件设计的源代码的特定的格式可以为其他人获得,以方便对其进行修改。理想情况下,开源硬件使用随处可得的电子元件和材料,标准的过程,开放的基础架构,无限制的内容和开源的设计工具,以最大化个人利用硬件的便利性。开源硬件供人们在控制他们的技术自由的同时共享知识并鼓励硬件设计开放交流贸易
1.18. 智能硬件:定义与理解【2017】
1.19. 可重入性:定义,一个程序具备可重入性需要满足的特性【2016】
- 一个函数可以同时被多次调用。可重入函数在任何时候都可以被中断,一段时间后继续运行时数据不会丢失。
- 特性:
- 原子地使用所有共享变量
- 程序内不调用非可重入的函数
- 不以非原子方式使用硬件。
1.20. 建模:定义,举例建模技术【2016】
建模是为了理解系统,对系统做出抽象,建立模型的过程
- 面向状态的模型:FSM
- 面向活动的模型:数据流图、过程模型
- 面向结构的模型:系统框图
- 面向数据的模型:ER图
1.21. 影响流水线性能的因素有哪些?分支指令对流水线性能有何影响?如何解决?【2013】【2016】
- 影响流水线性能的因素:
- 结构阻滞:多条指令进入流水线后,硬件资源满足不了指令重叠执行
- 数据阻滞:指令在流水线中重叠执行时,后继指令需要用到前面指令的执行结果
- 控制阻滞:流水线遇到分支指令和其他改变PC寄存器值的指令
- 分支指令的影响:遇到分支指令时,由于处理器要执行跳转操作,因此已经在流水线上的顺序指令就是无效的,需要被清空。处理器重新形成流水线需要时间,因此影响效率。
- 解决方法:应用分支预测技术
- 补充流水线
- RISC机器用来减少指令周期的一种技术,提高处理器和总线的使用率
- 在CPU中由若干个个不同功能的电路单元组成一条指令处理流水线, 然后将一条指令分成若干步后再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一 条指令, 因此提高CPU的运算速度。
- 优点:提高CPU利用率、并行计算
- 3级流水线(ARM7TDMI):取指、译码、执行
- 5级流水线(ARM9TDM):取指、译码、执行、数据缓冲、写回
- 减少每个周期的工作=>允许更高的时钟频率
- 分离数据和指令存储器=>降低CPI
- 6级流水线(ARM1OTDM):取指、发射、译码、执行、存储器、写回
- 管道刷新并在分支上重新填充,导致执行速度变慢
- 指令集消除代码中的小跃点的特殊功能,以获得最佳的流通性拼写
1.22. 比较忙等I/O与中断驱动I/O【2013】
- 忙等IO:用指令来检查设备是否就绪
- 最简单的设备驱动方式
- CPU不能在检查设备的过程中执行其他指令
- 很难处理同时发生的IO操作
- 中断IO:基于子程序调用,使下一条指令为一个子程序调用的预定位置,返回位置被保存确保执行前台程序
- CPU和设备之间通过总线连接
- CPU和设备之间进行握手
- 设备发出中断请求
- 当CPU能处理中断时发出中断确认请求
- 两种机制确保中断更加有效:优先级决定哪个中断先获得CPU;中断向量决定每个中断对应的执行代码,忙等I/O效率比较低,中断I/O允许设备修改CPU控制流。
1.23. NorFlash和NANDFlash之间的区别(至少五种)?【2013】从NorFlash启动和NANDFlash启动有什么不同【2016】
- 性能不同:NOR的读速度比NAND稍快,NAND的写速度比NOR快很多
- 接口不同:NOR的地址线与数据线分开、可以直接读写;NAND的地址线与数据线在一起,读写时需要程序控制
- 启动方式不同:NOR可以XIP,NAND需要Boot Loader将程序复制或映射到内存上再运行
NOR | NAND |
存储代码 | 存储文件 |
随机存取 | 顺序存取 |
不容易坏 | 容易坏 |
单位价格高 | 单位价格低 |
待命时省电 | 运行时省电 |
1.24. 画出嵌入式系统存储结构的金字塔图【2014】【2019】
- ROM种类
- ROM:固定内容、掩膜工艺、无法修改
- PROM:一次编程ROM,一旦导入、无法改变
- EPROM:加电可擦除,多次
- FLASH:快闪存储器
- Flash种类
- RAM种类
- SRAM:不用刷新,速度快,价格贵,容量小
- DRAM:(内存)速度稍慢,加点更新
- SDRAM:同步冬天处理器,提升性能(时钟)
1.25. 嵌入式系统的几种总线与区别【2014】【2017】
- 单总线结构:使用一条单一的系统总线来链接CPU、主存和I/O设备。总线只能分时工作,使信息传送的吞吐量受到限制。四次握手(1 enq, 2 ack, 2 low_ack, 1 low_enq)
- 双总线结构:在CPU和主存之间专门设置了一组高速的存储总线,使CPU可通过专用总线与存储器交换信息,并减轻了系统总线的负担。中间用桥连接。主存仍可通过系统总线与外设之间实现DMA操作,而不必经过CPU。
- 多总线结构:在双总线系统的基础上增加I/O总线,其中系统总线是CPU、主存和通道(IOP)之间进行数据传送的公共通路,而I/O是多个外部设备与通道之间进行数据传送的公共通路。通道实际上是一台具有特殊功能的处理器,它分担了一部分CPU的功能,以实现对外设的统一管理及外设与主存之间的数据传送。
1.26. 嵌入式系统设计面临的挑战【2016】
- 可靠性:如何保证系统可靠地工作
- 实时性:如何满足时限要求,如何处理多项功能在时间上的协调一致关系
- 成本:需要多少硬件
- 功耗:如何降低系统的功耗
- 易升级:如何设计以保证系统可升级
1.27. 中断设计方法【2016】
- 先设计中断再编写ISR
- 保持ISR简短
- ISR执行后立即开中断
- 用空指针填充未被使用的中断向量
1.28. 中断处理过程,中断机制相关的执行开销【2016】
- 中断处理过程
- 中断请求
- 中断排队或优先级
- 中断处理
- 中断返回
- 中断机制的执行时间开销
- 中断延迟
- 寄存器的现场保护(保存全部寄存器的值),将全局变量嵌套层次+1
- 进行中断服务
- 中断恢复(恢复寄存器的值)
1.29. 代码的临界区:定义,如何实现【2017】
- 访问共有资源的程序片段,而这些共有资源无法同时被多个进程锁访问
- 解决方法:信号量PV操作(实现互斥访问、行为同步)、中断
1.30. 嵌入式系统静态和动态内存管理【2017】【2019】
- 存储管理:固定分区的存储管理方法OSMemCreate,OSMemGet, OSMemPut
- put时必须放入get时去除的内存块
- Heap1:不支持free,简单的数组分配,适用于确定性任务
- Heap2:简单的free,会导致碎片,适用于每次申请和释放内存大小相同的任务
- Heap3:调用了malloc和free,通过挂起调度器达到了线程安全性
1.31. 嵌入式系统的启动过程【2017】
- 上电复位、板级初始化
- 嵌入式系统上电复位后完成板级初始化工作。
- 板级初始化程序具有完全的硬件特性,-般采用汇编语言实现。不同的嵌入式系统,板级初始化时要完成的工作具有一定的特殊性,但以下工作一般是必须完成的:
- CPU中堆栈指针寄存器的初始化。
- BSS段(Block Storage Space)表示未被初始化的数据)的初始化。
- CPU芯片级的初始化:中断控制器、内存等的初始化。
- 系统引导/升级
- 根据需要分别进入系统软件引导阶段或系统升级阶段。
- 软件可通过测试通信端口数据或判断特定开关的方式分别进入不同阶段。
- 直接在NOR Flash上运行
- 软件直接从外存读取加载如RAM,成本更低
- 系统引导:
- 将系统软件从NOR Flash中读取出来加载到RAM中运行:这种方式可以解决成本及Flash速度比RAM慢的问题。软件可压缩存储在Flash中。
- 不需将软件引导到RAM中而是让其直接在NorFlash上运行,进入系统初始化阶段。
- 将软件从外存(如NandFlash、 CF卡、MMC等)中读取出来加载到RAM中运行:这种方式的成本更低。
- 系统升级:
- 进入系统升级阶段后系统可通过网络进行远程升级或通过串口进行本地升级。
- 远程升级一般支持TFTP、FTP、HTTP等方式。
- 本地升级可通过Console口使用超级终端或特定的升级软件进行。
- 系统初始化
- 在该阶段进行操作系统等系统软件各功能部分必需的初始化工作,如根据系统配置初始化数据空间、初始化系统所需的接口和外设等。
- 系统初始化阶段需要按特定顺序进行,如首先完成内核的初始化,然后完成网络、文件系统等的初始化,最后完成中间件等的初始化工作。
- 应用初始化:在该阶段进行应用任务的创建,信号量、消息队列的创建和与应用相关的其它初始化工作。
- 多任务应用运行:各种初始化工作完成后,系统进入多任务状态,操作系统按照已确定的算法进行任务的调度,各应用任务分别完成特定的功能
1.32. 请说明嵌入式系统、人工智能、自动控制三者之间的关系【2019】
1.33. 为什么在嵌入式开发中不常用C标准库中的malloc函数?有什么常见的解决方案?【2019】
- 容易造成碎片
- 解决方案TODO
1.34. 嵌入式系统的分类
- 按处理器位数:4位、8位、16位、32位(主流)、64位
- 按应用:信息家电、汽车电子、通信、移动终端、工业控制
- 按速度:强实时系统(ms、us),一般实时系统(s),弱实时系统(s+)
- 按确定性:硬实时系统(严格要求响应事件、否则或崩溃或错误)、软实时系统
- 按复杂程度:循环轮询系统、有限状态机系统、前后台系统、单处理器多任务系统、多处理器多任务系统
1.35. CISC与RISC
- CISC:复杂指令集(许多地址格式,许多操作,支持多操作码)
- RISC:精简指令集{流水型指令,存取指令)
- RISC机器用来减少指令周期的一种技术,可提高处理器和总线的使用率
1.36. 信息存储的字节顺序
- 不管是大端法还是小端法存储,计算机在内存中存放数据的顺序都是从低地址到高地址
- 大端法是首先取高字节的数据放在低地址;小端法是首先取低字节的数牧据放在低地址
1.37. 进程、线程、任务的概念
- 进程:操作系统进行资源分配的基本单元,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,式操作系统结构的基础。
- 线程:轻量级进程,是操作系统任务调度和执行的基本单位
- 任务:最抽象、软件完成一个活动,可以是进程可以是线程。
1.38. 任务控制块
任务控制块(TCB)描述一个任务的核心数据机构包括任务堆栈指针、任务状态、优先级等,任务创建的时候创建TCB表
1.39. 任务间通信
- 共享内存、消息、管道、信号
- 使用邮箱和消息队列
- 管理核心:事件控制块ECB
1.40. 原始优先级上限和立即优先级上限
- 当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被低优先级任务占有,高优先级任务被阻塞,无法保证实时性。
- 优先级天花板(立即优先级上限,ICPP):当任务申请资源时,把该任务的优先级提升到可访问这个资源的所有任务的最高优先级。此优先级称为这个资源的优先级天花板,此方案简单可行,不管任务是否阻塞了高优先级任务运行,只要任务访问共享资源则提升优先级。
- 优先级集成(原始优先级上限):当任务A申请共享资源S,如果S正在被任务C使用,通过比较任务C和自身优先级,如果C < A,则任务C的优先级提高到自身A的优先级,C释放资源S后,恢复到原始优先级,此方法只在低优先级阻塞高优先时才动态改变优先级,过程复杂时需要多次判断。
1.41. ucOS-II如何从64位系统位扩展到256位
- 修改
os_cfg.h
中#define OS_LOWEST_PRIO 63 -> 254
- 新版的ucos-II可以自动根据
OS_LOWEST_PRIO
的大小判断TBL大小和算法,不需要修改,对于旧版,则ucos_ii.h
中修改TCB表的大小(8->16),在os_core.c
中个修改算法
- 将16位修改成低8位和高8位:若低8位为0,则在高8位,反之则为低8位,找到高低之和,再进行进一步判断
- 总之将8组 * 8个/组->16组 * 16个每组,高八位计算按位运算模式使用Map,并在最后计算优先级时+8再算。
1.42. ucOS-II的特点
- 可抢占多任务实时内核,是优先级最高的
- 不支持时间片轮转法
- 任务调度所花时间为常量
- 采用实模式存储管理
- 不划分内核空间和用户空间
- 资源共享,任务都是线程级任务
- 代码段、数据段、bss段、堆栈、多内存分区,每个分区大小
1.43. 响应中断的条件
- 至少有一个中断源向CPU发出中断信号;
- 系统允许中断,且对此中断信号未予屏蔽。
1.44. 中断定义
中断:由于某种事件的发生而导致程序流程的改变。产生中断的事件称为中断源。
1.45. 同步与互斥
同步可以通过开关中断实现,互斥使用信号量。
1.46. 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加载操作系统引导程序。
1.47. bootloader及其启动过程
- bootloader:嵌入式系统中的OS启动加载程序
- 作用:将操作系统内核从外部存储设备拷贝到内存中,并跳转到内核的首条指令
- 启动过程:
- 初始化硬件,如设置UART (至少设置1个),检测存储器等
- 设置启动参数,告诉内核硬件的信息,如用哪个启动界面,波特率.
- 跳转到操作系统的首地址
- 消亡
1.48. 任务调度
- 可抢占调度:系统将处理机分配给优先级最高的进程,更好满足紧迫作业的要求。
- 不可抢占调度:系统将处理机分配给优先级最高的进程后,该进程一直执行下去,主要用于批处理或某些实时性要求不严的实时系统。
- 先来先服务:将处理机分配给最先来的进程,只考虑先后。
- 时间片轮转算法:主要用于分时系统中的进程调度,先将进程按照先进先出原则排列成一个队列,让首进程在CPU运行一个时间片的时间(通常10-100ms)后,将该进程放置在队列末尾。
- 优先级算法:系统将处理器分配给就绪队列中优先数最高的进程(分为抢占式优先级算法和非抢占式优先级算法)
2. 问答题
2.1. 给出嵌入式软件轮询模式的伪代码描述?描述有何种变种或者改进?使用时需要注意什么?【2015】【2017】【2019】
// 轮询读:
while(true){
while(peek(in_status)==0);
*loc = peek(in_char);
poke(in_status, 0);
loc++;
}
// 轮询写:
while(true){
while(peek(out_status) != 0);
poke(out_char, *loc);
poke(out_status, 1);
loc++;
}
- 改进:采用FlagI标记位和FlagO,结合终端使用,在服务例程中置位
- 使用注意事项
- 要注意及时将寄存器状态恢复,避免在应用程序造成不可预知的错误
- 轮询式占用了大量的CPU时间,使其不能用于其他计算任务,使用要谨慎
- 具体应用:
- 单用户交互与实时I/O设备控制
- 轮询模式的嵌入式软件结构
- 【2019】补充:前后台系统是什么?
2.2. 描述RTOS ucOS-II采用哪些策略与机制来确保任务的实时性【2017】
- 存储管理采用固定分区存储管理,以固定块大小来分配,避免内存碎片的产生
- 任务调度时间采用固定优先级的优先级调度,为确保任务的实时性,ucOS-II要确保每次调度的耗时具有可预测性,以64个进程为例
- 使用8*8的数组来表示进程是否等待被调度,就绪态置为1,同时位置越低表示优先级越高,即(0, 0)优先级最高
- 使用TaskUnMapTbl表格存储256种情况下出现1的最低位,在代码为
Y = TaskUnMapTbl[TaskRdyGrp]
X = TaskUnMapTbl[TaskRdyTbl[Y]]
Prio = (Y << 3) + X
- 由此找到相应进程,保证耗时固定
- 允许中断与异常存在,使得系统允许实时的高优先级任务执行。
- 任务调度总是选择就绪任务中优先级最高的一个运行
- 允许任务间的抢占
- 具有优先级的中断机制
- 有确定性的任务调度/切换时间和中断延迟
- 精度高的时钟节拍产生时钟中断
- 信号量、互斥量、信箱、消息队列等任务间通信机制。
2.3. 调度算法题【2017】
- RMS:单一速率调度
- 静态调度策略,分配给每个进程的优先级是固定不变的。基于单一速率分析。
- 周期最短的进程被指定为最高优先级。每个周期开始,P进去,根据优先级调度执行,执行结束就从就绪状态退出直到他下一个周期开始。看书
- EDF:最早截止时限优先调度
- 动态的优先级方案,在进程执行时根据进程的启动时间改变进程的优先级。
- 根据截止时限顺序指定优先级。最高优先级的进程是当前截至时限最临近的进程。
- 做法:看书p205 先写出all时间片内的截至时限,然后根据截至时限进行选择调度
- 抢占式?默认选择就绪队列第一个
2.4. 为什么需要仿真开发?仿真开发有哪些特点?【2015】
- 利用模型复现实际系统中发生的本质过程,并通过对系统模型的实验来研究存在或设计中的系统
- 利用计算机实现对系统的仿真研究不仅方便、灵活,而且是经济的。
- 在研制、鉴定和定型全过程都必须全面的应用先进的仿真技术,否则任何新型的、先进的飞行器和运载工具的研制都将是不可能的。
2.5. 描述嵌入式软件系统主要采用的软件系统体系结构以及各自的优缺点(至少五种)【2015】
优先级 | 响应时间 | 变动的影响 | 共享数据 | |
轮询 | 无,一切按序运行 | 所有任务之和 | 非常大,增加任务或修改任务时间影响所有任务 | 无 |
状态机 | 当前状态决定下一个状态优先级 | 所有任务之和 | 同上 | 同上 |
带中断轮询 | 中断比主循环优先级高,中断有优先级 | 任务和中断执行时间和 | 主循环同轮序一样,对中断服务历程影响不大 | 必须处理和中断服务例程分享的数据 |
纯中断 | 中断有优先级 | 中断执行时间 | 对中断服务例程影响不大 | 同上 |
函数队列 | 中断有优先级,其他任务按序进行 | 最长任务执行时间 | 低,中断管理优先级功能,队列管理较低优先级 | 同上 |
- 函数队列:函数指针被添加到队列中,主循环在队列中循环并执行任务,任务或中断将新任务添加到功能队列中。以中断优先为优先级
2.6. 单CPU
3. 设计题
3.1. 编号:2015A
- FSM的有限状态机设计
- 层次型有限状态机的设计
- 细节补充
- 没有明确说明放下听筒操作,改进:在呢该放下听筒的操作,使系统终止
- 没有限制用户操作时间,改进:增加明确的时间限制30s
- 实现方式:
- Switch-case
- 状态表
- 状态模式
- 选择状态模式:因为状态模式相比于其他方式,更容易维护和扩展,降低了实际状态之间的耦合,通过抽象接口来实现,当需要修改或添加状态时,只需要修改内部实现而不需要改变接口,隐藏内部实现一定程度上分解了复杂度,使得代码容易理解。
3.2. 编号:2015B
嵌入式发展到今天,对应于各种微处理器的硬件平台都是通用的、固定的:各种相应的软件比较成熟,模块化程度比较高:因此,当今的开发过程更 多的注重开发流程,合理、科学的开发流程往往可以达到事半功倍的效果。假设你现在某从事嵌入式产品开发的公司工作,被要求开发一通用的数字电视接收控制器,即通常所说的"机顶盒",对于机顶盒的开发,请你结合嵌入式系的设计流程叙述一下将采取的设计开发流程。(整个流程需的从产品定义到产品测试和发布)
- 特征:一开始就被划分为软硬件两大部分,软硬件独立开发设计,硬件优先
- 问题:
- 软硬件交互收受到很大限制,凭经验划分软硬件,软硬件之间的相互性能影响很难评估;
- 系统集成相对滞后,NRE较大
- 后果:设计质量差,设计修改难,研制周期不能有效保障
- 基本流程:需求分析,规格说明,体系结构,构件设计,系统集成
3.3. 编号:2019
- 针对自动食品售卖机,有多种支付方式,给出
- 基于有限状态机的设计,给出状态图和状态转移表
- 基于层次有限状态机的设计。
- 状态图和状态转移表