嵌入式软件与操作系统

2022-09-15 From 程序之心 By 丁仪

嵌入式软件

嵌入式软件是指应用在嵌入式计算机系统当中的各种软件,除了具有通用软件的一般特性,还具有一些与嵌入式系统相关的特点,包括规模小、开发难度大、实时性要求高、可靠性要求高、要求固化存储。

嵌入式软件分类

系统软件:控制和管理嵌入式系统资源,为嵌入式应用提供支持的各种软件,如设备驱动程序、嵌入式操作系统、嵌入式中间件等。

应用软件:嵌入式系统中的上层软件,定义了嵌入式设备的主要功能和用途,并负责与用户交互,一般面向特定的应用领域,如飞行控制软件、手机软件等;

支撑软件:辅助软件开发的工具软件,如系统分析设计工具、在线仿真工具、交叉编译器等。

设备驱动层

设备驱动层又称为板级支持包 BSP,是嵌入式系统软件的一部分,包含了嵌入式系统中所有与硬件相关的代码,直接与硬件打交道,对硬件进行管理和控制,并为上层软件提供所需的驱动支持。

BSP是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统的一部分,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好地运行于硬件主板。不同的操作系统对应于不同定义形式的 BSP,接口定义和写法可能完全不同。

BSP 一般包括引导加载程序 BootLoader 和设备驱动程序,主要功能包括:

  1. 单板硬件初始化,主要是 CPU 的初始化,为整个软件系统提供底层硬件支持
  2. 为操作系统提供设备驱动程序和系统中断服务程序
  3. 定制操作系统的功能,为软件系统提供一个实时多任务的运行环境
  4. 初始化操作系统,为操作系统的正常运行做好准备。

板级支持包(BSP)一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置等功能,它主要具有以下两个特点。

  1. 硬件相关性,因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软件与硬件平台之间的接口,BSP需为操作系统提供操作和控制具体硬件的方法。
  2. 操作系统相关性,不同的操作系统具有各自的软件层次结构,因此不同操作系统具有特定的硬件接口形式。
一般来说,BSP主要包括两个方面的内容:引导加载程序BootLoader和设备驱动程序。


引导加载程序

BootLoader 是嵌入式系统加电后运行的第一段软件代码,是在操作系统内核运行之前运行的程序,主要功能是初始化硬件设备、建立内存空间的映射图,从而将软硬件环境设置到合适的状态,为最终调用操作系统内核做好准备,一般包括如下功能:

  1. 片级初始化:完成微处理器的初始化,包括设置微处理器的核心寄存器、控制寄存器、核心工作模式及其局部总线模式等。把微处理器从上电默认状态设置为系统要求的工作状态,是纯硬件的初始化过程。
  2. 板级初始化:正确地设置各种寄存器的内容来完成微处理器以外的其他硬件设备(如定时器、LED、中断控制器、串口、内存控制器、内存空间映射等)的初始化。还需要设置某些软件的数据结构和参数,是一个同时含有软件和硬件的初始化过程。
  3. 加载内核(系统级初始化):将操作系统和应用程序的映像从 flash 存储器复制到系统的内存中,然后跳转到系统内核的第一条治疗继续执行。

设备驱动程序

在一个嵌入式系统中,操作系统是可有可无的,设备驱动程序是必不可少的。设备驱动程序是一组库函数,用来对硬件进行初始化和管理,并向上层软件提供良好的访问接口。大多数驱动程序具有如下功能:

  1. 硬件启动:在开机上电或系统重启时对硬件进行初始化
  2. 硬件关闭:把硬件设置为关机状态
  3. 硬件停用:暂停使用硬件
  4. 硬件启用:重新启用硬件
  5. 读写操作:读写数据

嵌入式操作系统

嵌入式操作系统(EOS,Embedded Operating System)是用于嵌入式系统的操作系统。

操作系统通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。

嵌入式操作系统复制嵌入式系统的全部软硬件资源的分配、任务调度、控制、协调并发活动,体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。

目前广泛使用的嵌入式操作系统有 μC/OS-II、Linux、VxWorks、Android、iOS等。具有如下特点:

  1. 系统内核小。一般用于小型电子装置,系统资源相对有限,所以内核比传统的操作系统小。
  2. 专用性强。个性化很强,软件与硬件紧密结合,一般要针对硬件系统进行移植,常常需要增减。针对不同的任务,编译要和系统相结合,往往需要进行进行较大的更改。
  3. 系统精简。嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能设计及实现过于复杂,一方面控制系统成本,同时也利于系统安全。
  4. 高实时性。高实时性的系统软件是嵌入式软件的基本要求,而且软件要求固态存储,以提高速度,软件代码要求高质量和高可靠性。
  5. 多任务的操作系统。为了合理地调度多任务、利于系统资源、系统函数以及专用库函数接口,必须自行选择操作系统开发平台,保证程序执行的实时性、可靠性。

嵌入式实时操作系统

嵌入式实时系统是一种完全嵌入受控器件内部,为特定应用而设计的专用计算机系统。在嵌入式实时系统中,要求系统在投入运行前即具有确定性和可预测性。

可预测性是指系统在运行之前,其功能、响应特性和执行结果是可预测的;

确定性是指系统在给定的初始状态和输入条件下,在确定的时间内给出确定的结果。

