2026/1/28 13:18:33
网站建设
项目流程
推荐做网站的话术,重庆企业网站推广服务,自己怎么建立公司网站,重庆简约型网站开发价格四、嵌入式系统软件1.硬件抽象层与板级支持包1-1. 硬件抽象层硬件抽象层(HAL)是在操作系统层与硬件之间设置的独立的接口软件层#xff0c;是所有直接依赖于硬件的软件。对硬件进行抽象#xff0c;使上层软件开发人员无须关心底层硬件的具体细节和差异#xff0c;支持上层软…四、嵌入式系统软件1.硬件抽象层与板级支持包1-1. 硬件抽象层硬件抽象层(HAL)是在操作系统层与硬件之间设置的独立的接口软件层是所有直接依赖于硬件的软件。对硬件进行抽象使上层软件开发人员无须关心底层硬件的具体细节和差异支持上层软件在不同体系结构和硬件平台之间的移植。隐藏硬件的差异性提供统一的接口如数据访问、中断处理和报警设施等。1-2. 板级支持包板级支持包(BSP)是硬件抽象层在特定操作系统环境下的具体实现。 既有硬件相关性又有操作系统相关性。功能:系统复位时的硬件初始化包括处理器和电路板的初始化。为操作系统提供硬件相关的驱动程序支持。负责加载操作系统。调试: 包括最小系统的调试和外围设备驱动程序的调试。1-3. HAL和BSP实例1Nios II HALNios II: Altera公司推出的32位哈佛结构用户可配置的通用RISC软核处理器用于支持在FPGA器件上实现可编程片上系统(SoPC)。特点: 支持C语言标准库提供标准的HAL API。HAL系统库提供的服务:外设驱动ANSI C标准库HAL API系统初始化设备初始化2Windows Embedded Compact 7WEC7: 微软公司专门为小型网络设备设计的安全、组件化的实时操作系统。组成:应用和服务层、操作系统内核层、BSP层位于硬件和内核层之间功能:引导加载程序设备驱动程序OEM适配层与处理器结构无关易适配到其他处理器或硬件内核无关程序的传输层2.实时系统与实时操作系统2-1. 实时系统能够满足实时系统需求的操作系统就是实时操作系统。完成每次任务所需时间的一致性。如果实时操作系统能够满足确定性的时限要求则称为硬实时操作系统否则称为软实时操作系统。硬实时任务: 必须在给定的时限内完成否则会导致任务失败或引起致命错误。例如动车组的系统控制、核反应堆处理装置、导弹和自动驾驶等。软实时任务: 系统的响应越快越好但偶尔超出时限并不会造成任务失败或导致任务出现致命错误。例如DVD播放机。准实时任务: 通常允许偶尔错过最后期限超时的响应仍然有一定的意义但会造成任务的服务质量下降。嵌入式系统并不都是实时系统实时系统也不都是嵌入式系统。通用计算机系统经过特殊配置后也可以完成实时控制功能。实时嵌入式系统是嵌入式系统与实时系统的交集。实时系统的特征时间约束性: 必须保证在规定的时间内完成相应的任务外部数据的获取、处理和数据的输出都必须在截止时间之前完成。可预测性: 包括硬件延迟的可预测性和软件执行时间的可预测性。可靠性: 在实时系统中比非实时系统中更重要因为重启的代价非常昂贵。交互性: 必须与外部环境实现良好的协同与交互。2-2.实时操作系统的保证机制多级中断嵌套处理: 允许高优先级的事件在中断低优先级事件时进一步中断。优先级控制: 采用细粒度的任务优先级控制保证高优先级任务不会被低优先级任务打断。调度: 采用抢占式调度保证强实时任务在符合条件下优先得到服务。任务队列: 同优先级的任务建立任务队列按照截止时间排列优先级。2-3.实时操作系统的实时性指标中断延迟时间: 尽可能减小系统的最长关中断时间。任务切换时间: 相同优先级的任务一般采用时间片轮转方式进行任务调度。任务抢占时间: 任务抢占时间通常比任务切换时间更长。响应时间: 系统从事件请求开始到任务完成的时间间隔是评价实时系统实时性最重要的指标。3.引导加载程序bootloader引导加载程序bootloader是底层软件的一部分嵌入式系统上电复位后首先运行。功能:上电自检: 包括硬件和外设的自检如内存校验。硬件初始化: 设置CPU寄存器、存储管理单元MMU、存储空间映射等。配置系统参数: 如IP地址设置。建立上层软件运行环境: 为操作系统准备运行环境。加载和启动操作系统: 将操作系统的控制权交给操作系统。特性: 依赖于具体的硬件结构不同硬件结构的bootloader程序版本不同。复杂bootloader还支持用户命令交互、设置操作系统启动参数、flash ROM编程下载等功能。3-1. 嵌入式操作系统的引导加载方式1在ROM中直接运行操作系统代码特点: 最简单、基础的方式操作系统代码直接存放在ROM中上电后直接读取ROM中的数据加载操作系统。适用场景: 操作系统代码较小功能较简单性能要求较低的系统。2在RAM中运行操作系统代码特点: 操作系统代码压缩后存放在ROM中加载时解压到RAM中运行利用RAM的高速读写特性。适用场景: 较复杂的操作系统需要较高执行速度的系统。3从外存储器加载操作系统代码特点: 操作系统代码存放在外存储器如Flash加载时通过bootloader将代码复制到RAM中运行。适用场景: 操作系统代码较大无法全部放入ROM的系统如智能手机。4从通信端口加载操作系统代码特点: 操作系统代码存放在服务器通过网络通信端口请求并加载操作系统代码。适用场景: 具备网络通信能力且网络环境较好的系统。3-2. 引导加载程序的执行过程1第一阶段关闭中断: 防止外界打扰bootloader的执行。基本硬件初始化: 包括处理器内部寄存器设置、系统基本参数设置、时钟初始化、存储器初始化存储器控制器设置、存储器自检、初始化Cache和存储器管理部件、关闭看门狗定时器等。初始化相关硬件设备: 如外设、通讯端口等。跳转到第二阶段: 第一阶段完成后跳转到第二阶段的C程序入口点继续执行。2第二阶段进一步系统初始化: 包括处理器初始化、板级初始化、中断初始化等。初始化本阶段硬件设备: 如采用下载模式需初始化通信端口。复制代码和文件系统: 如果在RAM中运行操作系统内核需将内核代码和根文件系统映像从ROM复制到RAM。传递启动参数: 向操作系统内核传递启动所需参数。调用内核代码: 完成操作系统初始化的最后准备启动操作系统。3-3. U-Boot简介Universal Bootloader功能强大、具有弹性、更新快、开放源码的通用bootloader。支持的处理器体系结构: PowerPC、ARM、MIPS系列、X86系列等。支持的嵌入式操作系统: Linux、VxWorks、NetBSD、QNX、RTEMS、ARTOS、LynxOS等。既支持启动加载模式也支持下载模式。4.设备驱动程序设备驱动程序是指直接与硬件相互作用并控制硬件的软件。从驱动程序调用者角度出发驱动程序是对硬件操作的抽象方便高层软件对硬件的访问。4-1. 设备驱动程序的功能初始化: 在系统上电或复位时初始化硬件。打开与关闭: 打开设备操作使设备处于工作状态关闭则停止工作。数据收发: 设备读取操作指从设备接收数据并提交给高层软件设备写入操作则把数据发送给设备数据收发可以采用查询、中断或DMA方式。状态查询与控制: 在设备使用过程中可能需要查询设备的当前工作状态并根据操作需求对设备进行控制。4-2. 设备驱动程序的实现方式小型嵌入式系统: 如μC/OS−11设备驱动程序包含在操作系统内核中无统一框架。大型嵌入式系统: 如WinCE、Linux、VxWorks等定义了统一的设备驱动程序框架。VxWorks: 允许应用程序绕过操作系统直接访问硬件。Linux等类Unix系统: 把I/O设备抽象成设备文件且驱动程序必须在内核态运行。4-3. VxWorks的I/O系统与设备驱动程序VxWorks操作系统由高性能硬实时微内核Wind、文件系统、I/O系统、网络协议栈和板级支持包(BSP)等组成。设备驱动程序部分:初始化部分: 初始化硬件并分配设备所需的资源。函数功能部分: 完成系统指定的功能即7个标准I/O函数的具体实现创建文件、打开文件、读取文件、写入文件、关闭文件、移除文件和其他控制命令。中断服务程序: 系统通过中断服务程序实现与外部事件的交互。5.嵌入式操作系统概述5-1. 嵌入式操作系统的特点代码固化存储时空效率高: 嵌入式操作系统必须结构紧凑代码经过优化后占用存储空间小通常固化在ROM中执行效率高。可裁剪性: 支持开放性和可伸缩性的体系结构可以根据需要添加或移除模块。实时性: 大多数嵌入式系统是实时系统且多是强实时、多任务系统。强稳定性弱交互性: 嵌入式操作系统具有较强的稳定性与用户的交互性较弱适用于长时间稳定运行的应用场景。硬件适应性: 能够在不同体系结构的多种硬件平台上运行具有可移植性。2. 嵌入式操作系统的分类方法按实时性分类:硬实时操作系统: 主要用于通信、军事、航天、控制等领域如VxWorks、RTEMS、QNX、μC/OS−II、Nucleus等。软实时或非实时操作系统: 主要用于类PC手持设备、家用电器、个人通信终端等如WinCE和多户嵌入式Linux等。按开发方式分类:专门为嵌入式环境开发的操作系统: 更多地应用在对系统可靠性和实时性等要求很高的领域。从通用计算机操作系统移植而来的操作系统: 非常适合在类PC嵌入式系统和消费类电子产品上使用如嵌入式Windows产品和许多嵌入式Linux产品。按商业模式分类:免费的嵌入式操作系统: 技术公开更新速度快但稳定性和技术支持一般较差如RTEMS、eCOS、FreeRTOS。商业嵌入式操作系统: 稳定性强可靠性高有完善的技术支持和售后服务但产品价格昂贵如VxWorks、μC/OS系列。6.Unix与Linux6-1. UnixUnix是商用支持多用户和多任务网络和数据库功能强大支持多种处理器架构。依靠可靠性高和可伸缩性突出等优势Unix在巨型计算机、服务器和工作站等多种硬件平台上均处于操作系统领域的主流地位。有商业版Unix如Solaris、UnixWare、AIX、HP-UX等技术上与Unix相似的系统包括Linux、QNX、V×Works、安卓、iOS等。6-2.自由软件1. 自由软件自由软件是不受限制地自由使用、复制、研究、修改和分发的软件。特点:必须是开源的使用者对软件有完全的掌控权。通常通过互联网发布且不收取任何费用。一旦按GPL授权发布将永远具有GPL授权。2. 免费软件免费软件是无需付费就可取得的软件。特点:可能有种种限制如功能受限、使用时间受限。不允许修改和分发。源代码一般不公开。与自由软件的区别:免费软件不一定是开源的而自由软件必须是开源的。免费软件可能带有商业性质有使用限制而自由软件强调使用者的自由和掌控权。免费软件发布时可能不收取费用但可能存在其他隐性成本或限制而自由软件则完全免费且无任何限制除了必须遵守GPL授权。6-3.Linux内核与Linux发行版Linux内核是操作系统的最核心部分。Linux发行版是为一般用户预先集成好的Linux操作系统内核及各种应用软件。内容包括系统安装工具、实用程序、命令行程序shell、图形用户界面、常用的应用软件以及其他的一些自由软件等。特点: 可移植性最好从游戏机、掌上计算机到大型机和巨型机都可以移植使用。实例: 最早也最有名的Linux发行版是GNU/Linux操作系统。7.嵌入式Linux操作系统7-1. Linux内核的结构与组成Linux是参照Minix开发的但并未采用Minix的微内核设计而是采用了与Unix相同的单内核结构。Linux支持动态装载内核模块和内核线程内核运行在单独的内核地址空间。用户空间包含工具软件、应用程序及GNU C运行库(GLIBC)内核空间则包括系统调用接口、初始化、调度器、存储管理、虚拟文件系统、网络、进程间通信、可加载内核模块、设备驱动程序等。1Linux的内核空间划分系统调用接口: 最上层是内核与应用程序进行交互的唯一接口应用程序通过系统调用访问内核中的特定函数。内核核心部分: 中间层负责管理系统资源、确保系统安全和隔离保护各个用户包含初始化组件、进程调度器、内存管理器、虚拟文件系统、设备驱动程序、进程间通信、可加载模块、网络接口等。BSP(Board Support Package): 最下层用于支持特定体系结构的处理器和特定的硬件平台如引导加载程序、DMA、MMU设置、中断处理等。2Linux内核组件之间的关系内存管理: 包括硬件无关和硬件相关部分。虚拟文件系统: 管理文件的保存并将所有设备和实际文件都虚拟成文件系统。进程调度: 核心部分围绕其展开所有工作负责创建、终止进程及进程间的调度。进程间通信: 包括信号量、缓冲、消息队列、管道等机制。网络接口: 负责数据的收发。6-2. Linux的实时化技术内核补丁方式: 保留了全部的Linux应用编程模式实时任务和普通的任务采用同样的编程方式并使用同样的API如MontaVista Linux。双内核方法: 在系统中增加微内核形态的第二个内核作为硬件与通用Linux内核间的抽象接口。超微内核方式: 硬件抽象层使实时内核和非实时内核之间由紧耦合关系变为松耦合关系提高系统稳定性和代码维护性如操作系统自适应域环境ADEOS。6-3. 嵌入式Linux操作系统的构建基于通用Linux内核构建:优点: 成本低、内核版本更新及时。缺点: 定制和裁剪工作量较大实时性相对较差。基于嵌入式Linux发行版构建:优点: 内核实时性高、定制和裁剪工作量小、针对性强、有专门团队的技术支持。缺点: 版本更新不一定及时成本较高。国内外嵌入式Linux发行版本:国际: uCLinux、RTLinux、MontaVista Linux, Wind River Linux等。国内: 中科院红旗嵌入式Linux、中软实时嵌入式Linux等。7.Android操作系统7-1. Android系统的特点Android是用于智能手机、平板电脑等移动设备的软件包。核心是基于Linux内核的半开放源代码操作系统。提供网络、绘图、3D处理能力带来更好的用户体验。免费的和开放的操作系统平台可增添特有装置或功能无须支付版税。应用程序兼容于运行Android的各种型号设备是完全开放的平台开发者拥有很大的自由度。7-2. Android系统的组成与结构架构: 采用堆层式软件架构从低层到高层分四层。Dalvik虚拟机: 强大的虚拟机实现跨平台操作依赖于内核的线程和内存管理。组件库: 提供大量功能组件如系统C库、媒体库等。开发语言: 底层为C语言开发上层应用可通过JAVA程序开发结合底层C和上层JAVA。8.IOS操作系统8-1. IOS操作系统概述iOS与MacOS X一样以类Unix的Darwin开源操作系统为基础属于类Unix的商业操作系统。系统架构分为四个层次核心操作系统层(Core OS layer)、核心服务层(Core Services layer)、媒体层(Media layer)、触控界面层(Cocoa Touch layer)。2. iOS应用开发iOS应用程序由用户代码和苹果公司提供的框架(Framework)组成。框架包含方法资源库是帮助应用程序完成各种特定功能的软件库。应用程序通过框架的应用编程接口(API)调用功能API指定可用的类、数据结构和协议。使用框架既省时省力又可确保代码高效、安全是访问底层硬件的唯一途径。9.μC/OS-II操作系统9-1. μC/OS-II的主要特点公开源码μC/OS-II的绝大部分代码是用ANSI C语言编写的公开源码高质量。可裁剪、可固化易于裁剪和固化方便嵌入到ROM中。时间确定性多任务抢占式内核对操作和事件的处理时间是确定的。多任务管理能管理64个任务其中8个给系统56个给用户。优先级不同每个任务的优先级是不同的以保证实时性。不支持时间片轮转不支持时间片轮转调度机制采用优先级调度。9-1-2. μC/OS-II系统的组成系统管理包括系统初始化、系统启动、中断管理、时钟中断系统管理等。任务管理包括任务创建、任务删除、任务挂起及任务恢复等。时钟管理包括时间延迟、时钟设置及时钟恢复等。任务同步与通信包括信号量、事件标志、互斥信号量、消息队列等。内存管理包括创建内存分区、申请或释放内存分区、获取分区信息等。处理器相关代码移植时针对特定处理器体系结构的代码。9-1-3. μC/OS-II的源代码主要组成系统核心μC/OS-II内核的核心代码。任务管理包含与任务管理相关的函数如任务创建、任务删除等。时钟管理包含与时间相关的函数如时间延迟等。任务同步与任务间通信包含信号量、事件标志等相关的函数。内存管理用于内存分区管理如创建内存分区等。处理器相关代码移植时针对特定处理器体系结构的代码。9-2. μC/OS-II的任务构成任务是操作系统的基本调度单位由操作系统内核管理。程序代码任务代码实际上是一个没有返回值的C函数。通常定义成一个void类型的指针允许用户程序传递任何类型的参数给任务。任务的返回值必须是void类型但任务永远不会返回。任务堆栈每个任务都有自己独立的栈空间。用于保存任务的工作环境。用户在创建任务时必须知道处理器的栈顶在低地址还是栈顶在高地址以确定栈的操作方式。每个任务的栈空间大小不同需根据任务特点进行区分。任务控制块 (TCB)用于保存任务状态和属性的数据结构。在任务创建时被初始化。多个任务的TCB构成双向循环链表便于查找和处理。如任务的状态、栈空间大小、参数等属性值都可以保存到TCB中。9-2-2.任务状态休眠态: 任务代码驻留在内存中但还没有交给内核调度的状态。调用创建任务函数可以把任务提交给内核管理。就绪态: 任务已经准备好可以运行但因优先级比正在运行的任务低而暂时不能运行的状态。运行态: 任务已经获得处理器使用权而正在运行的状态。任何时刻系统中只有一个任务处于运行状态。等待态: 也称挂起态正在运行的任务因等待某一事件发生而将处理器的使用权出让给其他任务而将自身挂起的状态。等待的事件可以是外设的I/O操作、事件信号量、共享资源被释放、超时时间到达等。被中断态: 因处理器执行中断服务程序而被暂停运行的任务状态。这是嵌入式系统中特有的状态。特点: 被中断态与等待态都是任务被暂停的状态但被中断态是因为执行中断服务程序而暂停的。状态转换:休眠态通过调用创建任务函数可以转换为就绪态。就绪态在获得处理器使用权后转换为运行态。运行态在遇到I/O操作、等待事件信号量等情况下转换为等待态在被中断服务程序抢占时转换为被中断态。等待态在等待的事件发生后不能直接进入运行态而要先进入就绪态再重新排队等待处理器使用权。被中断态在中断服务程序执行完毕后会返回到运行态或就绪态如果中断服务程序导致了任务优先级变化。9-2-3.任务调度μC/OS−11可以管理64个任务。用户任务最多可以有56个。系统任务:空闲任务: 每个应用系统必须使用系统总是把最低优先级固定赋给空闲任务当没有其他任务处于就绪态时运行。统计任务: 可选的统计任务每秒钟运行一次。临界区: 访问互斥资源你用了我就不能用时需要进入临界区。解决方法:关中断: 利用宏OS_ENTER_CRITICAL()OS()实现关中断和开中断使系统进入/退出临界状态。调度器上锁: 利用函数OSSchedLock()和OSSchedUnlock()给调度器上锁和解锁。调度算法:μC/OS−11采用基于优先级的调度算法选择当前所有就绪任务中最高优先级的任务转入运行态。任务切换: 发生任务级的任务调度时通过系统函数OSTASK_SW()进行任务切换保存当前任务的上下文并恢复新任务的上下文。9-2-4.μC/OS−II的中断处理步骤1保存全部CPU寄存器: 这是中断处理的第一步也称为保存上下文确保中断服务程序执行完后能恢复到原来的执行状态。2OSIntEnter(): 调用此函数将全局变量OSIntNesting加1标识进入中断状态并允许中断嵌套。3执行用户中断服务代码: 根据中断类型执行相应的中断服务程序。4OSIntExit(): 中断服务结束后调用此函数准备退出中断。5恢复所有CPU寄存器: 恢复之前保存的CPU寄存器也称为恢复上下文。6执行中断返回指令: 最后执行中断返回指令使程序回到中断发生前的执行点。注意事项中断嵌套:μC/OS−II允许中断嵌套嵌套层数可达255层但实际应用中通常不会达到这么多层。中断处理中的限制: 在中断处理过程中不允许进行任务管理、事件管理及任务调度的操作。必须调用OSIntExit(): 在中断返回之前必须调用OSIntExit()函数以确保正确地退出中断状态并恢复系统状态。9-3.μC/OS-II的系统服务9-3-1. 任务管理服务任务的标识是优先级INT8U prio。任务创建可在调用OSStart()之前创建。也可在其他任务运行过程中创建。不能由中断服务程序创建。任务删除是使任务转入休眠状态不再被内核调度。函数OSTaskDel()可删除任务自身或其他任务。任务挂起与恢复:调用OSTaskSuspend()挂起任务。调用OSTaskResume()恢复被挂起的任务。如果任务在挂起时正在等待延时挂起操作将被取消。9-3-2. 时钟节拍与时间管理服务用户必须在调用OSStart()启动多任务调度以后再开启时钟节拍器。调用OSStart()之后的第一件事是初始化定时器中断。任务延时:运行态任务可通过调用OSTimeDly()或OSTimeDlyHMSM()延迟一段时间。延时参数包括小时(0255)、分钟(059)、秒(059)和毫秒(0999)。实际延时时间是时钟节拍的整数倍。任务唤醒:如果任务因调用OSTimeDly()或OSTimeDlyHMSM()进入延时等待状态其他任务可调用OSTimeDlyResume()将其唤醒。9-3-3. 任务间通信与同步服务概述通信方法:信号量、消息邮箱、消息队列、互斥信号量mutex、事件标志组事件控制块ECB:任务或中断服务程序可通过ECB向其他任务发出信号。任务可在ECB上等待其他任务或中断服务程序发送信号。注意: 中断服务程序不能等待信号。任务挂起与就绪:当任务因等待信号而被挂起时当前优先级最高的就绪态任务将获得处理器控制权。事件发生后被挂起的任务转入就绪态。优先级反转:互斥信号量用于实现共享资源的独占访问。可解决优先级反转问题。9-4.μC/OS-II应用程序设计9-4-1. 初始化与main函数结构内核初始化: 在使用内核提供的任何功能之前必须先调用OSInit()函数进行内核初始化。OSInit()对内核使用的所有变量和数据结构进行初始化并创建空闲任务OS_TaskIdle()并使之处于就绪态。多任务调度启动: 函数OSStart()将启动多任务调度并从就绪态任务中选择最高优先级的任务转入运行态。因此在主函数main()调用OSStart()之前必须至少创建一个用户任务。9-4-2. μC/OS-III增加的主要特性时间片轮转调度: μC/OS-III提出了时间片轮转调度方法。内核对象数量无限制: 内核对象的数量没有限制如信号量等在增加和减少时可以无限制实际实现时仍有一定要求。任务级时钟节拍处理: 时钟节拍处理更加细致到每个任务里面是任务级的。处理器体系结构优化: 可以对程序进行优化使执行速度更快主要涉及到从汇编等低级语言来实现微操作或比较等。时间戳增强: 提供16位时间戳使实时性体现得更好。内置性能测试功能增强: 使整个系统在应用到测试时都一体化。