系列文章目录
面向对象的编程思想写单片机程序——(1)学习笔记 之 程序设计
面向对象的编程思想写单片机程序——(2)学习笔记 之 怎么抽象出结构体
面向对象的编程思想写单片机程序——(3)学习笔记 之 程序分层、数据产生流程
怎么抽象出结构体
在面向对象的编程思想写单片机程序——(1)学习笔记 之 程序设计中概述了面向对象的方法写单片机程序是实现程序高内聚、低耦合的方法,在 JAVA 编程中是将其封装成类来实现高内聚的,而在单片机的编程中就是将其抽象成结构体了,那么该如何抽象出对应的结构体呢 ?? 本文将记录如何抽象出结构体。
1、将子系统抽象为结构体分析
本文以输入子系统为示例,记录如何抽象出结构体,下图是示例。如果有比较大的工程时,该如何写程序呢,使用面向对象的编程思想去写程序,增加了系统的可读性、可扩展性、可移植性,在对程序进行分层处理增加程序的兼容性。
![在这里插入图片描述](https://img-blog.csdnimg.cn/fd6aae3a823f4b62a7637b84a38d6868.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bWM5YWl5byP5bCP55m95LmL6L-b6Zi25LmL6Lev,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
如何抽象输入的结构体,使这个结构体支持多个输入方式呢 ? 接下来一起来看一下
要抽象出合适的结构体,就要找他们的属性和功能;其中属性可以定义为变量;功能可以定义为函数指针。
按键、鼠标、触摸屏这三种输入方式的属性和功能如下:
- 按键 :判断哪个按键、按下、松开
- 鼠标 : x,y 方向上的位移,左键、右键、中键、滚轮
- 触摸屏 : x,y 方向上的位移,按下、松开
- 这三种类型的初始化,各自按下、松开实现的功能
- 产生数据的保存
以上这些都是我们在构建结构体时要考虑的因素,以下是基于上述因素抽象的结构体:
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;
int iY;
int iKey;
int iPressure;
}IntputEvent, *p_IntputEvent;
typedef struct InputDevice{
char * name;
int (*GetInputEvent)(p_IntputEvent pIntputEvent);
int (*DeviceInit)(void);
int (*DeviceExit)(void);
struct InputDevice * p_next;
}InputDevice, * p_InputDevice;
typedef struct
{
IntputEvent buffer[BUFFER_SIZE];
volatile unsigned int p_W;
volatile unsigned int p_R;
}
以上就是输入子系统抽象出的结构体,可以兼容按键、鼠标、触摸屏等设备,以上结构体每句都进行了注释说明。
小结
本文主要讲述单片机程序的面向对象的编程思想中,针对如何抽象出对象设备的结构体,关于程序的分层以及数据产生流程问题,请持续关注本专栏。
学习百问网资源总结笔记。
本专栏文章:
面向对象的编程思想写单片机程序——(1)学习笔记 之 程序设计
面向对象的编程思想写单片机程序——(2)学习笔记 之 怎么抽象出结构体
面向对象的编程思想写单片机程序——(3)学习笔记 之 程序分层、数据产生流程
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)