首页 > 其他分享 >urb中几个函数的使用

urb中几个函数的使用

时间:2024-08-28 10:47:26浏览次数:11  
标签:USB URB 几个 buffer usb urb anchor 函数

usb_buffer_alloc(free)

说是为了更好的从名字看出这个函数真实做的事情:DMA coherency linux提供两种方式,来保证使用dma时,内存和硬件cache的一致性:

usb_buffer_alloc() is renamed to usb_alloc_coherent()  usb_buffer_free()  is renamed to usb_free_coherent()

usb_alloc(free)_coherent

usb_alloc_coherent(ch341_dev->usb_dev, out_len, GFP_KERNEL, &urb->transfer_dma);

作用:申请usb缓冲区,并保持内存和硬件cache一致性

usb_fill_int_urb

urb 参数指向要被初始化的urb 的指针;dev 指向这个urb 要被发送到的USB 设备;pipe 是这个urb 要被发送到的USB 设备的特定端点;transfer_buffer 是指向发送数据或接收数据的缓冲区的指针,和urb 一样,它也不能是静态缓冲区,必须使用kmalloc()来分配;buffer_length 是transfer_buffer 指针所指向缓冲区的大小;complete 指针指向当这个 urb 完成时被调用的完成处理函数;context 是完成处理函数的“上下文”;interval 是这个urb 应当被调度的间隔。

usb_anchor_urb 是 Linux 内核 USB 子系统中的一个函数,用于将一个 USB 请求块(URB, USB Request Block)添加到一个 USB 锚(USB anchor)中。USB 锚实际上是一个用于跟踪和管理多个 URB 的结构体(usb_anchor),它提供了一种机制,可以方便地对多个 URB 进行管理,例如批量取消、等待所有 URB 完成等操作。

usb_anchor_urb

usb_anchor_urb 的主要作用包括:

  1. 批量管理:当一个 USB 设备需要提交多个 URB 时,使用 usb_anchor_urb 可以将这些 URB 归属于同一个锚,便于统一管理。

  2. 同步处理:通过 usb_anchor,可以方便地等待所有已经提交的 URB 完成,适用于需要同步等待的场景。

  3. 取消操作:在某些情况下,需要取消已经提交的 URB,使用 usb_kill_anchored_urbs 可以一并取消锚中的所有 URB,这在处理 USB 错误或设备断开时非常有用。

总的来说,usb_anchor_urb 提供了一种便捷的机制来批量管理和控制多个 URB,简化了复杂 USB 传输场景中的代码实现。

标签:USB,URB,几个,buffer,usb,urb,anchor,函数
From: https://www.cnblogs.com/linhaostudy/p/18384161

相关文章

  • Hive用户定义函数 [单列函数UDF | 聚合函数UDAF]
    Hive中函数有4类:单行函数、聚合函数、炸裂函数、窗口函数用户定义函数(UDF:User-DefinedFunctions)按输入行数与输出行数的对应关系:UDF:普通函数,一进一出UDAF:聚合函数,多进一出UDTF:表生成函数,一进多出,如输入一行array类型,返回3行string类型一、单列函数(UDF-一进一出)1、字符串......
  • 指针(三):函数指针
    目录函数指针函数的地址函数指针结构函数指针数组了解函数指针数组函数指针数组结构简易计算器函数指针数组优化计算器函数指针函数的地址函数指针,也就是存放函数地址的变量,有人会问,函数也会有地址吗?我们用一个代码来验证一下吧。#include<stdio.h>voidtest(......
  • 大模型的基本功:推荐几个大模型的练手程序
    这篇文章给大家推荐几个大模型的练手程序,也就是所谓的“基本功”。一、trans_XX_to_llama.py在开源社区,llama的网络结构已经一统江湖了,那也就是说modeling_llama.py理论上可以load起来任何一个开源模型。OK,请自行完成以下脚本,使得我们可以用modeling_llama.py加载......
  • C:回调函数的介绍-学习笔记
    前言:本篇文章我们将继续指针相关知识:回调函数希望大家在看完后能够有所收获!回调函数 定义与概念回调函数是一个通过指针调用的函数。如果把函数指针作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数,回调函数不是有该函数的实现方......
  • MySQL数据库(2)——DML、视图、函数
    目录1、DML——数据操作语言(DataManipulationLanguage)2、添加数据2.1语句添加2.2文件加载3、修改数据4、删除数据5、查询数据5.1DQL基本关键字及其说明 着重号SQL简单查询5.2别名查询5.3去重查询5.4单表查询算数运算符比较运算符逻辑运算符范围......
  • vue3 自定义hooks(组合式函数)
    什么是hooks自定义hooks是Vue3组合式函数的别称。在Vue应用的概念中,“组合式函数”(Composables)是一个利用Vue的组合式API来封装和复用有状态逻辑的函数。命名规范组合式函数约定用驼峰命名法命名,并以“use”作为开头。以便识别它们是可复用的逻辑单元。例如,u......
  • 字符串函数 (总篇章,全面解析)
    文章目录1.strlen函数函数的使用:strlen的模拟实现:分法1计数法:方法2递归法:分法3指针法:2.strcpy函数strcpy的使用:strcpy的模拟实现:3.strcat函数strcat函数的使用:strcat函数的模拟现实:4.strcmp函数strcmp函数的使用:strcmp函数的模拟实现:5.strncpy函数6.strncat函数7.s......
  • 当构造与析构的函数体为空,会发生什么?
    析构函数、构造函数用来进行数据的销毁和初始化。那么系统默认生成的构造和析构有什么特点呢?构造函数对于自定义类型,会调用对应的默认构造,内置类型不做处理。当显式定义了无参的默认构造,初始化列表和函数体都为空时,也会在初始化列表阶段调用自定义类的默认构造(所有成员变量......
  • C语言字符函数和字符串函数的详解及模拟实现(超详细)
    目录1.求字符串长度1.1strlen1.1.1.strlen函数介绍1.1.2.strlen函数模拟实现 2.长度不受限制的字符串函数 2.1strcpy2.1.1.strcpy函数介绍2.1.2.strcpy函数模拟实现 2.2strcat2.2.1.strcat函数介绍2.2.2.strcat函数模拟实现 2.3strcmp 2.3.1.strcmp函数介绍......
  • C++趣味实验之:二次函数面积与微积分
    在数学中,我们可以使用微积分来计算由二次函数抛物线构成的图形根据这个原理,我们可以用程序模拟计算这些图形的面积longdoublex,y,a,b,c;首先,定义出函数的各个参数输入a,b,c的数值后,计算其数值并绘制其图像for(inti=1;i<=1000;i++){ x+=0.1; y=a*x*x; y=y+b*x; ......