1. 嵌入式软件概述
1.1. 嵌入式软件开发路线图
- 系统越来越复杂,嵌?式系统的软件开发逐渐变成了软件专家的工作。
- 对电子硬件很了解,也愿意做?些和硬件密切相关的工作。
- 最近10-15年,伴随着嵌?式软件规模和复杂性的爆炸性增?,专门的软件开发团队进?了视野。软件团队在不断壮大,但这种增长不仅仅是因为完成所需的代码。嵌?式软件团队中有不同领域的专家,包括?络、?户界?设计、硬件设备、传统嵌?式软件设计等方面。
1.2. 嵌入式软件与桌面软件的对比
1.2.1. 内存
有限,影响编程语言的选择以及开发工具的使用(?如编译器优化)
1.2.2. CPU处理能力
成本和功耗的考虑,ES不得不采用保守的设计?案,其中的CPU往往只是恰好满足要求。
1.2.3. 操作系统
OS(Windows/Linux)、RTOS、专有OS或裸机
1.2.4. 实时性
- 实时系统不?定会运行得很快,但?定是可预测的,通常的术语叫做确定性
- 实时性的要求对于OS的选择和程序设计都有影响
1.2.5. 开发流程
- ES往往没有足够的资源进行软件开发。交叉开发对于工具的选择有很大影响。
1.2.6. 执行流程
多数嵌入式设备从开机开始就会运行某个程序,该程序会?直运?到系统关机。这个程序可能存储在ROM,也可能是从?易失性存储器转移到RAM中执?。
1.2.7. 每一个嵌入式设备都是不同的
- 可能是技术层?的:不同的CPU架构、内存、外设、应?程序和操作系统
- 也可能是商业运作层?的,?如?机开发、?产的商业模式就和核磁共振扫描仪完全不同。
1.2.8. 嵌?式软件工具和组件
- 与桌?软就开发?样,嵌?式软件?程师需要运??具来构建和测试软件。同时,也很可能会引?可重?的软件组件
1.2.9. 开发工具
- 从表?上看,嵌?式软件的开发过程和桌?软件很像:编译代码模块,然后在调试器的控制下执?。然?,并不这么简单,有着显著的不同。
- 往往是使用交叉编译器来进行嵌入式软件的开发。
- 有时候嵌?式应用中会直接包含?部分的汇编代码:处于对性能的考量。
- 嵌?式链接器除了将多个对象模块和函数库例程整合在?起以外,链接器还负责在内存中正确定位代码和数据。嵌?式系统的内存映射?分复杂,对于精确性的要求也?分严格。链接器必需能够灵活地应对这些要求。
- 嵌?式调试器并不是?个单?的组件,?是?系列对应不同运?环境的?具。借由在本地或者指令集模拟器中运?代码,代码可以仅在宿主机上运?。调试器也可以和?个?标板相连接(JTAG或其他?式,如以太?),并执?代码。
- 其他?些更有针对性的?具,典型的选项包括分析实时性能、代码执?时设备功耗情况的分析器。
1.2.10. 软件组件
- 最简单和显?易?的可重?的软件组件是库。?些库是由编译器提供的,嵌?式编译器提供的库应当是适合嵌?式环境的:可以重?、可以被存储在ROM中。(不会使用printf:会有问题)
- 其他可?的库,特别是针对C++的库,如标准模板库STL。这些库可能并不适合嵌?式应?,在使?时要多加??。
- 与硬件交互式难点之?。在OS内部设备驱动提供了这样的接?
- ES的互联性不断提?,需要不同的?络?持,TCP/IP或总线CANI2C,其他?络技术SNMP、Zigbee、Bluetooth、WiFi和USB。最重要的是应该检查有效性,确保符合标准,并能和其他系统互通互联。
- 嵌?式设备对于有组织的数据存储是有需求的,?如能够应对电源故障和?持多线程。
- LCD(往往是触摸式的)成本减低让其能够被应?到嵌?式设计中。软件于是迎来了?项挑战:?持复杂的图像和?户界?。
2. 软件如何影响硬件设计
2.1. 谁设计硬件/h2>
- 可能有同时负责软件和硬件的嵌入式工程师
- 更有可能拥有两个团队:少数掌握这两个知识的工程师
- 有关硬件的决定可能会对软件产生持久影响
2.2. 软件/硬件的权衡
- 微处理器选择:可能会影响软件效率
- 内存大小和混合
- 延迟承诺是可取的
- ROM/RAM互换性很有用
- 外围设备实现:有时可通过软件替换[例如:计时器]
2.3. 调试硬件
- 在线仿真器:不广泛使用,
- 监控调试器
- 需要沟通渠道,额外的性能消耗
- 需要RAM/ROM交换
- 片上调试
- 需要板载连接器,相当于协议转换器
- 需要RAM/ROM交换
2.4. 自检支持
- I/O电路:”回送”可能有用
- 板载开关:适用于配置或模式选择
- 状态显示:提供对用户额外的信息
- 可能是字符或只是LED
- LED至少可以具有3种状态:开,关,闪烁
3. 嵌入式系统软件架构
3.1. 软件分层
- 延迟承诺是可取的
- ROM/RAM互换性很有用
- 需要沟通渠道,额外的性能消耗
- 需要RAM/ROM交换
- 需要板载连接器,相当于协议转换器
- 需要RAM/ROM交换
- 可能是字符或只是LED
- LED至少可以具有3种状态:开,关,闪烁
3.2. 嵌入式系统的可视化程序模型
- 实时系统有两种基本的程序模型
- 将实时应用视为单个执行线程
- 将实时应用视为多个执行线程
- 取决于需要构建什么类型的系统
3.3. 为何要为实时系统建立模型
- 辅助测试和完善最终系统
- 更重要的是,模型利用它所知的系统属性来描述整个系统,并能够被?于对系统特性的进?步研究
- 实时工程师使用程序模型来开发软件和硬件,以便能将整个实时系统全盘考虑
- 模型使得?程师能够预测程序的运?,从?满?系统的性能需求和功能需求
3.4. 模型间的差异
- ?些模型易于编写,但调试不易
- 难于编写,但调试容易
- ?些模型使得程序运?得更快,但需要付出更多内存资源消耗的代价
- ?些鲁棒性更好,但维护很简单的模型
3.4.1. 单线程程序模型优缺点
- 优点
- 编程和再编程?常快速简单
- 改变系统响应的特性的同时,往模型上添加新功能插件也相当容易
- 缺点
- 在于应?领域的限制
- 难以做到安全地再编程
- 很难应?到不同?为或不同环境的运?系统中去。
3.4.2. 多线程程序模型的优缺点
- 优点
- 允许将系统?作划分为?个逻辑阶段,然后编写相互独?的程序来处理各?的?作。
- 所有处理过程并?。
- 如果有更?吞吐量的需求,?程师可以在任务中引?新的通信和协作模型
- 缺点:可能引?资源竞争,也就是不得不付出代价
3.5. 嵌入式软件体系结构概述
- 轮询
- 有限状态机
- 带中断的轮询
- 仅有中断
- 功能队列调度
- 实时操作系统(RTOS)
3.5.1. 轮询
- 可确定性:如果有任务不能确定时间,会导致其他所有的任务都被影响到。而这不符合嵌入式的实时性要求。
- 轮询的特点:
- 优先级:无,一切按顺序进行。
- 响应时间:所有任务的总和。
- 变更的影响:重大。改变执行任务时间或添加任务会影响所有其他任务。
- 简单,没有共享数据问题:线性并行执行
- 优先级-中断优先于主循环:优先中断
- 响应时间:所有任务的总和以及中断执行时间
- 更改的影响:对于中断服务程序而言意义不大。与轮询作为主循环相同。
- 共享数据-必须处理与中断服务程序共享的数据
- MCU中使用最多的
3.5.4. 仅有中断
- 如果ISR过多,可能会有问题
- 如果高优先级的中断执行所需的时间比低优先级的中断所需的时间长,那么某些中断将被错过,或者您需要处理嵌套中断。
- 优先级-中断优先
- 响应时间:中断执行时间
- 变化的影响-对于中断服务程序而言意义不大。
- 共享数据-必须处理与中断服务程序共享的数据
3.5.5. 功能队列调度
- 函数指针被添加到队列中。
- 主循环在队列中循环并执行任务。
- 任务或中断将新任务添加到功能队列中。
- 最坏的时机
- 优先级:中断优先。任务按顺序执行
- 响应时间:最长任务的执行时间
- 变更的影响:低。中断管理优先级功能。队列管理较低的优先级。
- 共享数据:必须处理与中断服务程序共享的数据
3.5.5.1. 函数队列优化
3.5.6. 抢占式多任务或多线程
- 在这种类型的系统中,低级代码段基于计时器(连接到中断)在任务或线程之间切换。这是通常认为系统具有”操作系统”内核的级别。根据所需的功能量,它或多或少地引入了管理在概念上并行运行的多个任务的复杂性。
- 要访问共享数据,必须通过某种同步策略来控制,例如消息队列,信 量或非阻塞同步方案。
- 由于这些复杂性,组织通常使用实时操作系统(RTOS),从而使应用程序程序员可以专注于设备功能而不是操作系统服务。
3.6. 内核分类
3.6.1. 实时内核
4.2. 操作系统
- 操作系统控制资源:
- 谁获得CPU;
- I / O何时发生;
- 分配了多少内存。
- 流程如何通信。
- 最重要的资源是CPU本身:由调度程序控制的CPU访问。
4.3. RTOS and GPOS
- 相似的功能
- 多任务级别
- 软件和硬件资源管理
- 为应用提供基本的OS服务
- 从软件应用抽象硬件
4.4. RTOS从GPOS中分离出来的不同功能
- 嵌入式应用上下文中具有的更好的可靠性
- 满足应用需要的裁剪能力
- 更快的特性
- 减少内存需求
- 为实时嵌入式系统提供可裁剪的调度策略
- 支持无盘化嵌入式系统,允许从ROM或RAM上引导并运行
- 对不同硬件平台具有更好的可移植性。
4.5. Commercial RTOSs (partial)
4.6.1. 基本单位
- 实时操作系统的基本组成部分是进程。
- 由于没有主循环,因此可以轻松添加新进程或删除过时的进程。
- RTOS根据进程的优先级安排运行时间。
4.6.2. 调度程序
- RTOS的调度程序用来跟踪每个进程的状态,并确定应该运行的进程。
- 调度基本单位是进程,调度是通过有限状态机完成的
4.7. 时序约束
- 执行计算以符合外部时序约束。
- 截止时间频率
- 周期性
- 非周期性的
- 截止时间类型:
- 硬性:未能按时完成会导致系统故障
- 软性:未按时完成进程会导致响应降低
- 偶发进程:具有一定时钟周期的进程
4.7.1. 进程时序的规范
- 释放时间:进程处于就绪态的时间
- 截止时间:进程必须结束的时间
4.7.2. 释放时间和截止时间
- 周期性进程
- 截止时间默认和周期时间相同
4.9. 时间冲突
- 如果流程没有在截止时间之前完成,会发生什么
- 硬截止时间:如果错过了系统就会失败。
- 软截止时间:用户可能会注意到,但系统不一定会出现故障。
- 我们希望通过自己的调度算法来尽可能避免这种问题
4.10. 示例:航天飞机软件错误
航天飞机的首次发射由于软件计时错误而延迟:
- 主控制系统PASS和备用系统BFS。
- BFS无法与PASS同步。
- 更改为一个例行增加的延迟,这会延迟开始时间的计算。
4.11. 进程执行特征
- 进程执行时间 T iT_i Ti?
- 没有抢占的执行时间。
- 可能的时间单位:秒、时钟周期
- 在某些情况下,最坏、最好情况的执行时间可能会有用。
- 数据依赖性。
- 内存系统。
- CPU管道。
- 主备冗余、多机热备
4.12. 利用率
- CPU利用率
- CPU执行有用的工作的比率
- 通常在没有调度开销的情况下进行计算
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!