计算机三级嵌入式学习笔记(四)

第四章-嵌入式系统软件

考纲与考点分析

嵌入式系统软件

  1. 嵌入式系统的软件组成与实时操作系统(嵌入式系统软件组成,嵌入式操作系统的发展,实时系统与实时操作系统,嵌入式操作系统的内核结构等);
  2. 板级支持包(BSP)、引导加载程序BootLoader和设备驱动程序(硬件抽象层HAL,BSP的功能和移植,BootLoader的执行过程,U-boot及其移植,设备驱动程序的实现等);
  3. 嵌入式Linux操作系统(Linux内核,嵌入式Linux的结构组成与实时化技术,常见嵌入式Linux发行版等);
  4. 嵌入式操作系统uC/OS-II(基本特点、代码结构、任务管理与调度、系统服务、应用程序设计等)。

考点分析

  • 常考知识点:
    • 了解嵌入式软件的特点和结构,理解HAL、BSP、引导加载程序和设备驱动程序的概念及原理
    • 了解嵌入式操作系统的基本概念、特点、分类、主流产品
    • Linux操作系统的基础知识、Android操作系统特点、IOS操作系统的组成结构
    • uC/OS-II操作系统内核的基本特征与任务结构
    • 了解主流嵌入式操作系统的主要特点与适用领域

考点1 嵌入式系统的软件组成

1、嵌入式软件的特点

  • 软件具有较长的生命周期
  • 软件代码时空效率要高,实时性要求高
  • 软件可裁剪,尽可能去除冗余
  • 软件应用环境复杂,安全性和可靠性要求高
  • 软件开发难度大
  • 软件面向用户、面向产品、面向应用,受限于功能和具体应用环境
  • 软件产品高度分散
  • 软件与硬件一体化,软件固化存储

2、嵌入式系统的软件结构

  • 简单的轮询结构
    • 在低端嵌入式系统中,处理器的处理能力低,存储容量小,系统功能简单,通常只实现一些简单的控制操作。这种嵌入式系统不需要操作系统支持,应用软件直接在裸机上运行
    • 特点
      • 程序结构简单,便于编程
      • 由于没有中断机制,因而不会出现程序随机切换带来的潜在问题
      • 只适用于系统的任务量少,任务简单且实时性要求不高的场景
  • 带中断的轮询结构
    • 也被称为中断驱动结构或前后台结构
    • 特点
      • 与简单的轮询结构相比,中断驱动结构提高了系统对紧急事件的响应速度,可并发处理不同的异步事件
      • 在一些小型的简单嵌入式系统中应用广泛
      • 由于中断的引入使得系统软件复杂度明显提高
  • 监控式操作系统+应用软件的结构
    • 减少开发时间,降低系统的复杂性,保障软件质量
    • 如车载导航设备的应用软件
    • 特点
      • 与应用软件直接在裸机上运行的简单轮询结构相比,引入操作系统增加了系统开销
      • 嵌入式操作系统结构允许多个任务在一个CPU上并发运行
      • 降低了用户开发嵌入式软件的复杂度,并有效保证系统的实时性和可维护性
  • 通用嵌入式操作系统+应用软件的结构
    • 嵌入式系统软件通常可分为硬件抽象层(驱动层)、操作系统层中间件层
      • 中间件软件是指除了操作系统内核、设备驱动程序和应用软件之外的系统软件
      • 中间件是具有标准程序接口和协议的通用服务
      • 选择嵌入式系统软件结构的一个基本原则是:选择可以满足响应时间需求的最简单的结构

考点2 硬件抽象层与板级支持包

1、硬件抽象层(HAL)和板级支持包(BSP)的概念

  • HAL和BSP都是嵌入式系统的底层软件

硬件抽象层的概念

  • HAL是操作系统层与硬件之间设置的独立的接口软件层,是所有直接依赖于硬件的软件
  • 引入HAL的目的是对硬件进行抽象,使上层软件开发人员无需关心底层硬件的具体细节和差异,并且支持上层软件在不同体系结构和硬件平台之间的移植

