1.嵌入式系统结构分层
(1)硬件层
(2)驱动层
(3)操作系统层
(4)应用层
1.1 硬件层
硬件平台是基础,增值还要靠软件。
作为一名嵌入式软件工程师,应能够看懂硬件原理图,这一部分在这里提到过,可从以下三方面入手:
- 芯片复位方式
- 硬件复位方式
- 软件复位方式
- 电源树
- 开发板的电源输入
- 电源供电器件
- 5V 电压供电器件
- 3.3V 电压供电器件
- MCU 引脚配置
- GPIO:搞清楚GPIO与器件连接情况、输入输出状态、是否产生中断等
- I2C
- UART
1.2 驱动层
硬件的运行需要配置寄存器等读写操作,这也是我们在工程中看到 xxx_driver.cpp 所要实现的功能。
最基本的,例如通过I2C对器件寄存器进行读写。
1.3 操作系统层
对于功能较复杂的项目而言,操作系统只需移植现有系统即可,如FreeRTOS、ucOSII、CMSIS-RTOS等。
对于STM32处理器,处理相对简单的任务时,可自行编写操作系统,利用系统时钟计时,在不同的时间片内处理不同的任务。
1.4 应用层
应用层是在开发环境中实现产品功能的逻辑代码和算法等。
2. 硬件抽象层和板级支持包
除了上述分层提到的概念,还可能听说过 硬件抽象层(HAL)和 板级支持包(BSP)。
嵌入式实时系统作为一类特殊的计算机系统自底向上包含三个部分:
(1)硬件环境:是整个嵌入式实时操作系统实时应用程序运行的硬件平台;不同的应用通常有不同的硬件环境;硬件平台的多样性是嵌入式系统的一个主要特点。
(2)嵌入式实时操作系统——RTOS:完成嵌入式实时应用的任务调度和控制等核心功能,具有内核较精简、可配置、与高层应用紧密关联等特点。嵌入式操作系统具有相对不变性。
(3)嵌入式实时应用程序:运行于操作系统之上,利用操作系统提供的实时机制完成特定功能的嵌入式应用。不同的系统需要设计不同的嵌入式实时应用程序。
板级支持包BSP( Board Support Package)就是硬件驱动程序,它包含了操控硬件的必要函数,单片机系统使用BSP可以直接进行应用开发,这时候应用开发的hierarchy如下图所示:
但是由于日益增长的芯片种类和芯片复杂度,直接使用BSP进行应用开发将会受到巨大的挑战,因此为了程序的可阅读性以及可移植性提出了硬件抽象层 HAL这一个概念。
原先嵌入式系统的三层结构逐步演化成为一种四层结构。这个新增加的中间层次位于操作系统和硬件之间,包含了系统中与硬件相关的大部分功能。
通过特定的上层接口与操作系统进行交互,向操作系统提供底层的硬件信息;并根据操作系统的要求完成对硬件的直接操作。由于引入了一个中间层次,展蔽了底层硬件的多样性,操作系统不再直接面对具体的硬件环境。而是面向由这个中间层次所代表的、逻辑上的硬件环境。因此,把这个中间层次叫做硬件抽象层HAL(Hardware Abstraction Layer)。
因此一个完整、强健的嵌入式系统的系统hierarchy应该为:
hardware --> board support package --> hardware abstract layer --> driver --> operating system --> application