rtt的io设备框架面向对象学习-看门狗设备

目录

        • 1.看门狗设备基类
        • 2.看门狗设备基类的子类
        • 3.初始化/构造流程
          • 3.1设备驱动层
          • 3.2 设备驱动框架层
          • 3.3 io设备管理层
        • 4.总结
        • 5.内部调用流程
        • 6.应用程序使用流程

1.看门狗设备基类

/ components / drivers / include / drivers /下的watchdog.h 定义了如下看门狗设备基类

struct rt_watchdog_device
{
struct rt_device parent;
const struct rt_watchdog_ops *ops;
};

看门狗设备基类的方法定义如下
struct rt_watchdog_ops
{
rt_err_t (*init)(rt_watchdog_t *wdt);
rt_err_t (*control)(rt_watchdog_t *wdt, int cmd, void *arg);
};
一个是对看门狗进行初始化,另一个是对看门狗进行控制/配置,比如喂狗呀关闭看门狗呀等等操作。
这是所有看门狗的共性,抽象出来成为看门狗基类。
在这里插入图片描述

2.看门狗设备基类的子类

各个看门狗基类的子类已经是在bsp的驱动层来实现了,该类是实现类。例如
/ bsp / stm32 / libraries / HAL_Drivers / drivers 下的drv_wdt.h和drv_wdt.c定义了stm32_wdt_obj类,这些都是可以实例化的终类。其他芯片厂家如此这般一样。

3.初始化/构造流程

以stm32为例,从设备驱动层、设备驱动框架层到io设备管理层从下到上的构造/初始化流程如下

3.1设备驱动层

此层是bsp层,也是具体对象所在。
在/ bsp / stm32 / libraries / HAL_Drivers / drivers 下的drv_wdt.h定义并实例化了stm32的看门狗设备类:
struct stm32_wdt_obj
{
rt_watchdog_t watchdog;
IWDG_HandleTypeDef hiwdg;
rt_uint16_t is_start;
};
static struct stm32_wdt_obj stm32_wdt;

可以看到stm32看门狗设备类继承自看门狗基类rt_watchdog_t,剩下的hiwdg和is_start都是stm32看门狗的私有属性了。

在drv_wdt.c的rt_wdt_init中开启stm32看门狗设备的初始化/构造流程——重写了看门狗设备基类的ops方法:
ops.init = &wdt_init;
ops.control = &wdt_control;
stm32_wdt.watchdog.ops = &ops;

最终调用/ components / drivers / watchdog /下的watchdog.c中rt_hw_watchdog_register函数来初始化stm32看门狗的父类——看门狗基类。
请添加图片描述

3.2 设备驱动框架层

rt_hw_watchdog_register是看门狗设备驱动框架层的入口,开启看门狗设备基类的构造/初始化流程。
其主要是重写父类——设备基类的方法,如下
#ifdef RT_USING_DEVICE_OPS
device->ops = &wdt_ops;
#else
device->init = rt_watchdog_init;
device->open = rt_watchdog_open;
device->close = rt_watchdog_close;
device->read = RT_NULL;
device->write = RT_NULL;
device->control = rt_watchdog_control;
#endif
并最终调用设备基类的初始化/构造函数rt_device_register。
在这里插入图片描述

3.3 io设备管理层

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

详细参见io设备管理层。https://blog.csdn.net/yhb1206/article/details/136440373

4.总结

参见rtt的oopc实现特点

5.内部调用流程

参见内部调用流程

6.应用程序使用流程

参见官方文档等路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值