板级支持包的概念

  • BSP可以看成是硬件抽象层在特定操作系统环境下的具体实现。有的文献不区分HAL和BSP,将二者当成同义词
  • BSP的特点是既有硬件相关性,又有软件相关性
  • BSP规范是OS相关的,支持不同OS的BSP的组织结构、想上层提供的功能以及服务接口定义都不同
  • BSP代码则必须针对特定硬件专门编写
  • BSP与硬件平台直接相关,BSP的调试有最小系统的调试和外围设备驱动程序的调试

BSP的功能

  • 系统复位时的硬件初始化,包括处理器芯片的初始化和电路板的初始化
  • 引导加载操作系统
  • 为操作系统提供硬件相关的驱动程序支持

2、HAL和BSP实例

NiOS II HAL

  • Altera公司推出的32位哈佛结构用户可配置的通用RISC软核处理器,用于支持在FPGA器件上实现可编程片上系统(SoPC)
  • 最大优势是模块化的硬件结构,以及由此带来的灵活性和可裁剪性
  • HAL系统库提供的服务包括
    计算机三级嵌入式学习笔记(四)_第1张图片

Windows Embedded Compact 7(WEC7)

  • 微软公司专门为小型网络设备设计的安全、组件化的实时操作系统,WEC7由三层构成,分别为最顶层的应用和服务,下一层的操作系统内核交互,在硬件和内核层之间的就是BSP
    计算机三级嵌入式学习笔记(四)_第2张图片

考点3 引导加载程序

1、引导加载程序(BootLoader)的概念和功能

  • BootLoader是底层软件的一部分,嵌入式系统上电复位后首先运行引导加载程序。它负责系统的上电自检、硬件初始化、建立存储空间映射、配置系统参数、建立上层软件的运行环境,并加载和启动操作系统系统加电后,CPU执行的第一条指令就是BootLoader程序中的第一条指令,这条指令一般会存储在某种类型的固态存储设备上
  • BootLoader依赖于具体的硬件结构,一般而言支持不同的硬件结构的程序有不同的版本
  • 复杂的BootLoader程序还支持简单的用户命令交互、设置操作系统启动参数、Flash ROM编程下载、读写内存、系统自检、硬件调试等监控程序(monitor)功能

2、嵌入式操作系统的引导加载方式

计算机三级嵌入式学习笔记(四)_第3张图片

3、引导加载程序的执行过程

  • 启动过程可以是单阶段,也可是多阶段,后者提供更复杂的功能和更好的可移植性。但是大多数是两阶段执行过程
  • 第一阶段
    • 关闭中断
    • 处理器内部的基本寄存器设置、系统基本参数设置、时钟初始化
    • 存储器初始化,包括存储器控制器的设置、存储器自检、初始化Cache和存储器管理部件、关闭看门狗定时器
    • 初始化相关的硬件设备
    • 第一阶段的功能完成后,程序将跳转到第二阶段的C程序入口点继续执行
  • 第二阶段
    • 进一步完成系统初始化任务,包括处理器初始化、板级初始化、中断初始化等
    • 初始化本阶段要使用到的硬件设备
    • 如果在RAM中运行操作系统内核,则需将内核代码和根文件系统映像从ROM存储器复制到RAM存储器,为内核执行提供合适的上下文环境
    • 向操作系统内核传递启动参数
    • 调用内核代码

4、U-Boot简介

  • 全称Universal BootLoader,U-Boot是公认的功能最强、最具弹性以及更新最快的开放源码BootLoader,是遵循GPL条款的代码资源最完整的一个通用BootLoader
  • U-Boot支持的处理器体系结构有PowerPC、ARM、MIPS系列、X86系列等处理器
  • U-Boot支持的嵌入式操作系统有Linux、VxWorks、QNX、NetBSD、RTEMS、ARTOS、LynxOS等
  • 它既支持启动加载模式,也支持下载模式

考点4 设备驱动程序的概念

1、设备驱动程序的概念

设备驱动程序的概念

  • 从功能方面看,设备驱动程序(是指直接与硬件相互作用并控制硬件的软件)
  • 从驱动程序调用者角度出发,驱动程序是对硬件操作的抽象,方便实现高层软件对硬件的访问
  • 不同的系统,驱动程序的概念有所不同,但是驱动程序的基本特性大致可以概括为
    • 只能被高层软件调用而无法自行运行
    • 对上层软件屏蔽硬件细节,对下层硬件直接进行操作