对嵌入式实时系统失效的判断,不仅依赖其运行结果的数值是否正确,也依赖提供结果是否及时。

实时操作系统(RTOS)的特点

当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,并控制所有实时任务协调一致运行。提供及时响应和高可靠性是其主要特点。

实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完成操作即可。

实时操作系统的特征

1、高精度计时系统。

计时精度是影响实时性的一个重要因素。在实时应用系统中,经常需要精确确定实时地操作某个设备或执行某个任务,或精确的计算一个时间函数。这些不仅依赖于一些硬件提供的时钟精度,也依赖于实时操作系统实现的高精度计时功能。

2、多级中断机制。

一个实时应用系统通常需要处理多种外部信息或事件,但处理的紧迫程度有轻重缓急之分。有的必须立即作出反应,有的则可以延后处理。需要建立多级中断嵌套处理机制,以确保对紧迫程度较高的实时事件进行及时响应和处理。

3、实时调度机制。

实时操作系统不仅要及时响应实时事件中断,同时也要及时调度运行实时任务。但是,处理机调度并不能随心所欲的进行,因为涉及到两个进程之间的切换,只能在确保“安全切换”的时间点上进行,实时调度机制包括两个方面,一是在调度策略和算法上保证优先调度实时任务;二是建立更多“安全切换”时间点,保证及时调度实时任务。因此,实际上来看,实时操作系统如同操作系统一样,就是一个后台的支撑程序,可以按照实时性的要求进行配置、裁剪等。其关注的重点在于任务完成的时间是否能够满足要求。

嵌入式软件设计

开发流程

宿主机与目标机

嵌入式软件开发不同于传统软件开发,其所使用的开发环境、工具都有特殊性,在嵌入式软件开发中,一般使用宿主机和目标机的模式进行系统开发,并且借助于开发工具进行目标开发。

交叉编译

嵌入式软件开发所采用的编译为交叉编译。所谓交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。编译的最主要的工作就在将程序转化成运行该程序的CPU所能识别的机器代码,由于不同的体系结构有不同的指令系统。不同的CPU需要有相应的编译器,而交叉编译就如同翻译一样,把相同的程序代码翻译成不同CPU的对应可执行二进制文件。

由于一般通用计算机拥有非常丰富的系统资源、使用方便的集成开发环境和调试工具等,而嵌入式系统的系统资源非常紧缺,无法在其上运行相关的编译工具,因此,嵌入式系统的开发需要借助宿主机(通用计算机)来编译出目标机的可执行代码。

交叉调试

嵌入式软件经过编译和链接后即进入调试阶段,调试是软件开发过程中必不可少的一个环节,嵌入式软件开发过程中的交叉调试与通用软件开发过程中的调试方式有很大的差别。在常见软件开发中,调试器与被调试的程序往往运行在同一台计算机上,调试器是一个单独运行着的进程它通过操作系统提供的调试接口来控制被调试的进程。

而在嵌入式软件开发中,调试时采用的是在宿主机和目标机之间进行的交叉调试,调试器仍然运行在宿主机的通用操作系统之上,但被调试的进程却是运行在基于特定硬件平台的嵌入式操作系统中。调试器和被调试进程通过串口或者网络进行通信,调试器可以控制、访问被调试进程,读取被调试进程的当前状态,并能够改变被调试进程的运行状态。

开发工具

嵌入式软件的开发可以分为几个阶段:编码、交叉编译、交叉调试。各个阶段工具如下:

编辑器

用于编写嵌入式源代码程序,从理论上来说,任何一个文本编辑器都可以用来编写源代码。各种集成开发环境会提供功能强大的编辑器,如vs系列、eclipse、keil、css等。常见的独立编辑器:UE、Source Insight、vim等。

编译器gcc

编译阶段的工作是用交叉编译工具处理源代码,生成可执行的目标文件,在嵌入式系统中,由于宿主机和目标机系统不一样,需要使用交叉编译,GNUC/C++(gcc)是目前常用的一种交叉编译器,支持非常多的宿主机/目标机组合。

gcc是一个功能强大的工具集合,包含了预处理器、编译器、汇编器、连接器等组件,会在需要时去调用这些组件来完成编译任务。

调试器gdb

在开发嵌入式软件时,交叉调试是必不可少的一步。嵌入式软件调试特点:

  • 调试器运行在宿主机上,被调试程序运行在目标机上;
  • 调试器通过某种通信方式与目标机建立联系,如串口、并口、网络、JTAG等;
  • 在目标机上一般有调试器的某种代理,能配合调试器一起完成对目标机上运行程序的调试,可以是软件或支持调试的硬件。

gdb是GNU开源组织发布的一个强大的程序调试工具。

本文来源:程序之心,转载请注明出处!

君子曰:学不可以已。
《分布式算法精髓》
互联网是一个分布式系统,无线通信、云计算或并行计算、多核系统、移动网络也是如此。蚁群、大脑甚至人类社会都可以被建模为分布式系统。本书强调这些分布式系统中共同涉及的主题和技术,特别是强调分布式系统设计中的一些基本问题,涵盖通信、协调、容错性、本地性、并行性、打破对称性、同步化、不确定性等。
发表感想

© 2016 - 2024 chengxuzhixin.com All Rights Reserved.

浙ICP备2021034854号-1    浙公网安备 33011002016107号