常用于单片机的接口适配器模式C语言实现
一般实现
在我们做项目的时候,一般的实现,可能我们会这样写代码
// FileName: test.c// 来源:公众号【技术让梦想更伟大】#include#include “ExternModule.h”
int main(void){/*初始化*/ vAllInit(); while(1) { /*项目逻辑*/ vLogicModule1(); vLogicModule2(); }}
在其外部文件中,调用相对应的初始化函数以及逻辑函数,但是当我们项目很复杂的时候,逻辑关系也层层覆盖、交替的时候,这样的写法就有些不是很好看了。
接口适配器
首先我们还是要来定义数据结构,一般这样的项目分为这样几个步骤:
初始化
输入
处理
输出
我们把这四个步骤封装起来,再定义数据结构如下:
// 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语言实现相关推荐
- 【学习笔记】JDBC:java提供的专门操纵数据库的API JDBC驱动程序的类型 JDBC常用的类与接口
JDBC技术 JDBC的全称是Java DataBase Connectivity,是一套面向对象的应用程序接口,指定了统一的访问各种关系型数据库的标准接口,JDBC是一种底层的API,因此访问数据库 ...
- 单片机应用技术c语言版第4版答案,单片机应用技术(C语言版)第4版
本书在第3版得到全国广大院校教师与学生的欢迎和使用基础上,结合行业新技术发展和课程组近年来取得的课程改革成果,在充分和认真听取广大师生及职教专家的意见和建议后,在保留原教材主体内容与特色的前提下,对其 ...
- 液晶显示屏的C语言编码,单片机液晶汉字显示c语言程序
单片机液晶汉字显示c语言程序 单片机液晶汉字显示c语言程序 /*液晶屏分为4行*12列汉字,全部使用模拟接口方式. /* TGLCMLIMIT64A接口程序(模拟方式) ;************** ...
- c51语言的数据存储模式,第5章项目三单片机存储结构及C51语言.ppt
第5章项目三单片机存储结构及C51语言 项目三 基本功 任务一 MCS-51单片机基础 任务二 单片机C51语言程序设计基础 二.MCS-51单片机存储器及存储空间 1.存储器的概念 什么是存储器呢? ...
- 硬件基础:台式电脑上的常用的几个接口!
今天给大家详细讲解台式电脑上的常用的几个接口! 1.I/O接口部分 下图所有的接口,也是我们机箱后面的接口,统称为:I/O接口. 2.键鼠PS/2 PS/2接口是I/O接口中比较常见的一种接口,用来连 ...
- 硬件:详细讲解台式电脑上的常用的几个接口!
详细讲解台式电脑上的常用的几个接口! I/O接口部分 下图所有的接口,也是我们机箱后面的接口,统称为:I/O接口. 键鼠PS/2 PS/2接口是I/O接口中比较常见的一种接口,用来连接键盘和鼠标,二者 ...
- c语言人机互动编程,单片机人机交互系统的C语言编程简介.ppt
单片机人机交互系统的C语言编程简介 第5章 单片机人机交互系统的C51语言编程 5.1 单片机的输入/输出端口 5.2 LED数码管显示器 5.3 LED数码管点阵显示器 5.4 液晶显示器 5.5 ...
- 丁向荣单片机pdf_单片机原理与应用(C语言版)——基于STC15W201S系列单片机 丁向荣 纺著 9787121246357...
第1章 STC15W201S单片机结构与工作原理 1.1 微型计算机结构与单片机 1.1.1 微型计算机的基本结构与工作原理 1.1.2 单片机概述 1.2 STC15W201S单片机结构与工作原理 ...
- 51单片机键盘接口-独立按键和矩阵按键
51单片机键盘接口-独立按键和矩阵按键 按键的分类 键输入原理 独立式键盘 矩阵键盘 消抖 键码识别 键盘程序 按键的分类 按键按照结构原理可分为两类:一类是触点式开关按键,如机械开关.导电橡胶开关等 ...
最新文章
- 新公司研发能力低下,何去何从?
- Centos 7 解压文件
- JavaScript二(第一个js程序)
- go post 参数_go语言实现网易云音乐爬虫
- linux系统取消自检,[转载]取消Linux启动自检
- 20071025-吉武
- 1标志图片_这四种情况将不再扣分罚款!11月起,全国高速统一限速标志
- CDH 元数据库升级
- python itertools.permutations_如何理解Python itertools.permutations中的全排列算法?
- springBoot学习(二) 基础运行原理
- 工作流之工单模型(一)
- anaconda安装pygame失败怎么下载
- java 定时调用api_java定时任务接口ScheduledExecutorService
- Android 项目必备(三十二)-->APP 项目产品介绍
- 【读书笔记】看你能坚持读几本书?!——三十本互联网必看书籍
- Pandas(七)--分组、合并和连接
- html5 audio duration,记一次vue中获取audio媒体总时长duration遇到的问题
- html加水平线紧挨文字,html怎么设置水平线与文字的距离
- bzoj1698 / P1606 [USACO07FEB]白银莲花池Lilypad Pond
- 如何给PDF删除空白页面?来看看这种方法
热门文章
- glassfish发布应用_WildFly 8与GlassFish 4 –选择哪个应用服务器
- 通过这5个简单的技巧减少GC开销
- stackexchange_通过Spring Social发推StackExchange问​​题
- junit 测试 dao_JUnit测试Spring Service和DAO(带有内存数据库)
- OSGi服务测试助手:ServiceCollector
- JDK 9 –给圣诞老人的信?
- Java EE + MongoDb与Apache TomEE和Jongo Starter项目
- 谨慎使用Hibernate中的本机SQL
- 宣布EAXY:在Java中简化XML
- EJB钝化和激活示例