面向对象的编程思想写单片机程序——(3)学习笔记 之 程序分层、数据产生流程

  • Post author:
  • Post category:其他




系列文章目录


面向对象的编程思想写单片机程序——(1)学习笔记 之 程序设计



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



面向对象的编程思想写单片机程序——(3)学习笔记 之 程序分层、数据产生流程




程序分层

通过面向对象的编程思想来编程单片机程序,可以增强程序的可移植性,对于初入嵌入式单片机行业的小白,也更容易转向嵌入式Linux方向,对于如何抽象对于的结构体相关文章在本专栏前两篇,通过程序分层可以有效的将硬件与软件进行隔离,本文主要记录如何对程序进行分层,增加程序的兼容性。

本文以上一篇的输入设备的例子为例,来写如何进行程序分层:

在这里插入图片描述

输入针对输入系统可分为以下4层:

在这里插入图片描述

对输入设备初始化可分为4层,本文以

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

文章中已抽象出来的结构体为例来写如何分层。



1、管理层

初始化函数管理层代码如下:

void Init_InputDevice(void){
	p_InputDevice pDev = g_pInputDevice;  //g_pInputDevice  为自己定义的结构体类型
	while(pDev){
		pDev->DeviceInit();  //执行具体设备层的初始化函数
		pDev = pDev->p_next;
	}
}

g_pInputDevice 是结构体指针类型,可以通过自己定义赋值,也可以通过函数来获得设备。



2、具体设备层

初始化函数具体设备层代码如下:

static int GPIOKeyInit(void)
{
	KAL_GPIOKeyInit();  //调用下一层(KAL层)初始化函数
	return 0;
}

static InputDevice g_KeyDevice = {  //为按键构造一个结构体
	"GPIO_Key",            
	NULL, 
	GPIOKeyInit,                       
	NULL,                     
	NULL       
};

可为具体设备构造一个结构体,也可以自己写一个添加具体设备的函数。



3、内核抽象(KAL)层

初始化函数内核抽象(KAL)层代码如下:

void KAL_GPIOKeyInit(void)
{
#if defined(CONFIG_NORTOS)  //如果配置  CONFIG_NORTOS  执行 CAL_GPIOKeyInit();  
	CAL_GPIOKeyInit();    //调用下一层(CAL层)初始化函数
#elif defined(CONFIG_FREERTOS)
	FreeRTOS_GPIOKeyInit();
#elif defined(CONFIG_RTTREAD)
	RTTread_GPIOKeyInit();
}

根据不同的操作系统、不同的宏定义,执行不同的初始化函数;



4、芯片抽象(CAL)层

初始化函数芯片抽象(KAL)层代码如下:

void CAL_GPIOKeyInit(void)
{
#if defined(CONFIG_ST_HAL)  //如果配置  CONFIG_ST_HAL 执行 
	KEY_GPIO_ST_Init();    // 对于 ST 芯片 
#else 
	KEY_GPIO_Re_Init();    //其他系列
#endif

}

可以根据不同系列的芯片、HAL库(标准库)等,来执行不同的初始化函数。

通过程序这样的分层可提高程序的兼容性,

不同的操作系统、不同系列的芯片、不同的输入设备,分别执行不同的程序。

还可以

通过管理层对外提供两个接口(新增设备、初始化),通过新增设备可以添加不同的输入设备,并将这些设备利用链表保存起来;



数据产生流程

具体程序执行过程如下图:

在这里插入图片描述




小结

本文主要讲述单片机程序的面向对象的编程思想中,程序如何进行分层。感谢各位观看。

学习

百问网资源

总结笔记。

本专栏文章:


面向对象的编程思想写单片机程序——(1)学习笔记 之 程序设计



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



面向对象的编程思想写单片机程序——(3)学习笔记 之 程序分层、数据产生流程



版权声明:本文为weixin_67090148原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。