面向对象的编程思想写单片机程序——(2)学习笔记 之 怎么抽象出结构体

系列文章目录

面向对象的编程思想写单片机程序——(1)学习笔记 之 程序设计
面向对象的编程思想写单片机程序——(2)学习笔记 之 怎么抽象出结构体
面向对象的编程思想写单片机程序——(3)学习笔记 之 程序分层、数据产生流程


怎么抽象出结构体

面向对象的编程思想写单片机程序——(1)学习笔记 之 程序设计中概述了面向对象的方法写单片机程序是实现程序高内聚、低耦合的方法,在 JAVA 编程中是将其封装成来实现高内聚的,而在单片机的编程中就是将其抽象成结构体了,那么该如何抽象出对应的结构体呢 ?? 本文将记录如何抽象出结构体。

1、将子系统抽象为结构体分析

本文以输入子系统为示例,记录如何抽象出结构体,下图是示例。如果有比较大的工程时,该如何写程序呢,使用面向对象的编程思想去写程序,增加了系统的可读性、可扩展性、可移植性,在对程序进行分层处理增加程序的兼容性。
在这里插入图片描述
如何抽象输入的结构体,使这个结构体支持多个输入方式呢 ? 接下来一起来看一下

要抽象出合适的结构体,就要找他们的属性功能;其中属性可以定义为变量功能可以定义为函数指针

按键、鼠标、触摸屏这三种输入方式的属性和功能如下:

  1. 按键 :判断哪个按键、按下、松开
  2. 鼠标 : x,y 方向上的位移,左键、右键、中键、滚轮
  3. 触摸屏 : x,y 方向上的位移,按下、松开
  4. 这三种类型的初始化,各自按下、松开实现的功能
  5. 产生数据的保存

以上这些都是我们在构建结构体时要考虑的因素,以下是基于上述因素抽象的结构体:

2、输入系统结构体

先定义输入的类型:


typedef enum
{
	INPUT_EVENT_TYPE_KEY;   //按键
	INPUT_EVENT_TYPE_MOUSE; //鼠标
	INPUT_EVENT_TYPE_TOUCH; //触摸屏
}INPUT_EVENT_TYPE;

在本输入系统中,定义了三个结构体,分别是:输入事件(属性),输入设备的函数(功能),存储输入事件的环形缓冲区。

来看具体结构体:

typedef struct IntputEvent{
	TIME_T time;                //定义时间类型,可以用来检测,按键单击、双击、长按、短按等。
	INPUT_EVENT_TYPE iType;     //定义类型
	int iX;            			//定义 x 方向
	int iY;           			//定义 y 方向
	int iKey;		 			//定义按键,可以是,左键、右键、中键等
	int iPressure;	            //定义压力,判断按键按下、松开
}IntputEvent, *p_IntputEvent;

typedef struct InputDevice{
	char * name;                                       // 类型名字
	int (*GetInputEvent)(p_IntputEvent pIntputEvent);  //struct IntputEvent * 类型
	int (*DeviceInit)(void);                           //初始化函数
	int (*DeviceExit)(void);                           //函数
	struct InputDevice * p_next;                       //指向下一个的地址,没错,这个结构体就是链表中的节点
}InputDevice, * p_InputDevice;
//  struct InputDevice 结构体是链表节点,将所有类型的设备串起来,形成一个链表,放在子系统中,可以快速定位,更能便利的添加删除设备

typedef struct 
{
	IntputEvent buffer[BUFFER_SIZE];   //环形缓冲区空间存储输入事件,可以宏定义 BUFFER_SIZE 的大小
	volatile unsigned int p_W;         //写地址
	volatile unsigned int p_R;         //读地址
}

以上就是输入子系统抽象出的结构体,可以兼容按键、鼠标、触摸屏等设备,以上结构体每句都进行了注释说明。


小结

本文主要讲述单片机程序的面向对象的编程思想中,针对如何抽象出对象设备的结构体,关于程序的分层以及数据产生流程问题,请持续关注本专栏。

学习百问网资源总结笔记。

本专栏文章:
面向对象的编程思想写单片机程序——(1)学习笔记 之 程序设计
面向对象的编程思想写单片机程序——(2)学习笔记 之 怎么抽象出结构体
面向对象的编程思想写单片机程序——(3)学习笔记 之 程序分层、数据产生流程

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C语言是一种面向过程的编程语言,但是在开发单片机时,我们可以运用一些编程技巧来实现面向对象编程思想。下面是一些实践方法和技巧: 1. 结构体:使用结构体可以将相关的数据和函数封装在一起,类似于面向对象中的对象。我们可以定义一个结构体来表示一个设备或模块,然后在结构体中定义该设备的属性和方法。 2. 函数指针:通过函数指针,我们可以在结构体中存储和调用函数。这样做可以使得结构体更加灵活,可以根据需要动态更改函数。 3. 抽象和封装:在设计单片机程序时,我们可以将功能分解为不同的模块,每个模块负责特定的功能。每个模块可以封装自己的变量和函数,并通过接口进行通信和协作。 4. 继承和多态:尽管C语言没有直接支持继承和多态,但可以通过一些技巧来模拟这些概念。比如,可以使用指向不同结构体的指针来实现多态,利用共享的接口来调用不同的函数。 5. 设计模式:面向对象编程强调抽象和模块化的设计方法,而设计模式提供了一些常见的解决方案。我们可以借鉴和应用一些设计模式,如单例模式、工厂模式等。 需要注意的是,C语言本身并不是面向对象的语言,因此我们没有办法像使用面向对象编程语言一样完全地享受到面向对象的好处。但是通过运用一些面向对象编程思想和技巧,我们可以在C语言开发单片机时,更好地组织和管理代码,提高代码的可维护性和重用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值