rtt的io设备框架面向对象学习-内部调用流程

IO设备管理层的对象接口一般调用流程如下
rt_device_find->rt_device_open->rt_device_read->rt_device_write->rt_device_close

再加上各个设备特有使用方法。参见官方文档查看各个设备的是使用方法。

rt_device_find(name)是在对象容器里根据注册时的名字查找到设备对象的rtt基类的指针。如果驱动层的类定义是按照oopc定义的方式(父类一直放到结构体首位)那么此指针也即是驱动层注册时类对象的指针。

rt_device_open做的事是把rt_device_find找到的指针转成设备基类的指针,然后调用设备基类规定的open方法——这个是设备驱动框架层的各个类重写的方法,每个类不一样,然后设备驱动层的各类重写的这个open函数里又会调用它们各自对子类定义的方法,这些方法是设备驱动层(各bsp)实现的方法,这些方法不同bsp实现不同。

反正注册时注册的函数在io设备管理接口最上层的接口调用会层层的从设备驱动框架层到设备驱动层注册的父类方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/772125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++语法|C++八股|内存分区、内存对齐、野指针和悬浮指针

文章目录 内存分区堆(heap)和栈(stack)的区别new和malloc的区别delete和free有什么区别 野指针导致野指针的原因如何避免野指针野指针和悬浮指针 内存对齐什么是内存对其为什么要内存对齐内存对其的规则 内存分区 从高地址到低地址依次是: 栈(stack)区&#xff1a…

Word字号与磅值与行距

文章目录 简介字号、磅值与行距之间的对应关系 简介 在论文等文字资料进行排版的过程中,悉知字号对应的磅值,以及行距之间的关系非常有帮助。本篇博文简单介绍一下排版领域中有关中文字号(三号、小四、五号、小五等)与磅值&#…

Redis 教程系列之Redis 分区(十)

Redis 分区 分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。 分区的优势 通过利用多台计算机内存的和值,允许我们构造更大的数据库。通过多核和多台计算机,允许我们扩展计算能力;通过多台计算机和…

A Novel Negative Sample Generating Method for KnowledgeGraph Embedding

摘要 为了有效地提取知识图中的关系和原因,将实体和关系编码到一个连续的低维语义空间中。在负样本生成阶段,大多数知识图嵌入方法更注重替换头或尾实体以提高训练效率,很少替换关系。这些负样本生成方法对关系预测的贡献不大。本文提出了一…

vue项目在本地源码方式启动和打包之后在nginx中代理有什么不同

Vue项目在本地源码方式启动和打包之后在Nginx中代理的主要区别在于开发环境与生产环境的配置、性能优化、安全性和部署流程等方面。以下是一些具体的差异点: 开发环境与生产环境: 本地源码启动通常是在开发环境中,使用Vue CLI的vue-cli-servi…

有效沟通(业务分析关键技能)

背景 业务分析有一筐子技能,如果让我选一个最重要的,那么就是如何有效沟通,这也可以从项目的另外一个角度思考,项目如何保障能安全着陆,那就是别走偏了。 走偏了,大多数就是对项目理解不清楚,…

智能网络运维:领航数字时代,实现网络管理极致效能

在当今高度信息化的时代,网络已经成为企业运营不可或缺的一部分。网络设备的稳定运行、数据传输的畅通无阻,都直接关系到企业的正常运营和业务发展。因此,高效、智能的网络运维管理显得尤为重要。本文将重点介绍智能网络运维中的几个关键模块…

更新对象的部分输入参数

更新对象的部分输入参数 代码 def update_state(self, **kwargs):# 更新指定的状态参数,保持其他参数不变for key, value in kwargs.items():if hasattr(self, key):setattr(self, key, value)怎么理解解释 用于更新对象的状态参数。这个方法使用了关键字参数&am…

8、Spring CLI中AI命令指南

