rtt设备io框架面向对象学习-软件模拟rtc设备

目录

        • 1.软件rtc设备实现类
        • 2.软件rtc设备类的子类
        • 3.初始化/构造流程
          • 3.1 设备驱动框架层
          • 3.3 设备io管理层
        • 4.总结
        • 5.使用

硬件rtc和软件rtc设备是互斥的。因为它们的名字都叫"rtc",在对象容器中不允许重名。

软件rtc设备比较特殊,不依赖于任何硬件,所以它是硬件无关的,所以不需要各个bsp去实现的所以它没有驱动层,只在设备驱动框架层就完成了。

1.软件rtc设备实现类

软件rtc设备比较特殊,直接设备驱动框架层实现了。

在/ components / drivers / rtc / soft_rtc.c实例化了软件rtc设备类
static struct rt_device soft_rtc_dev;

软件rtc设备类可以认为继承自设备基类,只是没有任何自己的私有方法而已。

2.软件rtc设备类的子类

无。
因为软件rtc设备比较特殊,不依赖于任何硬件,所以它是硬件无关的,所以不需要各个bsp去实现的所以它没有驱动层,只在设备驱动框架层就完成了。

3.初始化/构造流程

软件rtc设备对象的构造流程是通用的,且只是从设备驱动框架层到设备io管理层的构造。

3.1 设备驱动框架层

/ components / drivers /rtc/soft_rtc.c实现了实例化了软件rtc设备对象,
rt_soft_rtc_init开启软件rtc设备对象的构造流程:
先重写了rtc设备基类的父类——设备基类——的方法:
#ifdef RT_USING_DEVICE_OPS
soft_rtc_dev.ops = &soft_rtc_ops;
#else
soft_rtc_dev.init = RT_NULL;
soft_rtc_dev.open = RT_NULL;
soft_rtc_dev.close = RT_NULL;
soft_rtc_dev.read = RT_NULL;
soft_rtc_dev.write = RT_NULL;
soft_rtc_dev.control = soft_rtc_control;
#endif

然后调用设备基类的构造函rt_device_register开启设备基类的构造流程。

3.3 设备io管理层

在/ components / drivers / core 下的device.c中实现了rt_device_register,它是io管理层的入口。
它将软件rtc设备对象放到对象容器里管理。

4.总结

整个设备对象的构造/初始化流程其实是对具体设备对象也就是结构体进行初始化赋值——它这个结构体是包含一个个的结构体——模拟的是面向对象的继承机制。跟套娃似的,层层进行初始化。这样的好处是什么?每层有每层的初始化(构造)函数,就模拟了面向对象的构造函数——按照先调用子类构造/初始化函数,再调用父类的构造/初始化函数方式——其实也是子类构造/初始化函数调用父类构造/初始化函数的流程,来完成设备对象的初始化/构造。最终放到对象容器里来管理。
这样的好处是可扩展,如搭积木似的,也是对内封闭,对外开放,扩展性好,模拟的是面向对象的继承多态机制。

其实每个类的注册函数模拟的是面向对象的构造函数。

5.使用

文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/687235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Anaconda修改虚拟环境的路径

新版本的anaconda会默认将虚拟环境配置在C盘下,默认的路径是C:\Users\username。同时anaconda3下envs目录是空的。 这里是建立虚拟环境是将路径修改到anaconda的方法。 第一步——修改.condarc文件 首先,C:\Users\username找到.condarc文件 添加或修…

洛谷P5714 肥胖问题 题解

#题外话(第25篇题解) #先看题目 题目链接https://www.luogu.com.cn/problem/P5714 特别的,对于Microsoft Edge浏览器,其自带有截长图引擎,路径为三个点→截图→选定后下拉即可,浏览器会自动为你下拉并选中…

Code Composer Studio (CCS) - Comment (注释)

Code Composer Studio [CCS] - Comment [注释] References Add Block Comment: 选中几行代码 -> 鼠标右键 -> Source -> Add Block Comment shortcut key: Ctrl Shift / Remove Block Comment: 选中几行代码->鼠标右键->Source->Remove Block Comment s…

Unity类银河恶魔城学习记录7-6 P72 Bouncy sword源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Sword_Skill_Controller.cs using System.Collections; using System.Colle…

相机图像质量研究(32)常见问题总结:图像处理对成像的影响--振铃效应

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…

CSS概述 | CSS的引入方式 | 选择器

文章目录 1.CSS概述2.CSS的引入方式2.1.内部样式表2.2.行内样式表2.3.外部样式表 3.选择器 1.CSS概述 CSS,全称Cascading Style Sheets(层叠样式表),是一种用来设置HTML(或XML等)文档样式的语言。CSS的主要…

c# 二叉树

