目录
前言
嵌入式3层软件架构
嵌入式4层软件架构-1
驱动层
操作系统层
中间件层
应用层
嵌入式4层软件架构-2
硬件层
嵌入式微处理芯片
嵌入式存储器系统
嵌入式I/O接口
中间层
系统软件层
RTOS
文件系统
GUI
应用层
嵌入式5层软件架构1
嵌入式5层软件架构2
嵌入式6层软件架构
个人软件架构
MCU抽象层(MCU Abstract Layer)
硬件驱动层(Hardware Driver Layer)
功能模块层(Functional Module Layer)
应用层(Application Layer)
疫情带来的灾难,使得世界处于不稳定状态,全球缺芯片成为常态。对从事单片机和嵌入式底层的开发人员来增加很多的工作量,若是不注重代码分层或者分层不好的将是多么痛苦,老项目换芯片换个不停,新项目做好几套芯片方案。若有良好的分层思想,将是减少很多工作量!
最初的单片机开发语言是汇编语言,但汇编语言会随着单片机种类的不同而不同。程序设计起来难度较大。后来人们改用C语言作为单片机程序设计的通用语言。这种不依赖于机器硬件的语言,可以方便的在各类单片机系统中移植,极大的加快了单片机程序开发的时间。这是单片机从语言上进行分层带来便利。像PC 、手机等标准化产品已进行了系统性的标准分层。对于其他嵌入式产品行业分层架构方式较多,源于行业的标准化程度及行业特性决定!但整体思想是一致的。
本文罗列了市面常见的分层架构。对于复杂的系统产品分层方式较为统一,因为有人研究和专业的架构师岗位,以及产品标准化程度高。像单片机裸机软件分层架构相对较弱,因为硬件资源有限,分层越细会占用空间;项目简单,每个人都有自己的思想,没有统一的去研究;产品种类复杂标准化弱。不过还是有共性的,只是单片机裸机项目功能相对单一,分层不要过于太细,层级分的太多,隔离的太彻底,有时候反而增加了无谓的损耗,3~5层即可。
硬件层 | 嵌入式微处理器存储器,通用设备接口,io接口 |
中间层 | 底层硬件的初始化,数据的输入/输出操作,硬件设备的配置文件 |
软件层 | 多任务操作系统,文件系统,图形用户接口,网络系统,通用组件模块 |
嵌入式系统的软件体系是面向嵌入式系统特定的硬件体系和用户要求而设计的,是嵌入式系统的重要组成部分,是实现嵌入式系统功能的关键。嵌入式系统软件体系和通用计算机软件体系类似,分成驱动层、操作系统层、中间件层和应用层等四层,各有其特点。
驱动层是直接与硬件打交道的一层,它为操作系统和应用提供硬件驱动或底层核心支持。在嵌入式系统中,驱动程序有时也称为板级支持包(BSP)。BSP具有在嵌入式系统上电后初始化系统的基本硬件环境的功能,基本硬件包括微处理器、存储器、中断控制器、DMA、定时器等。驱动层--般可以有三种类型的程序,即板级初始化程序、标准驱动程序和应用驱动程序。
嵌入式系统中的操作系统具有一般操作系统的核心功能,负责嵌入式系统的全部软硬件资源的分配、调度工作控制、协调并发活动。它仍具有嵌入式的特点,属于嵌入式操作系统(Embedded Operating System,EOS)。主流的嵌入式操作系统有Windows CE、Palm:OS、Linux、VxWorks.pSOS.QNX.LynxOS等。有了嵌入式操作系统,编写应用程序就更加快速、高效、稳定。
中间件是用于帮助和支持应用软件开发的软件,通常包括数据库、网络协议、图形支持及相应开发工具等,例如:MySQL、TCP/IP、GU1等都属于这一类软件。
嵌入式应用软件是针对特定应用领域,用来实现用户预期目标的软件。嵌入式应用软件和普通应用软件有一定的区别,它不仅要求在准确性、安全性和稳定性等方面能够满足实际应用的需要,而且还要尽可能地进行优化,以减少对系统资源的消耗,降低硬件成本。嵌入式系统中的应用软件是最活跃的力量,每种应用软件均有特定的应用背景。尽管规模较小,但专业性较强,所以嵌入式应用软件不像操作系统和支撑软件那样受制于国外产品,是我国嵌入式软件的优势领域。
硬件层的结构如下:
嵌入式的硬件层主要分为三个部分:嵌入式微处理芯片、嵌入式存储系统 和 嵌入式 I/O 接口。
主要包括:嵌入式微处理器、嵌入式微控制器、嵌入式数字信号处理器、嵌入式片上系统等;嵌入式微处理器与通用 CPU 最大的区别在于将 CPU 中需要需要外部设备来完成的任务集成到了芯片内部。
主要包括:程序存储器、数据存储器和参数存储器,主要以 Cache、ROM、RAM、Flash、SD卡等;
嵌入式系统与外接交互所需要的通用设备接口,通常为:
中间层也称为硬件抽象层(Hardware Abstract Layer,HAL) 或者叫板级别支持包(Board Support Package,BSP),位于硬件层和软件层之间,用于连接软件层和硬件层。
系统软件层通常包括实时多任务操作系统(Real-Time Operation System, RTOS)、文件系统、图像用户接口(Graphic User Interface,GUI)、网络系统、通用组件模块。其中, RTOS 是嵌入式应用软件的基础和开发平台。
RTOS 的作用:
RTOS 的特点:
RTOS 和 应用软件被固化在嵌入式计算机的 ROM 中;
嵌入式文件系统建立在 RTOS 之上,一般提供如下功能:
文件系统的特点:
GUI 为人机交互提供了非常人性化的接口。嵌入式GUI 与 PC 上的 GUI 有着明显的不同,嵌入式的 GUI 具有如下特点:
应用层软件就是根据实际需求开发的应用软件。嵌入式应用软件主要有以下特点:
简写 (英文全称) |
名称 | 内容 | 说明 |
HAL (Hardware Abstract Layer) |
硬件抽象层 | 内核驱动,主要是对SFR的配置,并将其封装起来。 | 硬件抽象层和硬件驱动层则是项目需求书中的功耗等硬件相关的需求变动而改变,若子功能的增加而硬件不支持,则也需更换硬件驱动。比如项目中的数据储存功能,硬件支持有AT24C02、W25Q128和芯片本身的FLASH,都可以支持数据储存功能,即使后期因为功耗或节约成本等问题,硬件的更换也不影响数据储存功能的实现(前提规划好标准规范的API函数定义)且避免了重写该功能代码所带来的各种问题,保证了该功能的稳定性。 |
HDL (Hardware Drvier Layer) |
硬件驱动层 | 对HAL层和OSL层进行封装,因为HAL层一般是厂家提供,不是特别方便直接使用 对一些非片内的硬件资源(HAL库不提供)进行驱动 |
|
OSL (Open System Layer) |
操作系统层 | 操作系统、文件系统、GUI | |
FML (Functional Module Layer) |
功能模块层 | 功能模块层是按照项目需求提取出来的功能,需要硬件抽象层和硬件驱动层的硬件支持才能实现,功能模块层根据项目的功能需求改变而改变。 | |
BLL (Business Logic Layer) |
业务逻辑层 | 按照流程来调用功能模块工作 | |
APL (Application Layer) |
应用层 | 调用不同业务逻辑来完成应用 |
MCU是开发的核心和基础,所以应将其作为最底层,为上层提供基础支持。该层要求如下:
1,方便替换 单片机。
每家芯片寄存器或API库命名和操作都不相同,为了方便替换不对其他层代码改动,把MCU外设(GPIO,AD,UART....)抽象封装成统一的API或寄存器别名。
2,方便应用 不同项目。
MCU是专业通用芯片,会应用在不通产品,所以该层不能体现项目和方案信息,应内聚为MCU大类信息。
3,项目需要的进行抽象封装。
如果完全将MCU的库封装一遍工作量将十分巨大,也没必要,需要哪个就封装哪个。例如用到uart了那就只把uart的封装一下,像IIC、SPI等无关的可以不用封装。不过可以一个项目一个项目的沉淀,越往后工作量越少。
这一层是纯粹面向硬件设计的,对电路板的外设进行通用封装抽象(移植其他项目也可以用,与应用逻辑无关联),向上层提供硬件抽象接口。
如:常见的外围EEPROM芯片AT24C02,W25Q64等;控制电源芯片,AD采样芯片等;芯片级总线I2C、SPI,RS232协议、RS485协议、CAN总线等;按键,蜂鸣器,屏幕等驱动。
MCU层与硬件驱动层是为了功能模块提供的硬件驱动,从而实现项目需要的功能模块。如存储功能,电源设置功能,显示功能,算法库,文件库等。向上提供应用层的功能模块接口,向下调用驱动接口。
应用层主要负责功能模块的使用和之间的逻辑关系处理等,实现产品整体功能系统逻辑。对于大部分单片机产品应用层一层就可以了,太复杂了,反而臃肿。但对于复杂的产品项目,可继续细分,如下:
应用接口层:提供公共的 API 接口供应用接口供上层调用。这些接口也可由下层的功能模块开放出来,应用接口层负责汇总。
业务逻辑层:如 CPU 卡处理,交通部卡处理,银联卡处理,M1 卡处理,通信记录上传,黑名单下载,票价参数下载等。
应用层:为程序的总体的运行框架,组织调用业务逻辑。可以用某种嵌入式操作系统实现几种任务 。如定时任务,卡处理任务,菜单任务,通信任务。