嵌入式软件基础知识(一)
嵌入式软件特点:
- 实时性要求:嵌入式系统通常需要在严格的时间约束下执行任务,对实时性要求较高。这意味着嵌入式软件必须能够在预定的时间内响应和处理输入,确保系统能够及时地对外部事件作出反应
- 资源受限:嵌入式系统通常具有有限的资源,包括处理器性能、内存容量、存储空间和功耗等。因此,嵌入式软件必须高效地利用有限的资源,尽可能地减少资源消耗,提高系统的性能和效率
- 实时调度:嵌入式软件通常需要采用实时调度算法,以确保任务按照预定的优先级和时间要求进行调度和执行。实时调度算法可以保证关键任务在规定的时间内完成,同时最大限度地提高系统的响应速度和稳定性
- **低功耗:**许多嵌入式系统需要在电池供电或有限的能源环境下运行,因此嵌入式软件需要设计以最小化功耗,延长系统的续航时间,提高系统的能效
- 实时通信:嵌入式系统通常需要进行实时通信和数据交换,与外部设备或其他系统进行数据传输和交互。因此,嵌入式软件需要具有良好的通信能力和稳定性,确保数据的实时传输和可靠性
嵌入式软件分类:
- 系统软件(System Software):
系统软件是直接运行在计算机硬件上,用于管理和控制计算机系统硬件资源的软件。它们提供了计算机操作系统和相关的系统服务,为上层应用程序提供了运行环境和基础设施支持
-
支撑软件(Middleware):
支撑软件是介于系统软件和应用软件之间的软件层,用于提供各种通用功能和服务,帮助开发人员构建和部署应用程序。支撑软件通常提供了一系列的接口、工具和库,简化了应用程序的开发和部署过程,提高了系统的可扩展性和灵活性
-
应用软件(Application Software):
应用软件是用户直接使用的软件程序,用于实现特定的应用功能和任务。应用软件通常是根据用户的需求和特定领域的要求定制开发的,可以是通用的办公软件,也可以是针对特定行业或领域的专业软件
嵌入式软件体系结构:
无操作系统:
特点:
- 硬件配置较低,系统应用主要集中在控制领域
- 嵌入式软件的设计以应用为核心,应用软件直接建立在硬件上
实现方式:
- 循环轮转
- 前后台系统(循环轮转加入中断处理功能)
循环轮转方式:
**定义:**种常见的调度算法,通常用于多任务系统中。在循环轮转调度算法中,每个任务都被分配一个时间片(或时间量),并按照固定的顺序依次执行。当一个任务的时间片用完时,调度器将切换到下一个任务继续执行,直到所有任务都执行完毕,然后重新开始新的轮回
**优点:**公平性;简单性;实时性;高吞吐量
**缺点:**响应时间不确定;长任务处理不及时;任务切换开销;无法严格满足实时性要求;没有优先级
前后台系统:
**定义:**将循环轮转调度算法应用于同时具有前台(Foreground)和后台(Background)任务的系统,则可以根据任务的优先级或重要性来确定每个任务的执行顺序和时间片分配
**前台程序:**中断服务程序,负责处理异步事件
**后台程序:**一个无线循环,负责资源分配、管理和系统调度
系统运行时,后台程序会检查每个任务是否具备运行条件,对实时性要求严格的操作通常由中断完成
有操作系统:
**优点:**抽象硬件;多任务支持;资源管理;增加可靠性和稳定性;降低开发成本和提高开发效率;有利于系统扩展和移植
层级结构:
- 硬件层:硬件层是嵌入式系统的基础,包括处理器、内存、输入输出设备等硬件组件。这些硬件组件提供了系统的基本功能和资源,但需要操作系统来管理和控制
- 操作系统和设备驱动层:操作系统内核是嵌入式系统的核心部分,负责管理硬件资源和提供基本的系统服务。内核包括任务管理器、内存管理器、设备驱动程序等模块,用于实现任务调度、内存分配、设备控制等功能
- 中间层:中间层位于操作系统内核层之上,包括文件系统、网络协议栈、通信机制等模块。文件系统负责管理系统中的文件和目录,网络协议栈用于实现网络通信,通信机制用于实现任务之间的通信和数据交换
- 应用层:应用层位于系统的最顶层,包括用户应用程序和用户接口。用户应用程序是嵌入式系统的实际功能模块,根据具体的应用需求编写。用户接口用于与用户交互,包括命令行界面、图形用户界面等
设备驱动层
**定义:**直接与硬件打交道,对硬件进行管理和控制,为上层软件提供所需的驱动支持,类型PC系统中BIOS和驱动程序;BSP(Board Support Package)是设备驱动层的一部分,它负责提供特定硬件平台的支持和抽象。
BSP:
- 把嵌入式操作系统与具体的硬件平台隔离开
- 把所有和硬件相关的代码封装起来,向上提供一个虚拟平台,操作系统运行在这个虚拟的硬件平台上
- 操作系使用一组定义好的编程接口来与BSP交互,并通过BSP来访问真正硬件
BSP包含内容:
-
设备驱动程序:
BSP包含了针对特定硬件平台的设备驱动程序,包括处理器、内存、外设(如GPIO、UART、SPI、I2C等)、网络接口等设备的驱动程序。这些驱动程序负责初始化硬件设备并提供接口供操作系统和应用程序调用
-
引导加载程序(Bootloader):
引导加载程序是一个小型的程序,负责在系统上电后加载操作系统或应用程序到内存中并启动执行。BSP通常包含了针对特定硬件平台的引导加载程序
-
中断控制器和定时器配置:
BSP负责配置中断控制器和定时器,以便操作系统和应用程序能够正确地处理硬件中断和定时事件
-
内存管理:
BSP提供了对内存资源的管理和抽象,包括内存映射、内存分配和内存保护等功能。这些功能确保操作系统和应用程序能够有效地使用系统中的内存资源
-
时钟配置:
BSP负责配置系统时钟,包括处理器时钟、总线时钟、外设时钟等。时钟配置的正确性对系统的稳定性和性能至关重要
-
板级支持文件:
BSP通常包含了针对特定硬件平台的板级支持文件,包括硬件手册、原理图、数据手册等文档,以便开发人员了解硬件平台的详细信息
Bootloader 系统启动主要过程:
-
片级初始化(Chip-level Initialization):
片级初始化是指对处理器及其内置外设进行初始化的过程
a.初始化处理器:设置处理器的工作模式、时钟频率和各种控制寄存器;
b.初始化内置外设:对处理器内置的外设(如GPIO、UART、SPI、I2C等)进行初始化,以便后续的系统操作和外设访问
c.初始化外部存储器接口:如果系统使用外部存储器(如SD卡、NAND Flash等),Bootloader可能还会初始化外部存储器的控制器和接口
-
板级初始化(Board-level Initialization):
板级初始化是指对整个硬件板级系统进行初始化的过程,确保整个硬件系统处于正确的工作状态。在板级初始化阶段,Bootloader会执行以下操作
a.初始化外部外设:对硬件板上的外部外设(如LCD、网络接口、存储设备等)进行初始化,包括设置工作模式、配置寄存器等
b.设置时钟和中断:配置系统时钟和中断控制器,以确保系统能够正常工作,并为后续的系统操作做好准备
c.初始化其他硬件资源:如配置电源管理单元、设置外部引脚状态等
-
加载内核(Load Kernel):
加载内核是指将操作系统内核加载到系统内存中,并启动执行的过程。在加载内核阶段,Bootloader会执行以下操作:
a.从存储介质中读取内核镜像:Bootloader从存储介质(如闪存、SD卡、网络等)中读取操作系统内核的镜像文件
b.加载内核到内存中:将内核镜像加载到系统内存的指定位置,通常是将内核镜像复制到内存的特定地址
c.启动内核执行:在内核加载完成后,Bootloader会跳转到内核的入口地址,并传递必要的参数,启动内核的执行
基本概念:
基本功能:
- 软件开发角度来看:将底层的硬件封装起来。为运行在它上面的软件 提供一个抽象的编程接口,即操作系统对外提供的系统调用函数
- 从系统管理的角度:把嵌入式操作系统看成系统资源的管理者,负责管理系统当中的各种软硬件资源
内核:
*定义:*内核是操作系统的核心组成部分,负责管理系统的硬件资源和提供基本的系统服务。它通过任务管理、内存管理、文件系统、设备驱动、系统调用、中断处理等功能,实现了操作系统对硬件的控制和对用户程序的支持,是整个操作系统的基础和核心