900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 面向对象的编程思想写单片机程序——(3)学习笔记 之 程序分层 数据产生流程

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

时间:2020-09-18 07:56:05

相关推荐

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

系列文章目录

面向对象的编程思想写单片机程序——(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)学习笔记 之 程序分层、数据产生流程

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。