0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式软件架构设计之程序分层

汽车电子技术 来源:大橙子疯嵌入式 作者:大橙子疯 2023-02-15 14:41 次阅读

1、前言

嵌入式MCU软件开发过程中,程序分层设计也是重中之重,关系到整个软件开发过程中的协同开发,降低系统软件的复杂度(复杂问题分解)和依赖关系、同时有利于标准化,便于管理各层的程序,提高各层逻辑的复用等。

2、分层介绍

硬件抽象层(HAL)

嵌入式开发的核心就是芯片,它提供固定的片内资源(常用的有I/O,ISR,TIMER等,稍微好点的还有ADC,SPI等硬件资源,不需要芯片外围ADC采集芯片或模拟SPI)共开发者使用。而且它具有一个很重要的特点就是,不随项目的新增需求变动而变动。所以应将其作为最底层,为上层提供基础支持。

大部分情况下该层都会有芯片厂商提供相应的库函数包或者配置工具生成对应API函数,基本只要知道如何配置和使用就行,当然,也有可能存在芯片厂商提供的库函数包或配置工具配置/使用自由度不高,需要自己查看芯片寄存器手册增加自己需要的API函数。

硬件驱动层(HDL)

嵌入式开发通常都会使用片外资源,用来弥补硬件抽象层实现不了的功能或者需要扩展的功能。

如AT24C02,W25Q128等常见的外围EEPROM芯片,需要SPI通信(硬件SPI或I/O模拟的SPI)发送相应指令驱动该芯片,实现该芯片能正常工作。因此驱动这部分的API函数实现程序即为硬件驱动层。即使换了MCU,也只需将调用过硬件抽象层的API函数替换即可。

功能模块层(FML)

硬件抽象层和驱动层主要就是为功能模块层提供的,实现该项目需要的基本功能。而这一层又为上层提供最基本的功能,各功能模块之前没有太多联系。

比如KEY、LED和EEPROM等功能,其中LEY、LED基本调用硬件抽象层的API函数(更复杂的可能通过片外芯片获取/控制等,因此可能也需要使用硬件驱动层),EEPROM调用硬件驱动层的API函数,即使EEPROM芯片更换(AT24C02或W25Q128等),也不影响EEPROM之前编写含的功能代码程序(前提是AT24C02,W25Q128提供的API函数提供的是统一标准)。

应用程序层(APL)

应用程序层主要负责的就是功能模块的使用和之间的逻辑关系处理等等,比如用户交互界面应用程序可能需要按键(KEY)、指示灯(LED)、显示屏(LCD)等,实现一系列的人机交互功能,通常应用程序层相对于功能模块层而言独立性较低。

一般情况下也可细分出应用业务层,但是对于单片机产品来说,这一层的必要性反而不高,分层太多,反而显得臃肿。

3、总结

硬件抽象层和硬件驱动层的主要区别

硬件抽象层使用的芯片内本身的资源(芯片手册都有介绍),而硬件驱动层使用的是芯片本身不存在的资源,而且需要编写相应代码才能实现的资源。

比如正点原子STM32CAN使用的TJA1050芯片,CAN属于STM32的片内资源,TJA1050属于片外资源,但由于TJA1050不需要额外的代码就能通过STM32中CAN本身提供API函数正常 工作;因此可以认为TJA1050不属于硬件驱动层,而若使用TJA1041,则需要编写额外代码才能使正常工作才能使STM32中CAN本身提供API函数正常工作,因此可以将TJA1041归为硬件驱动层。

图片

图片

功能模块层、硬件抽象层和硬件驱动层的主要区别

功能模块层是按照项目需求提取出来的功能,需要硬件抽象层和硬件驱动层的硬件支持才能实现,功能模块层根据项目的功能需求改变而改变,而硬件抽象层和硬件驱动层则是项目需求书中的功耗等硬件相关的需求变动而改变,当然,若子功能的增加而硬件不支持,则也需更换硬件驱动。

比如项目中的数据储存功能,硬件支持有AT24C02、W25Q128和芯片本身的FLASH,都可以支持数据储存功能,即使后期因为功耗或节约成本等问题,硬件的更换也不影响数据储存功能的实现(前提规划好标准规范的API函数定义)且避免了重写该功能代码所带来的各种问题,保证了该功能的稳定性。