设备驱动程序的功能

  • 设备初始化
    • 初始化操作在系统上电或复位时初始化硬件
  • 设备打开(激活)和关闭
    • 打开设备操作使设备处于工作状态
  • 设备读取和写入(即数据收发)
    • 设备读取操作指从设备接收数据并提交给高层软件,设备写入操作则把数据发送给设备,数据收发可以采用查询、中断或DMA方式
  • 设备状态查询和设备控制操作
    • 在设备使用过程中,可能需要査询设备的当前工作状态,并根据操作需求对设备进行控制

2、设备驱动程序的实现方式

  • 小型的嵌入式操作系统如uC/OS-II只包括操作系统内核,包括设备驱动程序,且编写设备驱动程序无统一框架
  • 大型嵌入式操作系统如WinCE、Linux、VxWorks等中,定义了统一的设备驱动程序框架,VxWorks除了通过标准驱动程 序接口访问硬件外,允许应用程序绕过操作系统直接访问硬件
  • Linux等类Unix操作系统还会把I/O设备抽象成设备文件
  • 很多操作系统不允许运行在用户态的应用程序直接访问物理端口,因而要求驱动程序必须在内核态(内核模式)运行,用户的应用程序必须通过驱动程序才能访问硬件

3、VxWorks的I/O系统与设备驱动程序

  • VxWorks操作系统由高性能实时内核Wind、文件系统、I/O系统、网络协议栈和板级支持包组成
  • BSP、网络驱动程序和驱动程序等构成硬件抽象层
  • 设备驱动程序包括如下三个部分
    计算机三级嵌入式学习笔记(四)_第4张图片

考点5 实时系统与实时操作系统

1、实时系统

实时系统的概念

  • 实时系统(Real-Time System)是必须在有限和确定的时间内对外部事件作出响应的信息系统
  • 时限(deadline)是实时系统追求的最重要指标,分为相对时限和绝对时限
  • 评判实时系统的关键并不是系统对外部事件的处理速度,而是处理事件的时间的可预见性和确定性

实时系统中运行的任务类型

  • 实时系统中运行的任务可根据时限对系统性能的影响程度分为三种类型
    计算机三级嵌入式学习笔记(四)_第5张图片
  • 注意
    • 硬实时、软实时与准实时的概念与时限的长短没有关系,而与其对超过时限的容忍程度有关。相对软实时系统,硬实时系统的时限并不一定更短。实时系统是由硬件和软件组成的完整系统,硬件和软件必须协同配合,共同支持系统对实时性的要求

实时系统与嵌入式系统的关系

  • 嵌入式系统与实时系统既有区别又相互联系
  • 嵌入式系统并不都是实时系统,而实时系统也不都是嵌入式系统
  • 通用计算机系统经过特殊配置后也可以完成实时控制功能。因此可以说实时嵌入式系统是嵌入式系统与实时系统的交集

实时系统的特征

  • 时间约束性
    • 保证在规定的时限内完成相应任务是实时系统设计的关键。外部数据的获取处理和数据的输出都必须在截止时间之前完成
  • 可预测性
    • 可预测性包括硬件延迟的可预测性,也包括软件执行时间的可预测性
  • 可靠性
    • 在非实时系统中,偶尔故障可通过重启系统来解决。可靠性在实时系统中比非实时系统中更重要
  • 交互性
    • 实时系统必须与外部环境实现良好的协同与交互

2、实时操作系统(Real-Time Operating System,RTOS)的概述

  • 实时系统必须在规定的时间内正确地完成任务,完成任务的时间与硬件、操作系统和应用软件都有关系
    • 能够满足实时系统需求的操作系统就是实时操作系统
  • 实时操作系统最关键的特性就是完成每次任务所需时间的一致性
    • 如果一个实时操作系统能够完全满足确定性的时限要求,则称为硬实时操作系统,否则称为软实时操作系统。
    • 另一种说法,实时系统按时间响应的快慢有强实时系统、普通实时系统、弱实时系统
  • 实时操作系统大多采用如下机制来保证对实时任务的响应和处理的时间确定性
    计算机三级嵌入式学习笔记(四)_第6张图片

