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

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

3天内不再提示

嵌入式软件分层隔离的典范是什么?

汽车电子技术 来源:嵌入式系统 作者: 嵌入式系统 2023-01-20 11:08 次阅读

引言嵌入式软件开发分层、模块化是理想状态,实际开发中因各种限制而有所取舍,但这不妨碍学习参考优秀软件架构,即使有部分思想在项目中落实,也是大有裨益的。

1、AUTOSAR的软件分层理论

汽车电子消费电子不同,其硬件、软件都更关注可靠性、安全性和长效性。其软件需要兼容不同供应商、在不同车型可复用,汽车电子行业的软件架构AUTOSAR(Automotive Open System Architecture)可以作为参考对象。因为不曾使用和系统学习,基于有限信息理解其软件分层思想,可能有所偏差。

AUTOSAR是一种汽车开放系统架构,AUTOSAR规范的运用使得电子控制单元的接口特征标准化,应用软件具备更好的可扩展性以及可移植性,实现对现有软件的重用,提高软件产品的质量。

传统的汽车电子软件开发流程存在很多不足:

1、软件复用性极差

2、硬件平台各式各样,接口难以统一

3、功能差异性导致软件模块化极其有限

4、嵌入式系统不支持硬件抽象

这也是芯片供应紧缺或升级迭代加快,频繁更换物料时嵌入式设备软件开发所面临的问题,重复的无用功太多。

如车载空调ECU零件(Electronic Control Unit 电子控制单元),在A款车型上进行首次开发,可通过实体按键操作调节温度。但是同样的空调、同样的ECU,换到B款车型上做开发时,想用中控大屏幕来控制温度,之前写的控制代码就不管用了,需要从头开始重新开发。或者说,同样的A款车型,想升级换另一个空调零件,那么软件也得重新开发。

微信截图_20230105161930.png

深度耦合的架构,导致新项目很难复用以前的代码,几乎每一个新项目都是从头开始。

而AUTOSAR的目的就是建立分层的体系架构和制定接口规范,将分层架构高度抽象,使得汽车嵌入式系统软硬件耦合度降低。

微信截图_20230105161930.png

应用软件层专注于业务功能开发,不关注底层硬件细节;基础软件层针对不同的硬件适配提供基础接口,不关注业务逻辑。各个供应商或厂家按统一的标准实现各自的功能,互不干扰。

基础软件层框架:

微信截图_20230105161930.png

基础层基于硬件实现基础的驱动功能,类似BSP效果,但进行了一定抽象封装,与硬件解耦。

应用层实现业务功能,为保证业务功能和底层的解耦,中间是运行时环境RTE隔离。RTE是AUTOSAR 体系的核心,支持软件组件间、基础软件间、软件组件与基础软件之间的通信

AUTOSAR的标准化,使软件开发合作如同堆积木一样,可以按需修改和更换不同的子模块,其核心思想是“统一标准、分散实施、集中配置”。软件系统的开放化和标准化提高软件开发的效率和质量。

2、软件分层实施

软件分层理论不错,但如汽车电子的AUTOSAR的复杂架构需要工具配置保证接口和规范,对于消费电子或者小公司无法满足条件的,如何结合实情进行简化实施呢?

电子产品充电时需要亮LED为例,即主芯片的某个GPIO控制LED亮灭的需求,抛砖引玉的发表见解。

主控芯片可能有C1、C2、C3三种,而不同的产品形态导致硬件布局差异,即使都是C1主控方案,可能采用P1、P2、P3三个引脚的其中一个用于LED控制,对于点亮LED,P1、P2是输出高亮灯,而P3是输出低亮灯。

针对这个需求,充电时亮灯属于业务需求,按需求执行亮灯接口;底层提供GPIO输出,对于LED的控制属于运行时环境。为了简化称呼,自定义为三层结构,即平台适配层---功能组件层---业务层 ,最下层为芯片原厂库或者SDK。

微信截图_20230105161930.png

软件开发从底层开始,不同的芯片控制GPIO的接口不同,因此需要封装一层,使用固定的pal_gpio_write接口,至于最终使用哪颗芯片的HAL库或者SDK,需要根据芯片类型配置决定,这样功能组件层不关注芯片差异导致的GPIO控制接口差异,只需要关注具体的GPIO引脚,而这个由LED功能里的配置决定。最终提供给业务层的接口就只有led_charge_show(),具体这个接口运行在什么平台、控制哪个端口都是封闭的。对于业务层开发,只需要知道,充电时LED的工作状态执行led_charge_show即可,其内部细节不关注。

