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

2023-05-16

系列文章目录

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • C#中的接口

    一 什么是接口 含义 xff1a 接口是指定一组函数成员而不实现它们的引用类型 xff08 只能用类和结构实现接口 xff09 接口可以包含实例方法 属性 事件 索引器或这四种成员类型的任意组合 接口可以包含静态构造函数 xff08 不能创
  • VINS-MONO工程改造

    这篇是接着前文 主流VIO VSLAM系统改造与工程化落地 和 关于VIO零速更新 ZUPT 与控制三种约束的工程实践 的 xff0c 有时候想一出是一出 xff0c 导致写的东西还是太分散了 要做VINS改造首先要熟悉VSLAM和数学基础
  • DM-VIO简析

    今天主要是针对DMVIO DM VIO的简析 xff0c 中文网上有的东西都太少了 xff0c 只能靠看完论文和组员们一起改代码 Lukas组这个东西在中文网被称为有史以来最好的VIO xff0c 但是实际过程中我们还是发现了许多不完美的地
  • Hao to setup windbg on windows10 LTSC img

    Windows host Debugger install windbg https developer microsoft com en us windows downloads windows 10 sdk download the i
  • VINS/VIO的并行化与工程化(GPU篇)

    最近更新的这2篇应该是比较重的了 xff0c 先做GPU篇 xff0c 再做DSP篇 先友情提醒 xff0c 这篇文章很重很费时 xff0c 对各种软硬算的知识要求多多 主体知识来源于UZH和ETH的研究者Balazs Nagy组 xff0
  • 关于机器人状态估计8-VSLAM工程与VIO工程难点

    最近做产设和综述把头都整晕了 xff0c 本来想认真更新GPU那篇DSP的姊妹篇 xff0c 突然觉得太长了实在是没有写的欲望 xff0c 还是写篇杂文算了 一看这个标题就知道 首先如果没有 关于机器人状态估计 4 成长路径与能力提升这块基
  • VIO/VINS/VSLAM问题定位流程与思路

    首先假设读者是了解基础VSLAM xff0c 了解VIO基础 至少要会标定 xff0c 调过几个开源系统的 先说一下双目的VINS FUSION xff0c 大部分问题都是基线造成的问题 xff0c 简单点说就是如果使用较短的基线如5cm
  • VIO/VINS中关于能观性/可观性的详细讲解

    以前大概写过一下 xff0c 太烂了 也是没什么人写 xff0c 再详细讲解一下 整体简洁一点尝试主要用文字说明这个比较关键的点 xff0c 其实整体和多传感器融合也有很大的关联 xff0c 无论是外感还是内感传感器 xff0c 无外乎从运
  • 关于机器人状态估计(10)-VSLAM与VIO的3D建图,重定位与世界观综述

    近期我国迎来了cov海啸 xff0c 其实我也不知道我羊了没有 xff0c 但并没有什么不舒服同时因为我没有测 xff0c 那自然是没有羊 xff0c 或者是薛定谔的羊 近年另外一块工作的综述 xff0c 这篇科普的同时 xff0c 也会包
  • 关于机器人状态估计(11)-VIO单目与双目/雷达Lidar SLAM/未来的机器人

    写这篇文章的时候刚发生行业大事件 xff1a Google收购ROS 其实一开始还是水 xff0c 绝对大量文不对题 xff0c 但是必有干货 xff0c 毕竟用的是这个关键的系列标题 最近有几件行业内发生的大小事 xff0c 让我觉得有必
  • Javaer都在用的Java后端面试笔记, 涵盖90%的主流技术,啃完分分钟拿下大厂offer!!

    到底该如何准备高级开发 架构师级别的面试 xff1f 为了帮助有需要的朋友在金九银十面试 xff0c 最近整理了一份面试知识点笔记复习资料 xff0c 内容包含 xff1a JVM xff0c JAVA多线程并发 xff0c Spring
  • 防火墙---firewalld

    Firewalld概述 支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具支持IPv4 IPv6防火墙设置以及以太网桥支持服务或应用程序直接添加防火墙规则接口拥有两种配置模式 xff1a 运行时配置永久配置 firewalld
  • Linux系统的初次使用

    在linux中安装JDK 1 安装xftp7 从windows上传输一个JDK到Linux中 opt apps下 2 对 opt apps下的JDK压缩包进行解压 tar zxvf jdk 8u191 linux x64 tar gz 3
  • C语言加强篇——(1)学习笔记 之 变量、指针、关键字

    系列文章目录 C语言加强篇 xff08 1 xff09 学习笔记 之 变量 指针 关键字 C语言加强篇 xff08 2 xff09 学习笔记 之 结构体 结构体指针 函数指针 C语言加强篇 xff08 3 xff09 学习笔记 之 链表的增
  • linux/unix系统下IOZONE/iozone磁盘性能测试工具方法

    IOZONE主要用来测试操作系统文件系统性能的测试工具 xff0c 该工具所测试的范围主要有 xff0c write Re write Read Re Read Random Read Random Write Random Mix Bac
  • C语言加强篇——(2)学习笔记 之 结构体、结构体指针、函数指针

    系列文章目录 C语言加强篇 xff08 1 xff09 学习笔记 之 变量 指针 关键字 C语言加强篇 xff08 2 xff09 学习笔记 之 结构体 结构体指针 函数指针 C语言加强篇 xff08 3 xff09 学习笔记 之 链表的增
  • C语言加强篇——(3)学习笔记 之 链表的增、删、改、查

    系列文章目录 C语言加强篇 xff08 1 xff09 学习笔记 之 变量 指针 关键字 C语言加强篇 xff08 2 xff09 学习笔记 之 结构体 结构体指针 函数指针 C语言加强篇 xff08 3 xff09 学习笔记 之 链表的增
  • 面向对象的编程思想写单片机程序——(2)学习笔记 之 怎么抽象出结构体

    系列文章目录 面向对象的编程思想写单片机程序 xff08 1 xff09 学习笔记 之 程序设计 面向对象的编程思想写单片机程序 xff08 2 xff09 学习笔记 之 怎么抽象出结构体 面向对象的编程思想写单片机程序 xff08 3 x
  • 面向对象的编程思想写单片机程序——(1)学习笔记 之 程序设计

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

    系列文章目录 面向对象的编程思想写单片机程序 xff08 1 xff09 学习笔记 之 程序设计 面向对象的编程思想写单片机程序 xff08 2 xff09 学习笔记 之 怎么抽象出结构体 面向对象的编程思想写单片机程序 xff08 3 x