3、实时操作系统的实时性指标

计算机三级嵌入式学习笔记(四)_第7张图片

考点6 嵌入式操作系统概述

1、嵌入式操作系统的特点

  • 代码固化存储,时空效率高
    • 嵌入式操作系统必须结构紧凑,代码占用存储空间小,执行效率高
  • 可裁剪性
    • 支持开放性和可伸缩性的体系结构
  • 实时性
    • 大多数嵌入式系统都是实时系统,而且多是强实时、多任务系统
  • 强稳定性,弱交互性
    • 嵌入式操作系统具有较强的稳定性与用户的交互性较弱
  • 硬件适应性
    • 运行在不同体系结构的多种硬件平台上,有可移植性

2、嵌入式操作系统的分类

  • 实时性分类
    • 硬实时操作系统
      • 主要用于通信、军事、航空控制等领域
      • VxWorks、RTEMS、QNX、uC/OS-II、Nucleus
    • 软实时或非实时操作系统
      • 主要用于类PC手持设备、家用电器、个人通信终端、智能移动电话、机顶盒、MP3/MP4播放器、家庭媒体网关、WinCE、多户嵌入式
  • 开发方式分类
    • 专为嵌入式环境开发的嵌入式操作系统
      • 更多地应用在对系统可靠性和实时性要求很高的军用产品、通信系统、工业控制领域等
    • 从通用计算机操作系统移植而来的嵌入式操作系统
      • 非常适合在类PC嵌入式系统和消费类电子产品上使用、嵌入式Windows产品、嵌入式Linux产品
      • 智能手机、机顶盒
  • 商业模式分类
    • 免费的嵌入式操作系统
      • 这类软件技术公开,研究者众多,更新速度快,开发资源丰富,但稳定性和技术支持一般较差
      • RTEMS、eCOS、FreeRTOS
    • 商业嵌入式操作系统
      • 这类通稳定性最强、可靠性高,有完善的技术支持和售后服务,但产品价格昂贵
      • VxWorks、uC/OS系列
      • 有些商业系统(如uC/OS系列)只收取每种产品一次性费用,风河公司的VxWorks既按开发版本的授权数量收取授权费,也按最终产品售出的实际数量收取每份运行软件的版权费

3、嵌入式操作系统的内核结构

  • 是操作系统中的一组核心程序模块,作用是管理系统资源、支持多任务并发执行,具有访问硬件设备和所有主存空间的权限,是系统中仅有的能够执行特权指令的程序。操作系统的内核结构分成两类:单内核和微内核

单内核(宏内核)结构

  • 有些操作系统把内核的各个功能模块(如进程管理、文件系统、设备管理、网络通信等)整合在一起,模块间的交互通过直接调用其他模块中的函数来实现,执行效率高,性能好
    计算机三级嵌入式学习笔记(四)_第8张图片
  • 优点
    • 性能较好,系统调用,功能切换和通信开销比较小
  • 缺点
    • 即使不使用的功能组件和设备驱动程序也常驻在内存中,占用资源较多,维护工作量大
  • 单内核结构的操作系统有
    • 传统的Unix、BSD Unix、Linux、MS-DOS、Windows 9x、Windows CE、Android、WinCE、Mac OS