4、分层结构图

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16016

    浏览量

    343620
  • 嵌入式
    +关注

    关注

    4982

    文章

    18281

    浏览量

    288442
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79541
收藏 人收藏

    评论

    相关推荐

    嵌入式系统的软件架构设计!

    软件架构设计!2. 嵌入式环境下软件设计的特点要谈嵌入式软件
    发表于 08-10 07:46

    嵌入式分层架构的相关资料分享

    最近重新进入嵌入式领域,有必要对嵌入式分层架构有一个清晰的理解。经过多方查阅以及个人的理解,本人对嵌入式
    发表于 10-28 08:42

    为何要进行嵌入式软件架构设计?如何设计?

    为何要进行嵌入式软件架构设计?如何进行嵌入式软件架构设计?
    发表于 11-01 06:31

    嵌入式软件架构设计的目的及思路

    【1】架构设计的目的1.应用的代码逻辑清晰,且避免重复造轮子。2.方便软件的移植。3.最大限度地复用。4.高内聚低耦合。 【2】嵌入式架构思路1.功能模块化设计获得需求------->
    发表于 11-08 06:41

    嵌入式UI架构设计相关资料下载

    嵌入式UI架构设计漫谈
    发表于 11-08 07:49

    嵌入式系统中的架构设计的理解

    【阅读这篇文章,你能了解到什么】1. 从事嵌入式开发12年的我,对架构设计的理解;2. 对嵌入式系统中的架构设计要刻意训练;3. 嵌入式系统
    发表于 11-08 08:23

    决定嵌入式系统软件架构的因素和架构的影响

    嵌入式系统软件架构设计目录1.前言42.决定架构的因素和架构的影响42.1.常见的误解52.1.1.小型的系统不需要
    发表于 11-08 06:54

    嵌入式软件架构设计的相关资料分享

    方便其实整理代码结构,最主要想实现的就是:高内聚低耦合这样的代码方便移植管理,流程接口明确。一般的架构图主要就是两部分:分层分模块随便上百度搜了一张嵌入式软件
    发表于 11-09 08:25

    嵌入式软件架构设计的资料大合集

    一、感慨近公司新招了一个做嵌入式软件开发开发的童鞋,该童鞋是从上海的某一个上市公司出来的,因为我们这边人手不够,因此把他安排了去负责一个新产品的研发,前期让他负责加速度计、NB-IOT、舵机、外置
    发表于 11-09 07:50

    嵌入式软件开发过程之程序代码分层

    嵌入式软件开发过程中,在程序架构的搭建完成之后,为了提高项目代码的可读性和可维护性等,应对程序代码分层
    发表于 12-21 06:13

    嵌入式软件基础的四层架构分别是哪些

    嵌入式软件分层架构基本原则有哪些?嵌入式软件基础的四层架构
    发表于 12-24 07:57

    嵌入式软件架构设计资料分享

    作为程序员,我觉得如果要走的更远必须要成为工程师,毕竟年龄和资历都摆在那里了。所以就让我这个老程序员浅谈一下嵌入式软件架构设计。我参考的也是
    发表于 12-24 07:09

    ARM嵌入式应用程序架构设计工具-DLTools

    ARM嵌入式应用程序架构设计实例精讲--ARM嵌入式应用程序架构设计工具-DLTools
    发表于 07-08 11:08 4次下载

    ARM嵌入式应用程序架构设计工具-字库

    ARM嵌入式应用程序架构设计实例精讲--ARM嵌入式应用程序架构设计工具-字库
    发表于 07-08 11:08 10次下载

    嵌入式硬件通信接口协议-SPI(二)分层架构设计模拟接口

    嵌入式硬件通信接口协议-SPI(二)分层架构设计模拟接口
    发表于 12-09 12:36 19次下载
    <b class='flag-5'>嵌入式</b>硬件通信接口协议-SPI(二)<b class='flag-5'>分层</b><b class='flag-5'>架构设</b>计模拟接口