目录
- 1.软件rtc设备实现类
- 2.软件rtc设备类的子类
- 3.初始化/构造流程
- 3.1 设备驱动框架层
- 3.3 设备io管理层
- 4.总结
- 5.内部调用流程
- 6.应用程序使用流程
硬件rtc和软件rtc设备是互斥的。因为它们的名字都叫"rtc",在对象容器中不允许重名。
软件rtc设备比较特殊,不依赖于任何硬件,所以它是硬件无关的,所以不需要各个bsp去实现的所以它没有驱动层,只在设备驱动框架层就完成了。
1.软件rtc设备实现类
软件rtc设备比较特殊,直接设备驱动框架层实现了。
在/ components / drivers / rtc / soft_rtc.c实例化了软件rtc设备类static struct rt_device soft_rtc_dev。
软件rtc设备类可以认为继承自设备基类,只是没有任何自己的私有方法而已。
这就类似c++中一个类继承一个抽象类,这个类重写纯虚方法。
对象图如下:
设备基类是抽象类,继承它的软件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设备对象放到对象容器里管理。
详细参见io设备管理层。https://blog.csdn.net/yhb1206/article/details/136440373
4.总结
参见rtt的oopc实现特点。
5.内部调用流程
参见内部调用流程。
6.应用程序使用流程
参见官方文档等路径。