微内核结构

  • 操作系统仅将必需的基本功能(如任务调度、任务间通信、低级存储管理、中断处理等 放人内核,它们运行在核心态;其他功能都在内核之外,由在用户态运行的服务来完成,这种做法使内核的结构很小
    计算机三级嵌入式学习笔记(四)_第9张图片
  • 优点
    • 内核精巧,结构紧凑,占用内存少
    • 开发和维护方便,系统可以动态更新服务模块
    • 接口一致,用户态任务不需要区分是内核级服务还是用户级服务
    • 可扩展性与可配置性强,很合嵌入式系统的可裁剪要求
    • 可靠性高,各服务进程在用户态运行,有自己的内存空间
    • 支持分布式系统,服务器可以在不同的处理机上运行
  • 缺点
    • 效率较低、性能相对较差,因为通信和上下文切换的开销大大增加
  • 微内核结构的操作系统有
    • AIX、Mach、Minix、VxWorks、QNX、Symbian、uC-OS-II、iOS
  • 分层和模块化相结合的结构将操作系统分为应用软件层、中间件层、操系统层和硬件抽象层,每层再划分功能 模块,移植工作集中在硬件抽象层

4、常用嵌入式操作系统简介

  • VxWorks(风河公司)
    • 针对嵌人式环境开发的商用嵌入式实时操作系统,可靠性高、实时性强开发环境友好
    • VxWorks采用微内核结构,内核仅提供多任务环境、任务间通信和同步功能
    • 广泛应用在通信、军事、航空、航天等高新技术及实时性,如卫星通信、弹道制导、飞机导航等
    • VxWorks操作系统支持PowerPC、68K、CPU32、i9060、x86、MIPS等多种嵌入式处理器体系结构
  • QNX(QNX软件系统公司)
    • 是一款商业分布式、可扩充的实时操作系统
    • 应用在汽车领域、网络通信、核电站和无人驾驶坦克的控制系统,RIM公司的BlackBerry PlayBook平板计算机等
    • 其内核仅提供4种服务:进程调度、进程间通信、底层网络通信和中断处理
    • QNX同时支持进程和线程两种任务实现方式,保证了基于QNX的应用系统稳定、可靠、强壮
  • Nucleus PlUS(Mentor Graphics/ATI公司)
    • 又称Nucleus RTOS,是ATI公司为实时嵌入式应用而设计的抢占式多任务商业操作系统内核
    • 微内核非常小巧,便于移植
  • 嵌入式Windows(微软公司)
    • 主流产品可划分为嵌入式操作系统(EOS)和设备平台(device platforms)两类
    • 基于Windows Phone 8平台的Windows Embedded 8 Handheld(手持版)是由于手持设备的设备平台
  • RTEMS(GPL开源的无版税嵌入式实施操作系统)
    • 属于微内核抢占式实时系统,非常稳定且运行速度快,占用系统资源少,支持多处理器,提供完整的TCP/IP协议栈以及FTP、Webserver、NFS等服务
    • 在通信、航空航天、工业控制,军事等领域有着非常广泛的应用
  • TinyOS无线传感器网络操作系统(加州大学伯努利分校)
    • 开源嵌入式操作系统,专门为硬件资源极为有限的无线传感器网络应用而量身定制
    • 拥有两级调度和轻量级线程技术
    • 操作系统基于组件架构,包括网络协议、分布式服务器和传感器驱动组件,以及一些可以在收集数据时使用的应用工具
    • 技术特点:轻线程、主动消息、事件驱动和组件化编程
  • eCOS
    • 主要应用于低成本和便携式的消费电子、电信、车载设备和手持设备等
  • FreeRTOS
    • 完全免费且源码公开,是一个轻量级的开源迷你实时操作系统内核
    • 具备可移植、可裁减、调度策略灵活等特点,其内核小巧,占用存储空间少,因而可以方便地移植到各种单片机上运行

考点7 Linux内核

1、Unix与Linux

Unix概述

  • Unix支持多用户和多任务,网络和数据库功能强大,支持多种处理器架构,依靠可靠性高和可伸缩性突出等优势在巨型计算机、服务器和工作站等多种硬件平台上均处于操作系统领域的主流地位
  • Unix作为主流的操作系统,有商业版Unix如Solaris、UnixWare、AIX、HP-UX等。技术上与Unix相似的,包括Linux、QNX、VxWorks、安卓、iOS等

Linux概述

  • 类Unix系统中最著名的是Linux,起源于芬兰赫尔辛基大学的学生林纳斯•托瓦兹
  • Linux没使用任何版本Unix的源码,而是完全重新编写,Linux成功模仿Unix系统,具有Unix操作系统的全部功能。Linux的源代码与Unix的源代码是完全不同的,尽管函数和命令的功能、处理结果、函数名称和参数十分相同,以及Unix的行命令、驱动程序和应用程序在Linux上能够运行
  • Linux是一种自由软件,它的源代码始终公开对于不同体系的CPU,Linux内核的源代码各不相同
  • 2011年7月,Linux内核3.0版正式发布;2014年2月最新内核的稳定版本是3.13.2

2、Linux与自由软件

自由软件

  • 不受限制地自由使用、复制、研究、 修改和分发的软件
  • 自由软件必定是开源软件
  • 软件的使用者有掌控该软件的自由
  • 大部分自由软件通过互联网发布且不收取任何费用
  • 自由软件一旦按GPL授权发布,它将永远具有GPL授权

免费软件

  • 无需付费就可取得的软件
  • 通常带有种种限制,例如功能受限、使用时间受限、不允许修改和分发
  • 软件源码也不一定公开

3、Linux内核与Linux发行版

  • 通常所说的“Linux操作系统”是指Linux发行版,是为一般用户预先集成好的Linux操作系统内核及各种应用软件
  • 一个典型的Linux发行版除Linux内核之外,还包括系统安装工具、实用程序、命令行程序shell、图形用户界面、 常用的应用软件以及其他的一些自由软件等
  • Linux发行版最早也最有名的是GNU/Linux操作系统。它是可移植性最好的操作系统内核,从游戏机、掌上计算机到大型机和巨型机都可以移植使用

考点8 嵌入式Linux操作系统

1、Linux内核的结构与组成

Linux内核结构

  • Linux是参照Minix开发的,但Linux并没有采用Minix使用的微内核设计,而是采用了与Unix相同的单内核结构
  • Linux支持动态装载内核模块和内核线程,Linux内核运行在单独的内核地址空间
  • GNU/Linux操作系统的基本组织结构
    计算机三级嵌入式学习笔记(四)_第10张图片

Linux内核空间大致划分成三个层次

  • 最上层是系统调用接口,是内核与应用程序进行交互的唯一接口
    • 应用程序或GLIBC通过系统调用访问内核中的特定函数
  • 中间层是内核的核心部分,它的主要功能是管理系统资源、确保系统安全和隔离保护各个用户
    • 内核中有初始化组件、进程调度器、内存管理器、虚拟文件系统、设备驱动程序、进程间通信、可加载模块、网络接口
  • 最下层是BSP,这部分代码用于支持特定体系结构的处理器和特定的硬件平台
    • 例如引导加载程序,以及与DMA、MMU设置、中断处理相关的代码等

Linux内核组件之间的关系

计算机三级嵌入式学习笔记(四)_第11张图片

2、Linux的实时化技术

Linux内核的改造方式

  • 内核补丁方式
    • 保留了全部的Linux应用编程模式,实时任务和普通的同样的编程方式并使用同样的API
    • 实例如MontaVista Linux
  • 双内核方式
    • 在系统中增加微内核形态的第二个内核,并作为硬件与通用Linux内核间的抽象接口
  • 超微内核方式
    • 硬件抽象层使得实时内核和非实时内核之间由紧耦合关系变为松耦合关系,对系统的稳定性以及代码维护都非常有利
    • 实例如操作系统自适应域环境ADEOS

3、嵌入式Linux操作系统的构建

  • 基于通用Linux内核构建嵌入式Linux
    • 优点是成本低、内核版本更新及时
    • 缺点是定制和裁剪工作量较大,且实时性相对较差
  • 基于嵌入式Linux发行版构建嵌入式Linux
    • 优点是内核的实时性高、定制和裁剪工作量小、针对性强、有专门团队的技术支持等
    • 缺点是版本更新不一定及时,成本较高
    • 国内外嵌入式Linux发行版本众多,国际上比较有代表性的有uCLinux、RTlinux、MontaVista Linux、Wind River Linux等产品,国内也有中科院红旗嵌入式Linux、中软实时嵌入式Linux等

考点9 Android操作系统

1、Android系统的特点

  • Android是用于智能手机、平板电脑等移动设备的软件包,其核心是以Linux内核为基础的半开放源代码操作系统
  • 对移动设备用户来说,Android平台提供的网络、绘图、处理能力可以带来更好的用户体验
  • 对移动设备制造商来说,Android是一个免费的和开放的操作系统平台,设备制造商可在这个平台随意增添特有的装置或功能,且无须为售出的每台设备支付版税
  • 对移动设备的应用开发者来说,平台上的应用程序可以兼容于运行Android的各种型号的设备
  • Android是一个对第三方软件完全开放的平台,开发者拥有很大的自由度

2、Android系统的组成与结构

  • Android系统采用堆层式软件架构,从底层到高层分四层
    计算机三级嵌入式学习笔记(四)_第12张图片

考点10 IOS操作系统

1、IOS操作系统概述

  • IOS与MacOS X一样,都是以类Unix的Darwin开源操作系统为基础的,因此IOS也属于类Unix的商业操作系统
  • IOS的系统架构分成四个层次
    • 核心操作系统层(Core OS layer)
    • 核心服务层(Core Services layer)
    • 媒体层(Media layer)
    • 触控界面层(Cocoa Touch layer)
      计算机三级嵌入式学习笔记(四)_第13张图片

2、IOS应用开发

  • 在IOS系统中,应用程序由用户代码和苹果公司提供的框架(Framework)组成,框架包含方法资源库,是帮助应用程序完成各种特定功能的软件库
  • 应用程序通过框架的应用编程接口(API)调用这些功能,API指定可用的类、数据结构和协议,使用框架既省时省力,又可确保代码高效、安全,而系统框架则是访问底层硬件的唯一途径

考点11 uC/OS-II操作系统特点

1、uC/OS-II的主要特点

计算机三级嵌入式学习笔记(四)_第14张图片

2、uC/OS-II系统的组成

计算机三级嵌入式学习笔记(四)_第15张图片

3、uC/OS-II的源代码主要组成

计算机三级嵌入式学习笔记(四)_第16张图片

考点12 uC/OS-II任务及其管理

1、uC/OS-II的任务构成

  • uC/OS-II中,任务是操作系统的基本调度单位,由操作系统内核管理,任务之间使用系统服务进行同步与通信

uC/OS-II的任务构成

  • 程序代码
    • 任务代码实际上是一个没有返回值的C函数
    • 任务函数的入口参数,通常定义成一个void类型的指针,允许用户程序传递任何类型的参数给任务
    • 任务的返回值必须是void类型,但任务永远不会返回
  • 任务堆栈
    • 每个任务都有自己独立的栈空间,用于保存任务的工作环境
    • 用户在创建任务时必须知道处理器的栈顶在低地址还是栈顶在高地址
    • 每个任务的栈空间大小不同
  • 任务控制块(TCB)
    • 用于保存任务状态和属性的数据结构,在任务创建时被初始化
    • 多个任务的TCB构成双向循环链表

2、uC/OS-II的任务状态

  • 休眠态(Dormant)
    • 任务代码驻留在内存中但还没有交给内核调度的状态
    • 调用创建任务函数可以把任务提交给内核管理
  • 就绪态(Ready)
    • 任务已经准备好,可以运行,但因优先级比正在运行的任务低而暂时不能运行的状态
  • 运行态(Running)
    • 任务已经获得处理器使用权而正在运行的状态
    • 任何时刻系统中只有一个任务处于运行状态
  • 等待态(Waiting)
    • 也称挂起态(pending),正在运行的任务因等待某一事件发生而将处理器的使用权出让给其他任务而将自身挂起的状态
    • 等待的事件可以是外设的I/O操作、事件信号量、共享资源被释放、超时时间到达等
  • 被中断态(Interrupted)
    • 因处理器执行中断服务程序而被暂停运行的任务状态

3、uC/OS-II的任务调度

  • uC/OS-II可以管理64个任务,用户任务最多可以有56个。uC/OS-II预定义了两个系统任务为应用程序服务:
    • 空闲任务:每个应用系统必须使用空闲任务,系统总是把最低优先级固定赋给空闲任务,该任务在没有其他任务 处于就绪态时运行
    • 统计任务:可选的统计任务每秒钟运行一次
  • 当前程序进入临界区时,不希望系统进行任务调度和处理器转入中断服务程序,在uC/OS-II中有两种解决方法:
    • 利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()实现关中断和开中断
      • OS_ENTER_CRITICAL()使系统进入临界状态
      • OS_EXIT_CRITICAL()则实现退出临界状态
  • 注意:
    • uC/OS-II采用基于优先级的调度算法,任务调度时,内核选择当前所有就绪任务中最高优先级的任务转入运行态
    • 发生任务级的任务调度时,内核通过系统函数OS_TASK_SW()进行任务级的任务切换,保存当前任务的上下文,并恢复新任务的上下文

4、uC/OS-II的中断处理

计算机三级嵌入式学习笔记(四)_第17张图片

考点13 uC/OS-II的系统服务

1、uC/OS-II的任务管理程序

  • uC/OS-II通过以下系统函数进行任务管理,并以优先级(INT8U prio)作为任务的标识
  • 任务创建
    • 任务可以在调用OSStart()之前创建,也可在其他任务的运行过程中被创建,但不能由中断服务程序创建
    • 函数OSTaskCreate()和OSTaskCreateExt()都可以创建任务
  • 任务删除
    • 删除任务的操作将使任务转入休眠状态,不再被内核调度
    • 函数OSTaskDel()既可以删除任务自身,也可以删除其他任务
  • 任务挂起与任务恢复
    • 调用OSTaskSuspend()函数可以挂起一个任务,而被挂起的任务只能等待其他任务调用OSTaskResume()函数才能实现任务恢复
    • 如果任务在被挂起时正在等待延时,则挂起操作将被取消

2、uC/OS-II的时钟节拍与时间管理服务

  • 用户必须在调用OSStart()启动多任务调度以后再开启时钟节拍器,且在调用OSStart()之后做的第一件事就是初始化定时器中断
  • 处于运行态的任务可以通过调用函数OSTimeDly()或OSTimeDlyHMSM()延迟一段时间。运行态任务将在调用函数之后转入等待状态,直到等待的时间到达(超时)后,OSTimeTick()将使该任务转入就绪态
  • 参数hours、minutes、seconds和milli分别为延时时间的小时数(0~255)、分钟数(0~59)、秒数(0~59)和毫秒数(0~999)。实际的延时时间是时钟节拍的整数倍
  • 如果某个任务因调用函数OSTimeDly()或OSTimeDlyHMSM()而进人延时等待状态,其他任务可以调用void OSTimeDlyResume(INT8U prio)将其唤醒

3、uC/OS-II的任务间通信与同步服务概述

  • uC/OS-II中,在任务间共享数据和实现任务间通信的方法:信号量、消息邮箱和消息队列、互斥信号量(mutex)和事件标志组
  • 任务或者中断服务程序可以通过事件控制块(ECB)向其他任务发出信号。任务也可以在ECB上等待其他任中断服务程序向其发送信号务或 但中断服务程序不能等待信号
  • 当任务因等待信号而被挂起时,当前优先级最高的就绪态任务将立即得到处理器的控制权。该事件发生后,被挂起的任务将转入就绪态
  • 说明:
    • 多个任务可以同时等待同一事件的发生
    • 当该事件发生后,所有等待该事件的任务中优先级最高的任务 将获得该信号并转入就绪状态
    • 互斥信号量通常用于实现对共享资源的独占访问,还可以解决优先级反转问题
    • 函数OSSemPost()释放信号量,函数OSSemPend()用于等待一个信号量

uC/OS-II操作系统中用于保护任务间的共享数据并支持任务之间的通信的方法

  • 利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()实现关中断和开中断
  • 利用函数OSSchedLock()和OSSchedUnlock()对uC/OS-II中的任务调度函数上锁和开锁
  • 利用信号量(OS_EVENT_TYPE_SEM)、互斥信号量(OS_EVENT_TYPE_MUTEX)、邮箱(OS_EVENT_TYPE_MBOX)或消息队列(OS_EVENT_TYPE_Q)进行任务间通信

考点14 uC/OS-II应用程序设计

1、uC/OS-II的初始化与main()函数结构简介

  • 使用内核提供的任何功能之前,必须先调用OSInit()函数进行内核初始化
  • OSInit()内核使用的所有变量和数据结构进行初始化,创建空闲任务OS_TaskIdle()并使之处于就绪态
  • 函数OSStart()将启动多任务调度,并从就绪态任务中选择最高优先级的任务转入运行态,故在主函数main()调用OSStart()之前必须至少创建一个用户任务

2、uC/OS-III增加的主要特性

  • 时间片轮转调度
  • 内核对象的数量无限制
  • 任务级的时钟节拍处理
  • 可针对处理器体系结构进行优化
  • 时间戳
  • 增强的内置性能测试功能

你可能感兴趣的:(#,计算机三级嵌入式学习笔记)