1.嵌入式软件基础1.1嵌入式软件概述嵌入式软件的特点规模较小开发难度大硬件资源有限嵌入式软件一般涉及到底层软件的开发需要软硬件基础开发环境和运行环境不同实时性和可靠性要求高。如火箭飞行控制、核电站要求固化存储1.2嵌入式软件分类按照通常的分类方法嵌入式软件可以分为系统软件、应用软件和支撑软件三大类。系统软件控制和管理嵌入式系统资源包括设备驱动程序、嵌入式操作系统、嵌入式中间件等应用软件上层软件定义设备主要功能和用途负责与用户交互如飞行控制软件、手机软件等支撑软件辅助软件开发的工具软件如系统分析设计工具、在线仿真工具、交叉编译器等1.3嵌入式软件的体系结构1.3.1无操作系统阶段程序直接在硬件上运行没有操作系统层。开发者需要直接操作寄存器、中断向量表和硬件外设对硬件细节有完全的控制权。两种实现方式循环轮转所有任务在一个无限循环中顺序执行结构简单但实时性较差适合功能单一的场景。前后台系统在循环轮转的基础上增加了中断处理在轮询基础上增加中断机制前台处理紧急事件中断后台处理常规任务主循环。1.3.2有操作系统阶段开发应用程序不再直接面对嵌入式硬件设备而是在操作系统的基础上编写优点有提高系统的可靠性提高了系统的开发效率降低了开发成本缩短了开发周期可以按照软件工程的思想将程序分解成多个任务模块每个任务模块的调试、修改几乎不影响其他模块。商业软件提供了良好的多任务调试环境有利于系统的扩展与移植1.3.3五层架构模型硬件层 (Hardware)——微处理器、存储器、外设提供嵌入式系统的物理基础包括微处理器MCU/MPU、存储器Flash/RAM、I/O接口、定时器、通信接口等。这一层决定了系统的计算能力、功耗特性和成本基础。硬件驱动层 (Driver)——驱动程序、板级支持包BSP将硬件细节封装向上层提供统一的API接口。HAL使上层软件无需关心具体硬件型号只需调用标准化接口即可操作硬件资源极大提升了代码的可移植性。操作系统层 (RTOS/OS)——任务调度与资源管理负责任务调度、内存管理、中断处理、同步机制等核心功能。实时操作系统RTOS提供确定性响应满足嵌入式系统对时效性的严格要求。中间件层 (Middleware)——通信机制与资源共享提供通用的软件服务如网络协议栈、文件系统、数据库、图形界面等。中间件屏蔽了底层复杂性让应用开发者专注于业务逻辑实现。应用层 (APL)——业务逻辑与用户交互实现具体的业务功能如数据采集、控制算法、用户界面、通信协议等。应用层直接面向产品需求是体现产品价值的核心代码层。1.4设备驱动层1.4.1板级支持包BSP一般BSP主要包括两个方面的内容引导加载程序Boot Loader设备驱动程序1.4.1.1引导加载程序Boot Loader引导加载程序Boot Loader 是嵌入式系统加电后运行的第一段软件代码是在操作系统内核运行之前的一段小程序通过这段程序可以初始化硬件设备、建立内存空间的映射图将系统的软硬件环境设置到一个合适的状态为最终调用操作系统内核做准备Boot Loader的实现高度依赖具体的硬件平台主要的基本功能如下片级初始化主要完成微处理器的初始化包括设置微处理器的核心寄存器和控制寄存器、微处理器的核心工作模式、局部总线模式等把微处理器从上电的默认状态设置成系统要求的工作状态纯硬件初始化过程板级初始化设置各种硬件寄存器来完成微处理器以外的其他硬件设备的初始化设置某些软件的数据结构和参数同时有软件和硬件的初始化过程加载内核将操作系统和应用程序的映象从flash存储器复制到系统内存中然后跳转到系统内核的第一条指令处继续执行1.4.1.2设备驱动程序在一个嵌入式系统中操作系统可能有也可能无设备驱动程序是必不可少的。设备驱动程序是一组库函数用来对硬件进行初始化和管理并向上层软件提供良好的访问接口大多数设备驱动程序都具备下面的基本功能启动、关闭、停用、启用、读操作、写操作设备驱动程序的组织结构特定的功能一般用函数的形式来实现这些函数之间的组织结构主要有两种分层结构混合结构分层结构把设备驱动程序中的函数分为硬件接口函数和调用接口函数硬件接口直接操作和控制硬件上层接口为上层软件提供服务和函数接口。不直接和硬件打交道会调用硬件接口中的函数优点把所有与硬件相关的细节都封装在硬件接口中在硬件需要升级需要更新设备驱动程序的时候只需要改动硬件接口中的函数即可而上层调用接口中的函数不用做任何修改。混合结构在设备驱动程序当中没有明确的层次关系上层接口和硬件接口函数混在一起互相调用1.5嵌入式中间件中间件在操作系统内核、设备驱动程序和应用软件之外的所有系统软件基本思路把原本属于应用软件层的一些通用的功能模块抽取出来形成独立的一层软件从而为运行在它上面的哪些应用软件提供一个灵活、安全、移植性好、互相通信、协同工作的平台特点可以有效地实现软件的可重用降低应用软件的复杂性提高系统的开发效率缩短开发周期节约开发成本和维护费用保证了系统的高伸缩性、易升级性、稳定性。但会带来额外的开销嵌入式中间件可以分为不同类型如消息中间件、对象中间件、远程过程调用、数据库访问中间件、安全中间件等1.6嵌入式软件的运行流程基于多任务操作系统的嵌入式软件的主要运行流程上电复位、板级初始化阶段系统引导、升级阶段系统初始化阶段应用初始化阶段多任务应用运行阶段2.嵌入式操作系统概述2.1嵌入式操作系统的基本概念嵌入式操作系统Embedded Operating SystemEOS是一种专为嵌入式系统设计的系统软件负责全面管理和调度嵌入式系统中的软硬件资源。与通用操作系统不同EOS通常具有小型化、高实时性、可裁剪性、低功耗等核心特征以适应嵌入式设备对成本、功耗和可靠性的严格要求嵌入式操作系统的特点非通用型操作系统资源占用极小这是最显著的特点。为适应资源受限的硬件嵌入式操作系统的内核设计得非常小巧。例如像 FreeRTOS 这样的操作系统内核通常只需要几KB千字节的内存而更极致的如 embOS其最小只读存储器ROM占用仅为 1KB随机存取存储器RAM占用仅为 30字节。实时性强许多嵌入式应用如工业控制、自动驾驶对任务响应时间有严格要求。嵌入式操作系统能够提供确定的、可预测的响应确保关键任务在规定时限内完成。根据响应时间的要求可以分为硬实时系统响应时间通常在几十毫秒以内和软实时系统响应时间在几百毫秒。可裁剪与模块化嵌入式操作系统通常采用模块化设计允许开发者根据具体应用需求只选择必要的功能组件如文件系统、网络协议栈、图形界面等进行组合或裁剪从而在满足功能的前提下最大限度地缩减系统体积和成本。能源、成本和可靠性通常是影响设计的重要因素不同的操作系统包含的组件不同但所有操作系统都会有一个内核kernel内核是指操作系统中的一个组件它包含了OS的主要功能即OS的各种特性及其相互之间的依赖关系任务管理存储管理设备管理文件管理不同的嵌入式操作系统的内核设计不同不一定包含所有的4个功能模块2.2嵌入式操作系统的分类2.2.1按实时性分类这是最核心、最常用的分类标准直接决定了系统适用于哪种任务类型。类型核心特点典型代表典型应用硬实时系统任务必须在绝对确定的截止时间内完成任何超时都视为系统错误甚至故障。响应时间通常在微秒到毫秒级。VxWorks, QNX, FreeRTOS (配置为硬实时模式), ThreadX汽车安全气囊、飞机飞行控制、医疗心脏起搏器、工业机器人软实时系统任务大多数情况下能在截止时间内完成但偶尔的超时不会被视为致命错误仅可能导致服务质量下降。标准Linux (经过PREEMPT_RT补丁后可达硬实时级别), Windows Embedded音视频播放、手机用户界面、网络数据包处理非实时系统没有时间截止要求任务按分时调度响应时间不可预测。早期的简单轮询系统裸机简单的玩具、电子计算器如何选择如果你的设备涉及安全、运动、医疗等对时间极其敏感的领域必须选择硬实时系统。而消费电子中的UI交互、媒体播放等软实时通常就足够了。2.2.2按内核架构分类内核架构决定了系统的稳定性、扩展性和开发复杂度。架构核心特点优点缺点典型代表宏内核操作系统内核的所有功能任务调度、内存管理、文件系统、驱动等都编译在一个大内核中运行在单一地址空间。内部函数调用效率高性能好。任何一个模块尤其是驱动崩溃都可能导致整个系统崩溃扩展性稍差。嵌入式Linux, 传统的μC/OS-II微内核内核只保留最核心功能任务调度、内存管理、进程间通信其他功能驱动、文件系统、网络协议栈都作为独立的用户态服务运行。高可靠性单个服务崩溃可重启而不影响内核、高安全性、易于扩展和移植。服务间频繁的进程间通信IPC会带来一定性能开销。QNX, L4, 现代版Symbian混合内核 / 模块化内核实际的折衷方案。内核仍以宏内核为核心但允许在运行时动态加载/卸载功能模块如驱动程序。兼顾宏内核的性能和微内核的灵活性是目前最主流的设计。驱动的崩溃理论上仍可能带崩内核如果驱动运行在内核空间。嵌入式Linux (支持内核模块), Windows NT系列 (含Windows Embedded)如何选择追求极致安全与稳定如医疗、无人驾驶首选微内核如QNX。追求高性能和丰富的功能如智能设备、路由器宏内核或混合内核如嵌入式Linux是更实际的选择。2.2.3按应用领域与商业模式分类这是从开发者的实际接触角度进行的分类。类别特点授权方式典型代表适合人群/场景开源/自由RTOS代码完全开放可免费用于商业产品社区活跃资料丰富。GPL, MIT, Apache等开源协议FreeRTOS, RT-Thread, Zephyr, LiteOS初创公司、个人开发者、学习研究、成本敏感的项目商业闭源RTOS专业公司开发维护提供完整的技术支持、认证服务如功能安全ISO 26262代码不可见或需付费获取。商业许可证需要支付授权费或版税VxWorks, QNX, ThreadX (微软收购后部分开放), μC/OS (原为商业后开源)汽车、航空航天、军工、医疗等对安全和可靠性要求极高、预算充足的领域嵌入式Linux发行版基于Linux内核针对嵌入式环境裁剪和定制生态极为庞大。GPL等开源协议 (核心部分)Yocto Project, Buildroot, OpenWrt, Android (基于Linux)几乎所有需要复杂功能、网络通信、图形界面的中高端嵌入式设备如何选择学习入门首选 FreeRTOS 或 RT-Thread社区活跃资料众多。商业低成本项目FreeRTOS (MIT许可证非常宽松) 或 RT-Thread (Apache许可证同样宽松) 是绝佳选择。商业高安全/高认证项目预算足够则选 VxWorks 或 QNX预算有限可考虑已获安全认证的开源方案如 RT-Thread Smart 的相关认证版。复杂功能项目需要摄像头、触摸屏、完整的网络浏览器、AI算法库等几乎只能选择嵌入式Linux。2.3常见的嵌入式操作系统2.3.1实时操作系统RTOS操作系统开源/商业关键特征典型应用FreeRTOS开源市场占有率极高内核小巧KB级支持大量MCU架构被AWS收购消费电子、物联网设备、电机控制RT-Thread开源国产RTOS组件丰富软件包生态支持SMP多核最小内核4KB ROM工业控制、智能家居、国产化项目Zephyr开源Linux基金会托管微内核风格内置内存保护和SBOM安全特性物联网安全设备、蓝牙/WiFi接入点VxWorks商业微秒级确定性响应功能安全认证齐全可靠性极高火星探测器、战斗机、工业机器人QNX商业微内核架构驱动/服务用户态运行天然容错已通过ISO 26262最高等级汽车数字仪表盘、医疗设备、轨道交通ThreadX开源Azure RTOS硬实时通过SIL4/ASIL D认证部署设备超120亿台汽车、航空航天、打印机µC/OS (II/III)开源原商业源码经典文档丰富曾获FAA认证教学研究、安全关键系统旧项目LiteOS开源华为出品最小6KB极低功耗Tickless机制鸿蒙内核基石华为IoT设备、智能传感器Mbed OS开源ARM主导深度集成ARM Cortex-M生态内置安全套件物联网原型开发、ARM MCU项目RIOT开源类Linux API但资源占用极低最小1.5KB RAM支持C物联网端侧节点、无线传感器网络SylixOS商业国产大型RTOS兼容POSIX支持SMPO(1)任务调度用于轨道交通/国防工业控制、国防装备2.3.2分时操作系统操作系统开源/商业关键特征典型应用嵌入式Linux开源基于Linux内核裁剪支持多任务、网络、GUI、海量驱动和中间件是嵌入式分时系统的绝对主流路由器、智能家居中控、车载信息娱乐、工业HMIAndroid开源AOSP基于Linux内核专为移动/嵌入式设备定制的完整软件栈智能手机、平板、智能电视、车载系统OpenWrt开源专为嵌入式网络设备无线路由器优化的Linux发行版包管理强大路由器、网关、物联网接入点Yocto Project开源不是单一OS而是一个定制嵌入式Linux的工具集可构建最小化分时系统各类需要定制Linux的工业/消费嵌入式产品Windows Embedded商业微软嵌入式产品线如Windows Embedded Compact/Standard模块化支持x86/ARM工业平板、POS机、瘦客户机HarmonyOS鸿蒙开源分布式架构当运行在大型设备手机、车机时底层使用Linux内核表现出分时特性手机、平板、车机、智慧屏