嵌入式实时操作系统:基于ARM Mbed OS的应用实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 实时操作系统的基本含义

实时操作系统是一种应用于嵌入式系统的系统软件,学习实时操作系统可以从了解其基本功能开始。本节首先简要介绍嵌入式系统的基本分类,随后阐述无操作系统(No Operating System,NOS)与实时操作系统下程序运行流程的区别,由此初步了解实时操作系统的基本功能,最后介绍实时操作系统与非实时操作系统的主要差异。

1.1.1 嵌入式系统的基本分类

嵌入式系统,即嵌入式计算机系统,它是不以计算机面目出现的计算机。这类计算机隐含在各种具体产品之中,在这些产品中,计算机程序发挥着核心作用。主要的嵌入式产品有手机、平板电脑、冰箱、工业控制系统、农业大棚控制系统、月球车等。应用于嵌入式系统的处理器,被称为嵌入式处理器。嵌入式处理器按其应用范围可以分为电子系统智能化(微控制器)和计算机应用延伸(应用处理器)两大类。

1.微控制器

一般来说,微控制器(Microcontroller Unit,MCU)与应用处理器的主要区别在于可靠性、数据处理量、工作频率等方面。相对应用处理器来说,微控制器的可靠性要求更高、数据处理量较小、工作频率较低。电子系统智能化类的嵌入式系统,主要用于嵌入式人工智能终端、物联网终端、工业控制、现代农业、家用电器、汽车电子、测控系统、数据采集等,这类应用所使用的嵌入式处理器一般被称为微控制器。这类嵌入式系统产品从形态上看,更类似于早期的电子系统,但其内部,计算机程序起核心控制作用。本书阐述的实时操作系统主要面向微控制器。

2.应用处理器

应用处理器类的嵌入式系统,主要用于平板电脑、智能手机、电视机顶盒、企业网络设备等,这类应用所使用的嵌入式处理器一般被称为应用处理器或多媒体应用处理器(Multimedia Application Processor,MAP),多在非实时操作系统下进行编程。

1.1.2 无操作系统与实时操作系统

在嵌入式产品开发中,可以根据硬件资源、软件复杂程度、可移植性需求、研发人员的知识结构等各个方面综合考虑是否使用操作系统,若使用操作系统,应选择哪种操作系统。

1.无操作系统下程序运行流程

在无操作系统的嵌入式系统复位后,首先进行堆栈、中断向量、系统时钟、内存变量、部分硬件模块等初始化工作,然后进入无限循环。在这个无限循环中,CPU根据一些全局变量的值决定执行各种功能程序(线程),这是第一条运行路线。若发生中断,将响应中断,执行中断服务程序(Interrupt Service Routines,ISR),这是第二条运行路线,执行完ISR后,返回中断处继续执行。从操作系统的调度功能的视角来理解,无操作系统中的主程序可以被简单地理解为一个实时操作系统内核,这个内核负责系统初始化和调度其他线程。

2.实时操作系统下程序运行流程及其基本功能

本书主要阐述面向嵌入式人工智能与物联网领域的实时操作系统的应用方法与原理。在基于实时操作系统的编程模式下,有两条线路:一条是线程线,编程时把一个较大工程分解成几个较小的工程(被称为线程或任务),由调度者负责这些线程的执行;另一条线路是中断线,与无操作系统情况类似,若发生中断,将响应中断,执行中断服务程序,然后返回中断处继续执行。

可以进一步理解为,实时操作系统是一个标准内核,包括芯片初始化、设备驱动及数据结构的格式化。软件开发工程师可以不直接对硬件设备和资源进行操作,而是通过标准调用方法实现对硬件的操作,所有的线程都由实时操作系统内核负责调度。也可以这样理解,实时操作系统是一段嵌入目标代码中的程序,系统复位后首先执行它,用户的其他应用程序(线程)都建立在实时操作系统之上。不仅如此,实时操作系统将CPU时间、中断、I/O、定时器等资源都封装起来,留给用户一个标准的应用程序编程接口(Application Programming Interface,API),并根据各个线程的优先级,合理地在不同线程之间分配CPU时间。实时操作系统的基本功能可以简单地概括为,实时操作系统为每个线程建立一个可执行的环境,方便线程间传递消息,在中断服务程序与线程之间传递事件,区分线程执行的优先级,管理内存,维护时钟及中断系统,并协调多个线程对同一个I/O设备的调用。简而言之,实时操作系统负责线程管理与调度、线程间的同步与通信、存储管理、时间管理、中断处理等工作。

