面向对象的编程思想写单片机程序——(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)学习笔记 之 程序分层、数据产生流程
面向对象的编程思想写单片机程序——(3)学习笔记 之 程序分层、数据产生流程相关推荐
- 面向对象高级编程(上)-- 第一周学习笔记(Boolan)
培养正规的.大气的编程习惯 一.C++简介 1,分类 C++分为基于对象和面向对象两种 基于对象是指简单的类定义,数据封装,没有类与类的联系,面对的是单一class的设计.又可细分为不带指针的类和带指 ...
- 非理工科编程零基础文科生秒懂python学习笔记:pandas库数据表格创建和运算基础有哪些?
#dataframe的数据类型 #每行的数据类型可以不一样 #行索引为index 等同于excel表格最左边的1.2.3.4 #列索引为column 等同于excel表格最顶端的A|B|C|D|E # ...
- 学习Java第一天:1、Java是什么?2、面向对象的编程思想的特点 3、Java的开发工具 4、安装JDK和配置环境变量 5、Java程序的运行过程 6、Java语言的特点
目录 1.Java是什么? 2.面向对象的编程思想的特点 3.Java的开发工具 4.安装JDK和配置环境变量 5.Java程序的运行过程 6.Java语言的特点 1.Java是什么? java是一门 ...
- 200819C阶段一C++面向对象的编程思想
目录 一.学习的知识点 作业 面向对象的编程思想 类与对象 类 二.上课没有听懂或者没有理解的地方 三.当天学习的收获 四.作业的思路.不会的地方 五.其他需要反馈的问题 六.心得体会 一.学习的知识 ...
- 在ASP.NET中面向对象的编程思想
首先,我们还是来谈一下面向对象的编程思想吧.我想现在的主流编程思想无非两种:结构与面向对象.以前,在ASP中我们完全采用的是结构化思想.现在,asp.net可以完全支持面向对象的编程思想,这不得不说是 ...
- 浅谈面向对象的编程思想:如何优雅地把大象装进冰箱?
许多人刚学编程时,想必都听到过这样的话:"*语言是面向对象的,而***语言是面向过程的".那时的新人还懵懵懂懂,就被大牛或者书上的大牛骗去学了一种听起来很厉害的语言,然而学了半 ...
- 包的概念以及面向对象的编程思想
上一篇:无头双向链表的实现 一. 包 1. 基本概念 包 :本质上就是用文件夹来管理java文件的.是组织类的一种方式. 包是有规范的:包的命名一般全都是小写:并且一般是倒着写的. www.baidu ...
- 面向过程和面向对象的编程思想 复习原型 构造函数和实例对象和原型对象之间的关系
体会面向过程和面向对象的编程思想 <!DOCTYPE html> <html lang="en"> <head><meta charset ...
- python完全支持面向对象编程思想_面向对象的编程思想和Python的继承和多态,特殊方法,引用计数...
面向对象的编程思想和Python的类,访问和属性,继承 在上一文中我们了解到了,私有的属性的访问方式:实例名._类名__私有属性名. 一.私有的属性如何对外提供公有的取值和赋值方法呢?提供公有的方法作 ...
最新文章
- Science子刊:植物所杨元合组揭示矿物保护和微生物属性对冻土碳动态的关键调控作用...
- 电脑电池修复_笔记本电脑不充电是怎么回事?
- WinPcap编程入门实践
- SparkProgrammingRDDs
- MyEclipse下Tomcat启动变慢的解决方法
- 丁奇 mysql_丁奇-MySQL实战读书笔记4
- c#基础知识总结学习
- VS C++/ClI调用C++ 外部Dll无法查看变量值
- mac json工具_工具类封装的思路 | 钉钉群机器人为例
- 大数据---(3)金融数据架构
- 【Ranger】mac下Apache Ranger编译安装
- 480.滑动窗口中位数
- windows下搭建voip服务器
- mybatis-缓存
- 怎样将PDF作为矢量图插入PPT中
- python中abs函数是什么意思_python abs函数怎么用
- 三菱凌云3故障代码_上海三菱凌云2故障代码
- 渺小的个体不能体会之孤独
- 《数论概论》读书笔记(第一章) 什么是数论?
- 程序员面试必备软技能,值得收藏!