当前位置: 首页 > news >正文

做网站大图片国内外搜索引擎大全

做网站大图片,国内外搜索引擎大全,武汉网站建设公司哪家好,做视频网站注意事项目录 1.脉冲编码器设备基类2.脉冲编码器设备基类的子类3.初始化/构造流程3.1设备驱动层3.2 设备驱动框架层3.3 设备io管理层 4.总结5.使用 1.脉冲编码器设备基类 此层处于设备驱动框架层。也是抽象类。 在/ components / drivers / include / drivers 下的pulse_encoder.h定义…

目录

        • 1.脉冲编码器设备基类
        • 2.脉冲编码器设备基类的子类
        • 3.初始化/构造流程
          • 3.1设备驱动层
          • 3.2 设备驱动框架层
          • 3.3 设备io管理层
        • 4.总结
        • 5.使用

1.脉冲编码器设备基类

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

在/ components / drivers / include / drivers 下的pulse_encoder.h定义了如下脉冲编码器设备基类

struct rt_pulse_encoder_device
{
struct rt_device parent;
const struct rt_pulse_encoder_ops *ops;
enum rt_pulse_encoder_type type;
};

脉冲编码器设备基类的方法定义如下

struct rt_pulse_encoder_ops
{
rt_err_t (*init)(struct rt_pulse_encoder_device *pulse_encoder);
rt_int32_t (*get_count)(struct rt_pulse_encoder_device *pulse_encoder);
rt_err_t (*clear_count)(struct rt_pulse_encoder_device *pulse_encoder);
rt_err_t (*control)(struct rt_pulse_encoder_device *pulse_encoder, rt_uint32_t cmd, void *args);
};

抽象出来共性成为脉冲编码器设备基类的方法。

2.脉冲编码器设备基类的子类

各个脉冲编码设备基类的子类已经是在bsp的驱动层来实现了,例如
/ bsp / stm32 / libraries / HAL_Drivers / drivers 下的drv_pulse_encoder.c定义的stm32脉冲编码器类,这些都是可以实例化的终类。其他芯片厂家如此这般一样。

3.初始化/构造流程

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

3.1设备驱动层

此层是bsp层,可以实例化的终类地。

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

定义了stm32脉冲编码器类
struct stm32_pulse_encoder_device
{
struct rt_pulse_encoder_device pulse_encoder;
TIM_HandleTypeDef tim_handler;
IRQn_Type encoder_irqn;
rt_int32_t over_under_flowcount; char *name;
};

实例化了stm32的脉冲编码器设备:
static struct stm32_pulse_encoder_device stm32_pulse_encoder_obj[] ;

重写了脉冲编码器设备基类的方法:
static const struct rt_pulse_encoder_ops _ops =
{
.init = pulse_encoder_init,
.get_count = pulse_encoder_get_count,
.clear_count = pulse_encoder_clear_count,
.control = pulse_encoder_control,
};

hw_pulse_encoder_init中开启stm32脉冲编码器设备的初始化:
调用/ components / drivers / misc /pulse_encoder.c的rt_device_pulse_encoder_register函数来初始化脉冲编码器设备基类对象:
stm32_pulse_encoder_obj[i].pulse_encoder.ops = &_ops;
rt_device_pulse_encoder_register(&stm32_pulse_encoder_obj[i].pulse_encoder, stm32_pulse_encoder_obj[i].name, RT_NULL) ;

注意,重写了脉冲编码器设备基类的方法。

3.2 设备驱动框架层

/ components / drivers / misc 下的pulse_encoder.c实现了设备驱动框架层接口rt_device_pulse_encoder_register,它是脉冲编码器设备驱动框架层的入口,开启脉宽编码器设备基类的构造流程。

它主要重写了脉冲编码设备基类的父类——设备基类——的方法:
#ifdef RT_USING_DEVICE_OPS
device->ops = &pulse_encoder_ops;
#else
device->init = rt_pulse_encoder_init;
device->open = rt_pulse_encoder_open;
device->close = rt_pulse_encoder_close;
device->read = rt_pulse_encoder_read;
device->write = RT_NULL;
device->control = rt_pulse_encoder_control;
#endif

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

3.3 设备io管理层

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

4.总结

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

其实每个类的注册函数模拟的是面向对象的构造函数。

5.使用

文档

http://www.tj-hxxt.cn/news/23562.html

相关文章:

  • 做软件常用的网站如何做好品牌推广工作
  • 网站建设中国十强新手怎么入行sem
  • 校际凡科平台兰州网络推广优化服务
  • 哈尔滨网站建设制作seo推广外包报价表
  • 潍坊网站制作厂家百度电脑端网页版入口
  • 个人信息网站建设的心得体会今日财经新闻
  • 企业做淘宝客网站有哪些百度推广全国代理商排名
  • 佛山网站建设网站制作公司大数据技术主要学什么
  • 公司建立网站的作用有常见的推广平台有哪些
  • 网站规划与建设课设报告产品推广软文300字
  • 郑州做网站的专业公司有哪些淄博网站推广
  • 漫画门户网站怎么做的可以发广告的100个网站
  • 龙华三网合一网站建设网站seo优化报告
  • 做网站学多长时间可以学会品牌运营管理有限公司
  • 英文seo是什么意思广州seo运营
  • 有了域名怎样做网站关键词指数查询工具
  • 邢台住房和城乡建设部网站淘宝宝贝关键词排名查询工具
  • 网站制作三站优化营商环境 提升服务效能
  • 电子计算机哪个专业最吃香手机系统优化工具
  • 石英石台面做网单有什么网站广告优化师适合女生吗
  • 电脑硬盘做网站服务器教程怎么网站排名seo
  • 临淄信息网招聘小红书seo优化
  • 制作宣传片拍摄公司长春seo网站优化
  • python做网站例子网络优化工程师需要学什么
  • 泉州网站建设需要平台seo沈阳
  • 电脑做系统ppt下载网站seo公司是做什么的
  • 网站建设项目建议书淘宝运营主要做些什么
  • 精品网站制作公司百度搜索高级搜索技巧
  • 武汉网站建设电话东莞网络营销信息推荐
  • 昆明网站建设 技术支持优化王