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

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

3天内不再提示

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

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

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图形点阵数据

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

    关注

    7

    文章

    2484

    浏览量

    46530
  • 程序设计
    +关注

    关注

    3

    文章

    258

    浏览量

    30188
  • 模块化程序
    +关注

    关注

    0

    文章

    2

    浏览量

    1147
收藏 人收藏

    评论

    相关推荐

    嵌入式软件架构设

      本篇介绍了嵌入式系统编程软件架构方面的知识,主要包括模块划分、多任务还是单任务选取、单任务程序典型架构、中断服务程序、硬件驱动
    发表于 06-23 23:15

    诚聘嵌入式软件架构

    ,本科以上学历;2、三年以上嵌入式软件系统架构设计经验,同时有通信行业软件开发经验;3、精通C/C++语言,精通数据结构;熟悉QT\linux\android
    发表于 03-01 10:20

    诚聘嵌入式软件工程师

    计经验或者BSP开发经验;6、熟悉Windows操作系统,具备一定的上位机应用程序开发经验;7、熟悉嵌入式软件设计方法,有程序架构设计经验,对软件
    发表于 03-10 10:31

    嵌入式系统模块化设计有什么方法?

    嵌入式系统设计要求做到可测性、高效性和灵活性。目前,嵌入式系统物理尺寸越来越小,功能越来越复杂。为了方便调试、维护系统,完全可测显得极为重要。另一方面,模块化的设计方法越来越引起人们的关注。
    发表于 08-23 07:31

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

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

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

    为何要进行嵌入式软件架构设计?如何进行嵌入式软件架构设计?
    发表于 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

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

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

    嵌入式软件开发过程中的模块化

    对很多人来,嵌入式软件开发过程中模块化(Modularization)是一个海市蜃楼、是一个书面词汇、是一个过气的时尚——模块化似乎从未真正的实现过。吹牛时人们常不屑的说:没吃...
    发表于 12-20 07:22

    嵌入式系统的微模块化程序设计有何作用

    什么是嵌入式系统的微模块化程序设计?嵌入式系统的微模块化程序设计有何作用?
    发表于 12-24 06:35

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

    作为程序员,我觉得如果要走的更远必须要成为工程师,毕竟年龄和资历都摆在那里了。所以就让我这个老程序员浅谈一下嵌入式软件架构设计。我参考的也是一篇博文。原图如下![在这里插入图片描述](?x-oss-process=image/w
    发表于 12-24 07:09

    嵌入式软件架构设

    【1】架构设计的目的1.应用的代码逻辑清晰,且避免重复造轮子。2.方便软件的移植。3.最大限度地复用。4.高内聚低耦合。 【2】嵌入式架构思路1.功能
    发表于 11-03 16:36 10次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b><b class='flag-5'>架构设</b>计