嵌入式软件架构设计-模块化

1 前言

模块化程序设计是指在进行程序设计时将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一个确定的功能,并在这些模块之间建立必要的联系,通过模块的互相协作完成整个功能的程序设计方法。

比如搭积木,可以用一个个积木模块组合成我们想要的任何样子,而且通过使用相同的积木模块组合成不同的样子

2 为何模块化

为什么要模块化程序设计?那就需要从程序模块化的好处说起!只有了解了其优点,才能更好的实现模块化编程。

  1. 降低程序设计的复杂度

有利于程序的设计和调试,功能相对独立,结构清晰;主要是封装实现细节,提供使用接口即可

  1. 提供代码的复用性

现成的程序代码,直接移植到另一个项目中简单修改甚至不用修改就能使用,多个模块程序组合就完成了一个新的功能;这也是模块化最大的意义所在

  1. 便于功能维护和扩展

一旦出现问题,能迅速定位哪个模块出现的问题

  1. 程序的结构一目了然

可以看出程序中使用了哪些驱动、有哪些外设模块、大概有哪些功能等

  1. 保证系统稳定性

该模块程序已通过之前的项目经过反复验证,稳定性高,在新项目中移植比重写更稳定

  1. 有利于团队开发

各模块之间功能独立,有利于任务分解,团队分工,各自实现对应的功能,并且可以单独进行测试验证

3 如何拆分模块

基本思路是自顶向下、逐步分解、分而治之,即将一个较大的程序按照功能分割成一些小模块;比如手持遥控器,主要功能就是人机交互,可能还会有参数设置等,那么依次往下分解得到以下模块:

嵌入式软件架构设计-模块化

在拆分模块时应该注意以下几个主要原则:

  1. 模块独立

模块的独立性原则表现在模块完成独立的功能,与其他模块的联系应该尽可能得简单,各个模块具有相对的独立性。

  1. 模块的规模要适当

模块的规模不能太大,也不能太小。如果模块的功能太强,可读性就会较差,若模块的功能太弱,就会有很多的接口。开发者需要通过较多的程序设计来进行经验的积累。

  1. 分解模块时要注意层次

在进行多层次任务分解时,要注意对问题进行抽象化。在分解初期,可以只考虑大的模块,在中期,再逐步进行细化,分解成较小的模块进行设计。

  1. 不对外开放全局变量

模块内部使用的全局变量,需要外部修改或者获取时,需要通过封装成 API 函数对外提供,同时可以在函数内有相关限制,防止外部直接操作模块内部的全局变量引发模块运行异常,因此模块内部的全局变量可定义为静态全局变量。

4 如何理解

通常一个模块就是一个.c 文件和一个.h 文件的结合,头文件(.h)中是对于该模块接口的声明

  1. 该模块的.c文件实现具体功能,而.h文件则为该功能模块的接口函数等
  2. 一个大模块中也会存在多个小模块,即模块中存在多个.c和.h文件,每个.c和.h作用各不相同
  3. 一个.c 文件必须一个对应的.h文件,而.h文件不一定需要对应的.c 文件

比如实现一个OLED驱动模块,可能会有以下的文件:

  • oled.c 和 oled.h

实现具体功能,如清屏、画图、字符显示等;.h 文件对外提供 API 接口函数

  • oledio.c 和 oledio.h

实现底层接口初始化和通信(IIC或SPI),为oled.c文件提供驱动接口

  • oledconf.c 和 oledconf.h

驱动配置, 如字体大小、分辨率等配置信息

  • fontxxx.h 和 bmpxxx.h

用来存放字体和BMP图形点阵数据

