rtt的io设备框架面向对象学习-pwm设备

目录

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

1.pwm设备基类

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

在/ components / drivers / include / drivers 下的rt_drv_pwm.h定义了如下pwm设备基类
struct rt_device_pwm
{
struct rt_device parent;
const struct rt_pwm_ops *ops;
};

pwm设备基类的方法定义如下
struct rt_pwm_ops
{
rt_err_t (*control)(struct rt_device_pwm *device, int cmd, void *arg);
};

control配置进行pwm配置,抽象出来成为pwm设备基类的方法。

在这里插入图片描述

2.pwm设备基类的子类

该层是驱动层,bsp所在,该层的类是可以实例化的实现类。
例如
/ bsp / stm32 / libraries / HAL_Drivers / drivers 下的drv_pwm.c定义的stm32 pwm类,这些都是可以实例化的实现类。其他芯片厂家如此这般一样。

3.初始化/构造流程

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

3.1设备驱动层

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

c文件:
/ bsp / stm32 / libraries / HAL_Drivers / drivers 下的drv_pwm.c。

定义了stm32的pwm类
struct stm32_pwm
{
struct rt_device_pwm pwm_device; TIM_HandleTypeDef tim_handle;
rt_uint8_t channel;
char *name;
};

实例化了stm32的pwm设备:
static struct stm32_pwm stm32_pwm_obj[] ;

重写了pwm设备基类的方法:
static struct rt_pwm_ops drv_ops =
{
drv_pwm_control
};

stm32_pwm_init中开启stm32的pwm设备的初始化:
调用/ components / drivers / misc /rt_drv_pwm.c的rt_device_pwm_register函数来初始化pwm设备基类对象: rt_device_pwm_register(&stm32_pwm_obj[i].pwm_device, stm32_pwm_obj[i].name, &drv_ops, &stm32_pwm_obj[i].tim_handle)

注意把重写的pwm设备基类方法传递进去了。

请添加图片描述

3.2 设备驱动框架层

/ components / drivers / misc 下的rt_drv_pwm.c实现了设备驱动框架层接口rt_device_pwm_register,是pwm设备驱动框架层的入口,开启pwm设备基类的构造/初始化流程。

该层重写了pwm设备基类的父类——设备基类——的方法:

#ifdef RT_USING_DEVICE_OPS
device->parent.ops = &pwm_device_ops;
#else
device->parent.init = RT_NULL;
device->parent.open = RT_NULL;
device->parent.close = RT_NULL;
device->parent.read = _pwm_read;
device->parent.write = _pwm_write;
device->parent.control = _pwm_control;
#endif /* RT_USING_DEVICE_OPS */

同时,重写pwm设备基类的方法。
device->ops = ops;
在这里插入图片描述
并最终调用设备基类的构造函数rt_device_register。

3.3 设备io管理层

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

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

4.总结

参见rtt的oopc实现特点

5.内部调用流程

参见内部调用流程

6.应用程序使用流程

参见官方文档等路径

  • 20
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于RTT的机器人视觉框架将实时传输延迟(RTT)作为主要指标来设计和优化机器人视觉系统。RTT代表了从发送传感器数据到接收并作出响应的时间间隔,它是一个关键的决定性因素,影响着机器人的实时感知和决策能力。 该框架主要包括以下几个组件: 1. 传感器数据采集:通过各种传感器(如摄像头、激光雷达等)采集实时环境数据。采集到的数据以最小的延迟尽快发送到后续处理模块。 2. 数据传输和通信:借助高效的通信协议和网络架构,将采集到的数据实时传输给后续处理模块。此外,为了减小RTT,还可以根据实际需求优化数据传输策略,如压缩数据、设置传输优先级等。 3. 数据处理和分析:接收到传感器数据的后续处理模块对数据进行分析、处理和解释。这些模块使用机器学习、计算机视觉等算法对图像进行分析,从中提取特征和识别目标。同时,它们以尽可能高效的方式进行数据处理,以保证实时性。 4. 决策和控制:基于分析的结果,决策模块对机器人的实时行为作出响应。例如,根据识别的目标,生成相应的控制命令并发送到机器人执行。 在这个基于RTT的机器人视觉框架中,实时性是关键目标。通过尽量减小RTT,提高机器人对环境的实时感知和响应能力,从而实现更高效的机器人操作和应用。同时,优化数据处理和传输策略,提高整个系统的性能和稳定性。这个框架可以广泛应用于机器人导航、智能监控、自动驾驶等领域,为机器人实现更高水准的实时视觉能力提供支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值