rtt设备io框架面向对象学习-输入捕捉设备

目录

        • 1.输入捕捉设备基类
        • 2.输入捕捉设备基类的子类
        • 3.初始化/构造流程
          • 3.1设备驱动层
          • 3.2 设备驱动框架层
          • 3.3 设备io管理层
        • 4.总结
1.输入捕捉设备基类

此层处于设备驱动框架层。也是抽象类。

在/ components / drivers / include / drivers 下的rt_inputcapture.h定义了如下输入捕捉设备基类struct rt_inputcapture_device

{

struct rt_device parent;

const struct rt_inputcapture_ops *ops;

struct rt_ringbuffer *ringbuff;

rt_size_t watermark;

};

这里用到了rtt的ringbuffer

输入捕捉设备基类的方法定义如下

struct rt_inputcapture_ops

{

rt_err_t (*init)(struct rt_inputcapture_device *inputcapture);

rt_err_t (*open)(struct rt_inputcapture_device *inputcapture);

rt_err_t (*close)(struct rt_inputcapture_device *inputcapture);

rt_err_t (*get_pulsewidth)(struct rt_inputcapture_device *inputcapture, rt_uint32_t *pulsewidth_us);

};

抽象出来共性成为输入捕捉设备基类的方法。

2.输入捕捉设备基类的子类

各个输入捕捉设备基类的子类,需要在驱动层(bsp)来实现,此类是实现类。

3.初始化/构造流程

暂无实例。

3.1设备驱动层

此层是驱动层,也是bsp所在,此层的类也是可以实例化的实现类。

c文件:

暂无实例。

3.2 设备驱动框架层

rt_device_inputcapture_register是输入捕捉设备驱动框架层的入口,开启输入捕捉设备基类的构造/初始化流程。

/ components / drivers / misc 下的rt_inputcapture.c实现了设备驱动框架层接口。

重写了输入捕捉设备基类的父类------设备基类------的方法如下

#ifdef RT_USING_DEVICE_OPS

device->ops = &inputcapture_ops;

#else

device->init = rt_inputcapture_init;

device->open = rt_inputcapture_open;

device->close = rt_inputcapture_close;

device->read = rt_inputcapture_read;

device->write = RT_NULL;

device->control = rt_inputcapture_control;

#endif

并最终调用设备基类的初始化/构造函数rt_device_register。

3.3 设备io管理层

在/ components / drivers / core 下的device.c中实现了rt_device_register,它是io管理层的入口。

它将stm32输入捕捉设备对象放到对象容器里管理。

4.总结

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

这样的好处是可扩展,如搭积木似的,也是对内封闭,对外开放,扩展性好,模拟的是面向对象的继承多态机制。

其实每个类的注册函数模拟的是面向对象的构造函数。#### 5.使用
文档

注意:暂无说明。目前待实现(文档和stm32中都没有)。

相关推荐
ctlover2 小时前
Python学习第 5 日
学习
六点_dn2 小时前
RabbitMQ学习笔记-部署和使用
笔记·学习·rabbitmq
MartinYeung55 小时前
[论文学习]OSReward:为跨平台计算机使用奖励模型建立标准化评估
人工智能·学习
dong1326975 小时前
Agent Skills学习笔记
笔记·学习
for_ever_love__5 小时前
iOS:网络请求再学习
网络·学习·ios·objective-c
世人万千丶6 小时前
鸿蒙Crash高级捕获与异常监控:全局异常兜底/崩溃栈解析/符号表还原/智能聚类/闭环修复
学习·机器学习·华为·数据挖掘·harmonyos·鸿蒙·聚类
Jul1en_6 小时前
【Claude Code Compact】源码级别的学习上下文压缩
java·前端·学习·github·ai编程
fengci.6 小时前
Microweber CMS 未授权路径穿越漏洞(CVE-2026-65694)
android·开发语言·前端·学习·php
m4Rk_7 小时前
【论文阅读】Agent 记忆机制(28):MEM1——将记忆压缩融入推理,实现近似恒定上下文的长程智能体
论文阅读·人工智能·学习·开源·github
一只小菜鸡..7 小时前
南京大学 操作系统 (JYY) 学习笔记:持久化的黑魔法——从磁铁、刻坑到闪存电荷
服务器·笔记·学习