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

文档

相关推荐

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

    2024-02-18 06:02:04       38 阅读
  2. rtt设备io框架面向对象学习-硬件rtc设备

    2024-02-18 06:02:04       37 阅读
  3. rtt设备io框架面向对象学习-看门狗设备

    2024-02-18 06:02:04       35 阅读
  4. rtt设备io框架面向对象学习-adc设备

    2024-02-18 06:02:04       33 阅读
  5. rtt设备io框架面向对象学习-输入捕捉设备

    2024-02-18 06:02:04       38 阅读
  6. rtt设备io框架面向对象学习-uart设备

    2024-02-18 06:02:04       34 阅读
  7. rttIO设备框架面向对象学习-oopc实现特点

    2024-02-18 06:02:04       18 阅读
  8. RTT设备驱动框架学习(GPIO)

    2024-02-18 06:02:04       15 阅读
  9. RTT设备驱动框架学习(UART)

    2024-02-18 06:02:04       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-18 06:02:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-18 06:02:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-18 06:02:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-18 06:02:04       20 阅读

热门阅读

  1. 排序算法部分总结

    2024-02-18 06:02:04       30 阅读
  2. 2024前端面试准备之HTML篇

    2024-02-18 06:02:04       31 阅读
  3. vue watch监听

    2024-02-18 06:02:04       38 阅读
  4. Vue路由

    Vue路由

    2024-02-18 06:02:04      28 阅读
  5. 防火墙HA详解

    2024-02-18 06:02:04       27 阅读
  6. 阿里云服务器安装MySQL、Apache、PHP

    2024-02-18 06:02:04       23 阅读
  7. linux ubuntu Mysql 安装指南

    2024-02-18 06:02:04       27 阅读
  8. git常用命令

    2024-02-18 06:02:04       27 阅读
  9. Hadoop-Yarn-NodeManager都做了什么

    2024-02-18 06:02:04       27 阅读
  10. 【Hadoop】Yarn 任务管理指令

    2024-02-18 06:02:04       25 阅读
  11. 作业2.14

    2024-02-18 06:02:04       22 阅读
  12. CSS transition(过渡效果)详解

    2024-02-18 06:02:04       27 阅读