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.使用

文档

相关推荐
AI绘画哇哒哒2 小时前
【收藏必看】大模型智能体六大设计模式详解:从ReAct到Agentic RAG,构建可靠AI系统
人工智能·学习·ai·语言模型·程序员·产品经理·转行
小奶包他干奶奶6 小时前
Webpack学习——Loader(文件转换器)
前端·学习·webpack
小奶包他干奶奶6 小时前
Webpack学习——原理理解
学习·webpack·devops
励志成为美貌才华为一体的女子7 小时前
强化学习PPO和GRPO逻辑学习
学习
meichaoWen7 小时前
【Vue3】vue3的全面学习(一)
前端·javascript·学习
FFF团团员9097 小时前
树莓派学习笔记3:LED和Button
笔记·学习
wdfk_prog10 小时前
[Linux]学习笔记系列 -- [block]bio
linux·笔记·学习
90848690512 小时前
文旅业务相关前沿技术应用
学习·产品经理
GIS学姐嘉欣12 小时前
地信、测绘、遥感等专业免费学习网站推荐
学习·gis开发·webgis
今天你TLE了吗14 小时前
Stream流学习总结
java·学习