Original: https://www.cnblogs.com/const-zpc/p/16364439.html
Author: 大橙子疯
Title: 嵌入式软件架构设计-模块化

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/714883/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【Golang】golang中map元素的删除和清空

    当我们想把一个map元素完全清空的时候 可以直接赋值一个新的map过去就可以了,Go语言中并没有为 map 提供任何清空所有元素的函数、方法,清空 map 的唯一办法就是重新 ma…

    技术杂谈 2023年6月1日
    0123
  • ASP.NET CORE WEB项目介绍

    首先创建一个asp.net core web应用程序 第二步 目前官方预置了7种模板项目供我们选择。从中我们可以看出,既有我们熟悉的MVC、WebAPI,又新添加了Razor Pa…

    技术杂谈 2023年6月21日
    094
  • python3GUI–天气预报小工具By:PyQt5(附源码)

    @ 一.准备工作 二.预览 1.启动 2.添加城市 三.设计流程 1.UI设计(草图) 2.UI设计(QT设计师) 3.解释 四.源代码 五.总结 之前用tk写过一款python3…

    技术杂谈 2023年6月21日
    0104
  • 疫情下企业管理的思考

    我们正经历着疫情常态化,为抗击疫情采取的特殊措施让整个社会运作进入非常特别的模式。缺乏了人群聚集带来的会议、商讨、面对面沟通作为润滑剂,企业管理中的问题纷纷凸现。 如果说疫情是对公…

    技术杂谈 2023年7月23日
    072
  • 通过过滤器实现前后端分离的跨域问题

    跨域指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。在做前后端分离项目的时候就需要解决此问题。 创建过滤器解决跨域问…

    技术杂谈 2023年7月11日
    061
  • 数学基础之微积分

    本文主要介绍学习机器学习过程中涉及到的一些微积分的基本概念,也包括部分数值分析,优化求解的概念。 直观定义 当函数 $y=f(x)$ 在 $x_{0}$ 的某个去心邻域内有定义,若…

    技术杂谈 2023年5月31日
    0107
  • Kruskal算法求最小生成树

    例题链接 Kruskal算法的对比prim的区别是,前者使用了并查集的思路,而后者类似于Dijkskal算法。操作策略是,对所有边权进行从小到大的排序,然后从小到大遍历所有边权去选…

    技术杂谈 2023年6月21日
    080
  • 华为学习笔记一初识VRP

    VRP简介 VRP是Versatile Routing Platform的简称,是华为公司从低端到高端的全系列路由器、交换机等数据通信产品的通用网络操作系统。华为网络设备功能的配置…

    技术杂谈 2023年7月11日
    078
  • 编程技巧│提高 Javascript 代码效率的技巧

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年7月11日
    095
  • quartz框架(三)-调度器创建之实例化

    调度器创建之实例化 博主的前一篇博文主要介绍了schedule创建时的配置文件加载,下面博主将介绍一下scheduler的instantiate方法。 代码回顾 public Sc…

    技术杂谈 2023年7月24日
    082
  • gin CRUD

    gin CRUD gin CRUD // units package dal //cxg 2022-7-29 import ( "net/url" "…

    技术杂谈 2023年5月30日
    0100
  • 【赵渝强老师】使用Weblogic的WLST工具

    一、什么是Weblogic WLST? WebLogic 脚本工具 (WebLogic Scripting Tool , WLST) 是一种命令行脚本界面,系统管理员和操作员用它来…

    技术杂谈 2023年7月24日
    088
  • NoteOfMySQL-07-索引

    1. 索引概述 创建索引的目的是为了优化数据库的查询速度,不添加索引的情况下需要遍历所有数据才能进行删、查、改等操作。 2. 索引存储类型 存储类型 支持的存储引擎 B型树(BTR…

    技术杂谈 2023年7月11日
    057
  • 剑指offer计划23( 数学简单)—java

    1.1、题目1 剑指 Offer 39. 数组中出现次数超过一半的数字 1.2、解法 万能哈希表,数学方法看到我要吐血。。。 1.3、代码 class Solution { pub…

    技术杂谈 2023年7月25日
    088
  • shopify主题模板startup修改

    shopify startup主题是一个很好的直接面向消费者DTC品牌的shopify模板,具有增强的推荐部分可定制性强,适合‎ ‎服装和配饰, 健康与美容, 家居与园艺‎,Dro…

    技术杂谈 2023年5月31日
    0105
  • 数据结构:二叉树

    定义 特点 每个节点最多有两棵子树,所以二叉树中不存在度大于2的节点。 左子树和右子树是有区别的,次序不能颠倒。 即使某个节点只有1个子节点,也是有左右之分的。 特殊的二叉树: 斜…

    技术杂谈 2023年7月11日
    087
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球