AI 命令指南 OpenAI 的 ChatGPT 等大型语言模型为使用 AI 生成代码提供了强大的解决方案。ChatGPT 不仅在 Java 代码上进行了训练,还在 Spring 开源生态系统内的各种项目上进行了训练。这使得 Spring CLI 能够增强应用程序的功能,超出传统教程所能提供的范围。 使用简单的命…

每天学习一会java(第一天)----条件运算符

今天学习的是条件运算符 1.描述: 条件运算符由“?”与 “:” 两个符号组成,必须一起使用,是 JAVA 中唯一的三目(三元)运算符,需要三个操作数才能进行运算。 条件表达式的一般使用形式为: 表达…

瑞吉外卖实战学习--登录过滤器和判断是否登录过

完善登录功能 1、创建自定义过滤器LoginCheckFiler1.1通过WebFilter创建过滤器1.2 验证是否可以拦截请求1.3 代码 2、在启动类加入注解ServletComponentScan 用来扫描过滤器触发所有的过滤器ServletComponentScan 3、完善过滤器的处理逻辑3.1判断是否需要是要放行的请求3.2判断…

鸿蒙OS应用示例:【数字滚动计时】

实现效果: 代码示例: RollingText.ets 组件封装 RollingText.ets 组件封装 /*** 滚动文字特效*/ Component export default struct RollingText {private num:numberprivate timerId: number -1State counter: number 0aboutToAppear() {this.timerId…

Git基础(25):Cherry Pick合并指定commit id的提交

文章目录 前言指定commit id合并使用TortoiseGit执行cherry-pick命令 前言 开发中,我们会存在多个分支开发的情况,比如dev,test, prod分支,dev分支在开发新功能,prod作为生产分支已发布。如果某个时候,我们…

3.26C++

定义一个矩形类(Rectangle),包含私有成员:长(length)、宽(width), 定义成员函数: 设置长度:void set_l(int l) 设置宽度:void set_w(int w) 获取长度:int…

【Linux】线程同步{死锁/线程同步相关接口/由浅入深理解线程同步}

文章目录 1.死锁1.1概念1.2死锁的必要条件 2.线程同步相关接口2.1pthread_cond_init/destroy()2.2int pthread_cond_wait2. 3linux下的条件变量及其作用2.4int pthread_cond_signal/broadcast();2.5Linux下 阻塞和挂起的异同2.6阻塞,挂起,和进程切换的关…

【MySQL】数据库--基础

目录 一、概念: 二、连接数据库[Dos命令] 三、SQL 语句分类 一、概念: MySQL 是一种开源的关系数据库管理系统 (RDBMS)数据库-表的本质仍然是文件 二、连接数据库[Dos命令] mysql -h:mysql服务的主机(默认连接到本机服务器&…

轻松掌握:使用 API 接口自动缩短网址的秘诀

在互联网的世界里,网址缩短已经成为了一种时尚和必要。长而复杂的网址不仅难以记忆,还可能让人望而却步。但是,现在有了 API 接口,我们可以轻松地将网址自动缩短,让分享变得更加简单和高效!本文将以具体例子…

自增不再简单:深入探索MySQL自增ID的持久化之道

概述 MySQL中的自增特性估计大家或多或少都是用过。一张表中只能由一个自增字段,通常我们会把它设置为主键,但是随着大家系统越来越分布式,为了一些性能和可扩展性问题,大家目前选择更多的都是分布式ID(雪花算法、UUI…

【python】Jupyter Notebook 修改默认路径

文章目录 一、修改前(一)问题(二)修改前的默认路径 二、修改配置文件、更改路径(一)找到配置文件并打开(二)创建目标文件夹、得到新的路径(三)修改配置文件 三…

运行conda activate报错,有关提示运行conda init...

由于刚配置了anaconda环境变量,打开cmd输入环境激活命令 oonda activate报错,提示要先初始化 在cmd命令行界面输入初始化命令后,在同一界面再次输入conda activate仍提示错误 conda init解决方案:在初始化后,需要关闭…