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

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

系列文章目录

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

文章目录
  • 系列文章目录
  • 程序分层
    • 1、管理层
    • 2、具体设备层
    • 3、内核抽象(KAL)层
    • 4、芯片抽象(CAL)层
  • 数据产生流程
  • 小结


程序分层

通过面向对象的编程思想来编程单片机程序,可以增强程序的可移植性,对于初入嵌入式单片机行业的小白,也更容易转向嵌入式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)学习笔记 之 程序分层、数据产生流程

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/735236.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存