一般实现

在我们做项目的时候,一般的实现,可能我们会这样写代码

// FileName: test.c// 来源:公众号【技术让梦想更伟大】#include#include “ExternModule.h”
int main(void){/*初始化*/  vAllInit();   while(1)  {     /*项目逻辑*/    vLogicModule1();     vLogicModule2();   }}

在其外部文件中,调用相对应的初始化函数以及逻辑函数,但是当我们项目很复杂的时候,逻辑关系也层层覆盖、交替的时候,这样的写法就有些不是很好看了。

接口适配器

首先我们还是要来定义数据结构,一般这样的项目分为这样几个步骤:

  1. 初始化

  2. 输入

  3. 处理

  4. 输出

我们把这四个步骤封装起来,再定义数据结构如下:

// FileName: test1.c
// 来源:公众号【技术让梦想更伟大】
/* 适配器类型定义 */
struct _ADAPTER
{void (*Init    )( void );  //初始化函数                 void (*Input   )( void );  //输入转换函数    void (*Process )( void );  //处理函数    void (*Output  )( void );  //输出转换函数
};
typedef struct _ADAPTER ADAPTER ;

那么初始化函数,我们先来这样定义

// FileName: test1.c
// 来源:公众号【技术让梦想更伟大】
/* 模块初始化 */
void moduleInit( ADAPTER *module )
{if( module->Init != NULL )    {      module->Init();    }
}

模块的逻辑运行,我们可以这样使用

// FileName: test1.c// 来源:公众号【技术让梦想更伟大】/* 模块逻辑运行 */void moduleRun( ADAPTER *module ){    // 模块输入适配接口不为空,则执行输入适配操作    if( module->Input != NULL )    {        module->Input();    }// 模块处理接口不为空,则执行处理操作        // 模块输出适配接口不为空,则执行输出适配操作}

在定好了这些数据结构以及封装之后,我们在每个子模块中都只需要调用这个模式即可。例如有一个需求,需要点一个灯,我们建立独立文件,在文件中申明

// FileName: led.c
// 来源:公众号【技术让梦想更伟大】
/*led灯运行 */
ADAPTER LedModule = { vLedInit, NULL, vLedRunModule, NULL };

那么接下来只需要对初始化函数,逻辑运行函数进行描述就可以了。同理,我们需要一个按键的功能,在另一个独立文件申请

// FileName: key.c
// 来源:公众号【技术让梦想更伟大】
/*按键运行 */
ADAPTER KeyModule = { vKeyInit, NULL, vKeyRunModule, NULL };

这样的话就便于我们拆分需求,便于移植,同时程序也就模块化了,最后我们在main文件中做的就是调用这些函数就行。我们需要这样做。

// FileName: main.c// 来源:公众号【技术让梦想更伟大】/*主函数 */void main( void ){moduleInit( &LedModule         );    moduleInit( &keyModule         );     while( 1 )    {        moduleRun( &LedModule        );        moduleRun( &keyModule        );    } }

最后

main函数就是这么简单了,整个架构也是很清晰,体现出编程之美。

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