3.实时操作系统的应用场合

一个具体的嵌入式系统产品是否需要使用操作系统,使用何种操作系统,必须根据系统的具体要求做出合理的决策,这就依赖于对系统的理解和所具备的操作系统知识。是否使用操作系统,可以从以下几个方面来考虑。

第一,系统是否复杂到必须需要使用操作系统的程度。

第二,硬件是否具备足够的资源来支撑操作系统的运行。

第三,是否需要并行运行多个较复杂的线程,线程间是否需要进行实时交互。

第四,应用层软件的可移植性是否能得到更好的保证。

此外,如果决定使用操作系统,那么选择哪一种操作系统呢?是否是实时操作系统?这还要从性能、熟悉程度、是否免费、是否有产品使用许可、是否会出现收费陷阱等角度考虑。

本书阐述的Mbed OS是由ARM公司于2014年推出的一款免费的开源嵌入式实时操作系统。

1.1.3 实时操作系统与非实时操作系统

我们知道,操作系统(Operating System,OS)是一套用于管理计算机硬件与软件资源的程序,是计算机的系统软件。通常,我们使用的个人计算机系统,在硬件上一般由主机、显示屏、鼠标、打印机等组成。操作系统提供设备驱动管理、进程管理、存储管理、文件系统、安全机制、网络通信及使用者界面等功能,这类操作系统有Windows、Mac OS、Linux等。

嵌入式操作系统(Embedded Operating System,EOS)是一种工作在嵌入式微型计算机上的系统软件。一般情况下,它固化到微控制器或应用处理器内的非易失存储体中,它具有一般操作系统最基本的功能,负责嵌入式系统的软、硬件资源的分配、线程调度、同步机制、中断处理等。

嵌入式操作系统有实时与非实时之分。一般情况下,应用处理器使用的嵌入式操作系统对实时性要求不高,这类操作系统主要有Android、iOS、嵌入式Linux等。而以微控制器为核心的嵌入式系统,如工业控制设备、军事设备、航空航天设备、嵌入式人工智能与物联网终端等,大多对实时性的要求较高,希望能够在较短的确定时间内完成特定的系统功能或中断响应,应用于这类系统的操作系统就是实时操作系统。

相对于实时操作系统而言,适合应用处理器的嵌入式操作系统一般不再追求实时性指标,这类操作系统主要有:最初由Andy Rubin开发,2005年后由Google持续改进的Android,在智能手机中得到广泛应用;于2007年首发的、由苹果公司推出的iOS操作系统等。而实时操作系统中,实时性是其关注的重点,这类操作系统主要有:于2014年首发的、由ARM公司出品的Mbed OS;于2003年首发的、由亚马逊公司资助的FreeRTOS;于1992年首发的、由Jean Labrosse持续改进的μC/OS;于1989年首发的、后由NXP公司推出的MQX;上海睿赛德电子科技有限公司于2006年发布的RT-Thread(Real Time-Thread)等。

与一般运行在个人计算机或服务器上的通用操作系统相比,实时操作系统的突出特点是实时性。一般的通用操作系统(如Window、Linux等)大都是从“分时操作系统”发展而来的。在单中央处理器(Central Processing Unit,CPU)的条件下,分时操作系统的主要运行方式是,对于多个线程,CPU的运行时间被分为多个时间段,并且将这些时间段平均分配给每个线程,让每个线程轮流运行一段时间,或者每个线程独占CPU一段时间,如此循环,直到完成所有线程为止。这类操作系统注重所有线程的平均响应时间,而较少关注单个线程的响应时间。对单个线程来说,其注重每次执行的平均响应时间,而不关注某次特定执行的响应时间。在实时操作系统中,要求能“立即”响应外部事件的请求,这里的“立即”含义是相对于一般操作系统而言的,即在更短的时间内响应外部事件。与通用操作系统不同,实时操作系统注重的不是系统的平均表现,而是要求每个线程在最坏情况下都要满足其实时性。也就是说,实时操作系统注重的是个体表现,更准确地讲是个体在最坏情况下的表现。