这其中除了C源码开发,对脚本处理及其扩展也是软件分层实现的基础,仅仅使用IDE开发工具是无法做到的。按开发环境选择合适的脚本语言,分层配置,最后统一使用某个项目宏,即开启对应的项目宏。编译时选择对应的C文件或者宏定义,实现一套代码选择性的编译匹配不同的硬件主板或软件需求。脚本方面可以参考微信公众号** 嵌入式系统** 的 《[项目配置与编译自动化]

3、小节

因为接口标准化,软件与硬件解耦,业务逻辑和驱动模块解耦,功能组件相互独立解耦,软件复用度提高,多人并行开发,软件质量和进度大大提高。

分层隔离的优点很多,但也存在些弊端。

**1、资源消耗大 ** 因为模块化、分层,存在冗余兼容代码,对代码存储和RAM有一定要求,过于低端或者资源紧缺的芯片估计难以实现,但也可局部分层。

**2、配置多 ** 因为软件需要兼容不同芯片、不同主板、以及各种功能组合,每个具体项目存在很多配置项,而且部分配置互相关联,如果不熟悉或者没有类似AUTOSAR的可视化工具,新加项目或者更换主板可能需要点时间。

**3、逻辑流程繁琐 **分层软件的特点是各种指针和内存共享等,而且因为隔离,原本很简单的操作需要经过不同组件间接操作,流程不够直接,代码出现问题,排查比较困难。

总体来说,分层和模块化是一种开发思想,需要结合硬件资源和团队特性来实施。

更多开发技巧与思路,请关注微信公众号 嵌入式系统。

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

    关注

    5082

    文章

    19104

    浏览量

    304777
  • 开发
    +关注

    关注

    0

    文章

    370

    浏览量

    40836
  • 软件架构
    +关注

    关注

    0

    文章

    64

    浏览量

    10280
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

    嵌入式操作系统时如何分层的?各层的功能是什么?

    嵌入式操作系统时如何分层的?各层的功能是什么?
    发表于 12-27 06:44

    探讨一下嵌入式软件分层设计

    嵌入式软件分层设计嵌入式软件就是某一项目的源码文件集合,源码文件的数量,根据项目复杂程度的不同而有规模和层次的差别。就拿简单的一个芯片厂..
    发表于 02-14 07:19

    什么是嵌入式软件开发

    嵌入式软件开发又是指什么?   随着嵌入式软件系统结构越来越复杂,嵌入式软件的开发已成
    发表于 04-20 08:43 8773次阅读

    ARM嵌入式软件开发

    ARM嵌入式软件开发ARM嵌入式软件开发ARM嵌入式软件开发
    发表于 01-15 17:29 65次下载

    嵌入式软件是什么意思_嵌入式软件的分类有哪些

    本文首先阐述了嵌入式软件的概念,其次介绍了嵌入式软件的特征,最后介绍了嵌入式软件的分类。
    发表于 08-31 15:54 1.6w次阅读

    嵌入式软件的开发流程_嵌入式软件的调试

    本文首先介绍了嵌入式软件的发展,其次阐述了嵌入式软件的开发流程,最后介绍了嵌入式软件的调试。
    发表于 08-31 16:02 6285次阅读

    嵌入式软件测试参考书籍

    嵌入式软件测试的几本参考书籍:1、《嵌入式软件测试》;2、《嵌入式软件测试 方法、案例与模板详解
    发表于 10-20 12:06 51次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>测试参考书籍

    嵌入式框架-分层

    原有的代码。接下来嵌入式ARM便和大家分享一下,嵌入式架构那些事儿……01嵌入式系统的基本架构嵌入式系统一般由软件和硬件两个部分组成,基中
    发表于 10-20 16:06 24次下载
    <b class='flag-5'>嵌入式</b>框架-<b class='flag-5'>分层</b>

    嵌入式分层概括总结

    最近重新进入嵌入式领域,有必要对嵌入式分层架构有一个清晰的理解。经过多方查阅以及个人的理解,本人对嵌入式分层架构概括总结如下:比较细的层次由
    发表于 10-21 10:51 11次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>分层</b>概括总结

    嵌入式软件开发的特点、设计流程、嵌入式软件的结构

           嵌入式软件开发的特点、设计流程、嵌入式软件的结构 一:嵌入式软件开发的特点1.
    发表于 11-03 15:21 37次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>开发的特点、设计流程、<b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>的结构

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

    嵌入式MCU软件开发过程中,程序分层设计也是重中之重,关系到整个软件开发过程中的协同开发,降低系统软件的复杂度(复杂问题分解)和依赖关系、
    的头像 发表于 02-15 14:41 1198次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>架构设计之程序<b class='flag-5'>分层</b>

    聊聊嵌入式软件分层

    今天以控制LED闪烁为例,聊聊嵌入式软件分层
    的头像 发表于 12-28 09:22 672次阅读