嵌入式软件分层的思想

文章目录

  • 一、分层的目的
  • 二、分层逻辑图
  • 三、分层的架构图
  • 四、分层的优缺点
  • 五、举例
  • 六、 优化

一、分层的目的

  “高内聚,低耦合的思想”,表示在设计和开发软件系统时,应该使模块之间的关系更加紧密,同时避免模块之间的依赖性过于紧密,以便更好地实现系统的可维护性,可扩展性和可重用性

二、分层逻辑图

在这里插入图片描述

三、分层的架构图

在这里插入图片描述

四、分层的优缺点

  • 优点
    • 易维护性:各层之间耦合度低,方便进行独立维护和修改。如果某一层发生故障,只需对该层进行修改,而不会影响到其他层。
    • 复用性:各层功能明确,可以独立地应用于不同的系统。例如,某一层的技术或算法经过验证后,可以在其他嵌入式系统中直接使用,无需从头开始开发。
    • 开放性:分层架构有利于标准化的实现。各层之间可以方便地进行替换和升级,提高了系统的可扩展性和可升级性。
    • 可移植性:由于各层相对独立,嵌入式系统可以方便地从一种硬件平台移植到另一种硬件平台,只需对相应层进行修改即可。
  • 缺点
    • 开发成本高:需要开发更多的代码,增加了开发时间和成本。
    • 性能开销大:分层架构需要处理更多的层级和接口,可能导致性能开销增大。
    • 通信开销大:各层之间需要进行数据传输和通信,可能导致较大的通信开销。
    • 跨层调用复杂:在分层架构中,跨层调用需要经过多个层级,可能导致复杂的逻辑和额外的性能开销。

因此,在选择是否采用嵌入式分层架构时,需要根据具体的应用场景和需求进行权衡。如果系统规模较大、复杂度高、需要高可维护性和可扩展性,分层架构是一个不错的选择;但如果系统规模较小、复杂度低、对性能要求较高,可能会更适合采用非分层架

五、举例

我需要获取一个ds18B20的数据然后上传到阿里云,使用的是STM32

  • 硬件层
    STM32的底层库函数
  • HAL库
    就是使用STM32的底层库函数疯转一个方便上层调用的函数,比如GPIO的翻转,拉高,拉低等等。
  • 驱动层
    使用HAL库写DS18B20的驱动
    4G的驱动
  • 中间层
    这里面没有用到中间层,如果上了FreeRTOS实时操作系统的话,中间层就有FreeRTOS
  • 逻辑层
    刚刚不是已经写好了传感器的驱动,限制逻辑层里面需要获取驱动的数据来操作。比如滤波,
  • 应用层
    这边拿到的是最终的数据,就要通过4G上传到阿里云了。肯定要有定时器了,定时器到了,就可以上传数,那么就有上传失败成功的情况,
    这边的应用层就做两个事:一是拿到最终数据,二是定时器。定时器到了,把标志位传给逻辑层区处理。

六、 优化

如果需要响应度很快的话,那么最少有三层。HAL层,驱动层,应用层。这样的话,系统的开销就小了。


文章是自己总结而记录,有些知识点没说明白的,请各位看官多多提意见,多多交流,欢迎大家留言
如果技术交流可以加以下群,方便沟通
QQ群:370278903
点击链接加入群聊【蜡笔小芯的嵌入式交流群】
![])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/631696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE】文件操作: File 类的用法和 InputStream, OutputStream 的用法

目录 1. File 概述 1.1 File的属性 1.2 File的构造方法 1.3 File的方法 2.读文件 2.1 InputStream 概述 2.2 FileInputStream 概述 2.3 正确打开和关闭文件的方式 2.4 不同方式读取文件代码示例 2.4 另一种方法:利用 Scanner 进行字符读取 3.写文件 3.1 OutputStre…

如何在苹果手机上进行文件管理

摘要 苹果手机没有像安卓系统那样内置文件管理器,但是可以通过使用克魔开发助手来实现强大的文件管理功能。本文介绍了如何使用克魔开发助手在电脑上管理和传输苹果手机的文件。 引言 很多朋友都在使用苹果手机,但是当需要查看手机中的文件时&#xf…

version-polling一款用于实时检测 web 应用更新的 JavaScript 库

为了解决后端部署之后,如何通知用户系统有新版本,并引导用户刷新页面以加载最新资源的问题。 实现原理 1.使用 Web Worker API 在浏览器后台轮询请求页面,不会影响主线程运行。 2.命中协商缓存,对比本地和服务器请求响应头etag字…

取消lodash.throttle中的默认执行完最后一次函数

我的场景: 我有一个列表,我考虑用户连续点击删除的情况,如果用户连续点击,可能会导致数据库中的数据被删除了,但是我还需要刷新数据列表才能反应到页面上,可是这时候用户又点击了同一条数据的删除按钮多次,导致发起了…

第二讲_HarmonyOS应用创建和运行

