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

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

3天内不再提示

嵌入式软件为什么要模块化程序设计呢?

strongerHuang 来源:大橙子疯嵌入式 2023-02-03 10:27 次阅读

一个好的嵌入式项目,通常会有一套比较好的软件架构的设计。除非你的项目只是一个点灯项目。

1、前言

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

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

2、为何要模块化

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

降低程序设计的复杂度

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

提供代码的复用性

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

便于功能维护和扩展

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

程序的结构一目了然

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

保证系统稳定性

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

有利于团队开发

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

3、如何拆分模块

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

745b8e92-a30e-11ed-bfe3-dac502259ad0.png

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

模块独立

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

模块的规模要适当

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

分解模块时要注意层次

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

不对外开放全局变量

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

4、如何理解

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

该模块的.c文件实现具体功能,而.h文件则为该功能模块的接口函数等

一个大模块中也会存在多个小模块,即模块中存在多个.c和.h文件,每个.c和.h作用各不相同

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





审核编辑:刘清

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

    关注

    12

    文章

    1207

    浏览量

    55400
  • 遥控器
    +关注

    关注

    18

    文章

    837

    浏览量

    66115
  • BMP
    BMP
    +关注

    关注

    0

    文章

    48

    浏览量

    17062
  • 嵌入式软件
    +关注

    关注

    4

    文章

    240

    浏览量

    26646
  • OLED驱动
    +关注

    关注

    1

    文章

    13

    浏览量

    10221

原文标题:嵌入式软件架构模块设计

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式模块化程序设计的相关资料分享

    模块化程序设计是指在进行程序设计时将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一
    发表于 11-09 08:20

    嵌入式C语言程序设计基础大汇总

      学习嵌入式的基础语言是C语言,因此先掌握C语言对于后续嵌入式的学习有着非常大的意义。下面讲解下嵌入式C语言程序设计基础,尤其是C语言的一些语言特点。  C语言是一种结构
    发表于 11-09 07:13

    嵌入式编程中C语言的模块化和模拟面向对象的相关资料推荐

    模块化嵌入式编程中需要对程序进行模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C
    发表于 12-15 08:51

    C语言模块化程序设计理解

    C语言嵌入式系统编程修炼(软件架构篇)模块划分模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成
    发表于 12-15 06:34

    嵌入式软件程序设计

    嵌入式系统设计师学习笔记二十七:嵌入式软件程序设计②——嵌入式程序设计程序设计语言机器语言:由二
    发表于 12-21 08:28

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

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

    嵌入式系统的C程序设计

    嵌入式系统的C程序设计
    发表于 04-07 22:42 86次下载
    <b class='flag-5'>嵌入式</b>系统的C<b class='flag-5'>程序设计</b>

    嵌入式系统的C程序设计

    嵌入式系统的C程序设计
    发表于 11-10 08:59 54次下载

    嵌入式系统的c程序设计

    嵌入式系统的c程序设计
    发表于 02-11 09:21 65次下载
    <b class='flag-5'>嵌入式</b>系统的c<b class='flag-5'>程序设计</b>

    模块化程序设计

    模块化程序设计思想,单片机c语言的模块化设计,方便移植,将程序封装备用。
    发表于 03-22 15:29 9次下载

    模块化程序设计

    模块化程序设计,利用c语言的移植性好特点,更好的利用c语言。
    发表于 03-23 09:25 0次下载

    嵌入式系统与C程序设计

    嵌入式系统与C程序设计
    发表于 10-30 10:20 13次下载
    <b class='flag-5'>嵌入式</b>系统与C<b class='flag-5'>程序设计</b>

    嵌入式软件开发之模块化程序设计(三)

    模块化程序设计是指在进行程序设计时将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一
    发表于 11-03 21:06 10次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>开发之<b class='flag-5'>模块化</b><b class='flag-5'>程序设计</b>(三)

    C语言嵌入式培训 嵌入式C语言程序设计基础

      学习嵌入式的基础语言是C语言,因此先掌握C语言对于后续嵌入式的学习有着非常大的意义。下面讲解下嵌入式C语言程序设计基础,尤其是C语言的一些语言特点。  C语言是一种结构
    发表于 11-03 21:06 32次下载
    C语言<b class='flag-5'>嵌入式</b>培训  <b class='flag-5'>嵌入式</b>C语言<b class='flag-5'>程序设计</b>基础

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

    模块化程序设计是指在进行程序设计时将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一
    的头像 发表于 02-15 14:42 1003次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>架构设计之<b class='flag-5'>模块化</b>