在 C# 中,二叉树是一种常见的数据结构,它由节点组成,每个节点最多有两个子节点:左子节点和右子节点。在 C# 中,可以使用类来实现二叉树的节点,并且通过引用连接节点来构建整棵树。 以下是一个简单的示例&a…

C++中的拷贝构造函数和深拷贝、浅拷贝,如何在C++中实现类和对象的序列化与反序列化?

C中的拷贝构造函数和深拷贝、浅拷贝 拷贝构造函数: 拷贝构造函数是一种特殊的构造函数,它接受一个对其同类的常量引用作为参数,并用于初始化新创建的对象。其主要作用是实现一个类的对象到另一个相同类型对象的拷贝。 拷贝构造函数的原型通常…

SG3225EAN规格书

SG3225EAN 晶体振荡器利用先进的锁相环技术和AT切割晶体单元,提供了宽频率范围和高性能LV-PECL输出,73.5 MHz至700 MHz的宽频率范围,能够保证高稳定性和宽频率调整的能力,适应于多样化的应用需求。2.5V和3.3V两种供电电压&#xf…

win10 环境下Python 3.8按装fastapi paddlepaddle 进行图片文字识别1

###按装 用conda 创建python 3.8的环境,可参看本人python下的其它文章。 在pycharm开发环境下按装相关的模块: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple fastapi pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "uvi…

StarRocks表设计——分区分桶与副本数

目录 一、数据分布 1.1 概述 1.2 数据分布方式 1.2.1 Round-Robin 1.2.2 Range 1.2.3 List 1.2.4 Hash 1.3 StarRocks的数据分布方式 1.3.1 不分区 Hash分桶 1.3.2 Range分区Hash分桶 三、分区 3.1 分区概述 3.2 创建分区 3.2.1 手动创建分区 3.2.2 批量创建分区…

【教学类-19-10】20240214《ABAB式-规律黏贴18格-手工纸15*15CM-一页3种图案,AB一组样板,纵向、有边框》(中班)

背景需求 利用15*15CM手工纸制作AB色块手环(手工纸自带色彩),一页3个图案,2条为一组,画图案,黏贴成一个手环。 素材准备 代码展示 # # 作者:阿夏 # 时间:2024年2月14日 # 名称&…

云计算基础 -NUMA

UMA UMA中文翻译叫:一致性内存访问 多个CPU通过同一根前端总线(FSB)来访问内存(所有的内存访问都需要通过北桥芯片来完成),若多个CPU访问内存的不同内存单元还是相同内存单元,同一时刻&#x…

[dlib][python]dlib所有whl文件下载地址汇总

python3.12轮子dlib-19.24.2-cp312-cp312-macosx-10-9-x86-64.whl下载地址 https://download.csdn.net/download/FL1623863129/88582377 python3.12轮子dlib-19.24.2-cp312-cp312-macosx-11-0-arm64.whl下载地址 https://download.csdn.net/download/FL1623863129/88582372 pyt…

机器学习中的10种非线性降维技术对比总结

降维意味着我们在不丢失太多信息的情况下减少数据集中的特征数量,降维算法属于无监督学习的范畴,用未标记的数据训练算法。 尽管降维方法种类繁多,但它们都可以归为两大类:线性和非线性。 线性方法将数据从高维空间线性投影到低维空间(因此…

计算机设计大赛 深度学习YOLO抽烟行为检测 - python opencv

文章目录 1 前言1 课题背景2 实现效果3 Yolov5算法3.1 简介3.2 相关技术 4 数据集处理及实验5 部分核心代码6 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习YOLO抽烟行为检测 该项目较为新颖,适合作为竞赛课…

多线程---线程同步,线程通信

线程同步 1.概述 线程同步是多线程编程中的一个重要概念,它指的是在多线程环境中,通过一定的机制保证多个线程按照某种特定的方式正确、有序地执行。这主要是为了避免并发问题,如死锁、竞态条件、资源争用等,确保数据的一致性和完…

Leetcode-1523. 在区间范围内统计奇数数目

题目: 给你两个非负整数 low 和 high 。请你返回 low 和 high 之间(包括二者)奇数的数目。 示例 1: 输入:low 3, high 7 输出:3 解释:3 到 7 之间奇数数字为 [3,5,7] 。 示例 2: 输…

中国电子学会2023年09月真题C语言软件编程等级考试一级(含解析答案)

中国电子学会考评中心历届真题(含解析答案) C语言软件编程等级考试一级 2023年09月 编程题五道 总分:100分一、日期输出(20分) 给定两个整数,表示一个日期的月和日。请按照“MM-DD”的格式输出日期&#xff0c…

【Java基础面试题】

目录 前言 1.1 为什么Java代码可以实现一次编写、到处运行? 1.2 一个Java文件里可以有多个类吗(不含内部类)? 1.3 说一说你对Java访问权限的了解 1.4 介绍一下Java的数据类型 1.5 int类型的数据范围是多少? 1.6…