HarmonyOS应用创建和运行 1. 创建一个HarmonyOS应用2. 运行新项目2.1 创建本地模拟器2.2 启动本地模拟器2.3 在本地模拟器运行项目 1. 创建一个HarmonyOS应用 打开DevEco Studio,在欢迎页单击Create Project,创建一个新工程。 选择创建Application应用。…

服务器运维小技巧(一)——如何进行远程协助

服务器运维中经常会遇到一些疑难问题,需要安全工程师,或者其他大神远程协助。很多人会选择使用todesk或者向日葵等一些远控软件。但使用这些软件会存在诸多问题: 双方都需要安装软件,太麻烦需要把服务器的公钥/密码交给对方不知道…

【计算机硬件】2、指令系统、存储系统和缓存

文章目录 指令系统计算机指令的组成计算机指令执行过程指令的寻址方式(怎么样找到操作数?)1、顺序寻址2、跳跃寻址 指令操作数的寻址方式(怎么样找到操作数?)1、立即寻址方式2、直接寻址方式3、间接寻址方式…

鸿蒙开发-UI-布局-弹性布局

地方 鸿蒙开发-UI-布局 鸿蒙开发-UI-布局-线性布局 鸿蒙开发-UI-布局-层叠布局 文章目录 前言 一、基本概念 二、布局方向 1、主轴为水平方向 2、主轴为垂直方向 三、布局换行 四、对齐方式 1、主轴对齐方式 2、交叉轴对齐方式 2.1、容器组件设置交叉轴对齐 2.2、子组件设置交叉…

常见框架漏洞

1.什么是框架 Web框架(Web framework)或者叫做Web应用框架(Web application framework),是用于进行Web开发的一套软件架构。大多数的Web框架提供了一套开发和部署网站的方式。为Web的行为提供了一套支持的方法。使用Web框架,很多的业务逻辑外的功能不需…

RT-Thread 瑞萨 智能家居网络开发:RA6M3 HMI Board 以太网+GUI技术实践

以太网HMI线下培训-环境准备 R A 6 M 3 H M I − B o a r d \textcolor{#4183c4}{RA6M3 HMI-Board} RA6M3HMI−Board 本次培训将使用,由RT-Thread与瑞萨电子及LVGL官方合作推出的一款高性价比图形评估套件。它采用了瑞萨电子的高性能RA6M3芯片,具备2D的…

【C语言编程之旅 3】刷题篇-函数

第一题 解析 数组的下标是从0开始的。 需要注意的是D:int a[] {1,2,3},数组可以通过初始化确定大小。 第二题 解析 B,数组的大小必须是常量 第三题 解析 /* 解题思路:本题目主要是考察函数的声明定义,题目比较简单,请参考以…

如何在Linux运行RStudio Server并实现Web浏览器远程访问

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. …

腊八节公益活动总结

春雨公益志愿服务队联合水城路社区红帆支部服务队于腊八节开展了公益活动,为环卫工人送上了热气腾腾的八宝粥以及新年福字。此次活动旨在为环卫工人营造温馨、充满爱心的氛围,让他们在冬日里感受到社会的温暖和关爱。 活动当天,志愿者们早早地…

C语言之【函数】篇章以及例题分析

文章目录 前言一、函数是什么?二、C语言中函数的分类1、库函数2、自定义函数 三、函数的参数1、实际参数(实参)2、形式参数(形参) 四、函数的调用1、传值调用2、传址调用3、专项练习3.1 素数判断3.2 闰年判断3.3 二分查…

ARM 1.16

TCP的特点 面向连接 面向连接,是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”,这样能建立可靠的连接。建立连接,是为数据的可靠传输打下了基础。 仅支持单播传输 每条TCP传输连接只能有两个端点&#…

21. 合并两个有序链表(Java)

题目描述: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入: l1 [1,2,4], l2 [1,3,4] 输出: [1,1,2,3,4,4] 代码实现: 结点类: public class ListNode {in…

自动化测试总结

1.什么是自动化测试 以程序测试程序,以代码代替思维,以脚本的运行代替手工测试。自动化的测试涵盖了:功能(黑盒)自动化测试,功能(白盒)自动化测试,性能测试,…

YOLOv8改进 | Conv篇 | 在线重参数化卷积OREPA助力二次创新(提高推理速度 + FPS)

一、本文介绍 本文给大家带来的改进机制是一种重参数化的卷积模块OREPA,这种重参数化模块非常适合用于二次创新,我们可以将其替换网络中的其它卷积模块可以不影响推理速度的同时让模型学习到更多的特征。OREPA是通过在线卷积重参数化(Online Convolutional Re-parameteriza…

低代码开发:解锁数字化转型新维度

在信息化浪潮中,企业正面临着前所未有的挑战与机遇。一方面,市场环境瞬息万变,业务需求迭代频繁,对快速应用开发提出了更高要求;另一方面,传统软件开发模式受限于高成本、长周期等瓶颈,难以满足…

【备战蓝桥杯】探索Python内置标准库collections的使用

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-q0zvWxZtAIdSGZ8R {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…