常用于单片机的接口适配器模式C语言实现相关推荐

  1. 【学习笔记】JDBC:java提供的专门操纵数据库的API JDBC驱动程序的类型 JDBC常用的类与接口

    JDBC技术 JDBC的全称是Java DataBase Connectivity,是一套面向对象的应用程序接口,指定了统一的访问各种关系型数据库的标准接口,JDBC是一种底层的API,因此访问数据库 ...

  2. 单片机应用技术c语言版第4版答案,单片机应用技术(C语言版)第4版

    本书在第3版得到全国广大院校教师与学生的欢迎和使用基础上,结合行业新技术发展和课程组近年来取得的课程改革成果,在充分和认真听取广大师生及职教专家的意见和建议后,在保留原教材主体内容与特色的前提下,对其 ...

  3. 液晶显示屏的C语言编码,单片机液晶汉字显示c语言程序

    单片机液晶汉字显示c语言程序 单片机液晶汉字显示c语言程序 /*液晶屏分为4行*12列汉字,全部使用模拟接口方式. /* TGLCMLIMIT64A接口程序(模拟方式) ;************** ...

  4. c51语言的数据存储模式,第5章项目三单片机存储结构及C51语言.ppt

    第5章项目三单片机存储结构及C51语言 项目三 基本功 任务一 MCS-51单片机基础 任务二 单片机C51语言程序设计基础 二.MCS-51单片机存储器及存储空间 1.存储器的概念 什么是存储器呢? ...

  5. 硬件基础:台式电脑上的常用的几个接口!

    今天给大家详细讲解台式电脑上的常用的几个接口! 1.I/O接口部分 下图所有的接口,也是我们机箱后面的接口,统称为:I/O接口. 2.键鼠PS/2 PS/2接口是I/O接口中比较常见的一种接口,用来连 ...

  6. 硬件:详细讲解台式电脑上的常用的几个接口!

    详细讲解台式电脑上的常用的几个接口! I/O接口部分 下图所有的接口,也是我们机箱后面的接口,统称为:I/O接口. 键鼠PS/2 PS/2接口是I/O接口中比较常见的一种接口,用来连接键盘和鼠标,二者 ...

  7. c语言人机互动编程,单片机人机交互系统的C语言编程简介.ppt

    单片机人机交互系统的C语言编程简介 第5章 单片机人机交互系统的C51语言编程 5.1 单片机的输入/输出端口 5.2 LED数码管显示器 5.3 LED数码管点阵显示器 5.4 液晶显示器 5.5 ...

  8. 丁向荣单片机pdf_单片机原理与应用(C语言版)——基于STC15W201S系列单片机 丁向荣 纺著 9787121246357...

    第1章 STC15W201S单片机结构与工作原理 1.1 微型计算机结构与单片机 1.1.1 微型计算机的基本结构与工作原理 1.1.2 单片机概述 1.2 STC15W201S单片机结构与工作原理 ...

  9. 51单片机键盘接口-独立按键和矩阵按键

    51单片机键盘接口-独立按键和矩阵按键 按键的分类 键输入原理 独立式键盘 矩阵键盘 消抖 键码识别 键盘程序 按键的分类 按键按照结构原理可分为两类:一类是触点式开关按键,如机械开关.导电橡胶开关等 ...

最新文章

  1. 新公司研发能力低下,何去何从?
  2. Centos 7 解压文件
  3. JavaScript二(第一个js程序)
  4. go post 参数_go语言实现网易云音乐爬虫
  5. linux系统取消自检,[转载]取消Linux启动自检
  6. 20071025-吉武
  7. 1标志图片_这四种情况将不再扣分罚款!11月起,全国高速统一限速标志
  8. CDH 元数据库升级
  9. python itertools.permutations_如何理解Python itertools.permutations中的全排列算法?
  10. springBoot学习(二) 基础运行原理
  11. 工作流之工单模型(一)
  12. anaconda安装pygame失败怎么下载
  13. java 定时调用api_java定时任务接口ScheduledExecutorService
  14. Android 项目必备(三十二)-->APP 项目产品介绍
  15. 【读书笔记】看你能坚持读几本书?!——三十本互联网必看书籍
  16. Pandas(七)--分组、合并和连接
  17. html5 audio duration,记一次vue中获取audio媒体总时长duration遇到的问题
  18. html加水平线紧挨文字,html怎么设置水平线与文字的距离
  19. bzoj1698 / P1606 [USACO07FEB]白银莲花池Lilypad Pond
  20. 如何给PDF删除空白页面?来看看这种方法

热门文章

  1. glassfish发布应用_WildFly 8与GlassFish 4 –选择哪个应用服务器
  2. 通过这5个简单的技巧减少GC开销
  3. stackexchange_通过Spring Social发推StackExchange问​​题
  4. junit 测试 dao_JUnit测试Spring Service和DAO(带有内存数据库)
  5. OSGi服务测试助手:ServiceCollector
  6. JDK 9 –给圣诞老人的信?
  7. Java EE + MongoDb与Apache TomEE和Jongo Starter项目
  8. 谨慎使用Hibernate中的本机SQL
  9. 宣布EAXY:在Java中简化XML
  10. EJB钝化和激活示例