linux驱动编程——等待队列

news2024/12/25 14:27:40

一、等待队列

可实现调用read函数时阻塞等。

1、流程

(1)初始化等待队列头(带参宏)

init_waitqueue_head(q)

        等待队列头wq数据类型: wait_queue_head_t,等待条件condition:int型变量。

(2)阻塞程序(带参宏)

wait_event_interruptible(wq, condition)

注:condition = 0时阻塞程序;condition =1时解除阻塞。

(3)解除阻塞

 wake_up_interruptible(wait_queue_head_t *q)

eg:

【定义wq与condition】

【模块加载时初始化等待队列】

【需要阻塞时调用等待函数】

【需要结束等待时唤醒程序】

二、中断顶半部和底半部

1、上半部

(1)特点:

①要处理的内容希望其他中断打断
②要处理的任务对时间敏感
③要处理的任务与硬件有关

2、下半部

除了上述三点以外的其他任务,优先考虑放到下半部。中断处理过程比较耗时的代码。

三、内核定时器

系统全局变量:①HZ:HZ是一个节拍,每秒钟产生200次。

②jiffies:记录了自系统启动以来到当下总共产生了多少次节拍;这个数随着时间的推进每秒钟增加200。

如:jiffies + n * HZ,表示未来n秒以后。

我们关注:

(1)结构体struct timer_list

①expires:这个就是那个未来的时刻,可以设置为jiffies + n * HZ表示n秒之后
②function:函数指针,就是当时间到了以后要执行的代码,类型为void (*)(unsigned long n);这个函数带一个参数,参数传递的是下一个成员data
③data:function成员的参数

(2)初始化

#define init_timer(timer)

(3)启动定时器

void add_timer(struct timer_list *timer)

注:等到时间一到就会调用function所指向的函数。

(4)删除定时器

int del_timer(struct timer_list * timer)

注:此外linux还提供了另外几个延时函数:
1. void ndelay(unsigned long nsecs) ;纳秒延时函数
2. void udelay(unsigned long usecs) ;微秒延时函数
3. void mdelay(unsigned long mseces);毫秒延时函数

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

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

相关文章

Actor 并发控制模型

目录 一、模型概述 二、模型特点 三、模型组成 四、模型优势 五、应用实例 一般来说,我们有两种策略来在并发线程中实现通信:共享内存和消息传递。大多数传统语言,并发线程之间的通信使用的都是共享内存,共享内存最大的问题就…

分糖果C++

题目&#xff1a; 样例解释&#xff1a; 样例1解释 拿 k20 块糖放入篮子里。 篮子里现在糖果数 20≥n7&#xff0c;因此所有小朋友获得一块糖&#xff1b; 篮子里现在糖果数变成 13≥n7&#xff0c;因此所有小朋友获得一块糖&#xff1b; 篮子里现在糖果数变成 6<n7&#xf…

为本地生活赛道从业者赋能,易播易赚开启“抖音直播分享会”

9月22日&#xff0c;由杭州易播易赚科技有限公司主办的“抖音直播分享会”在杭州市富阳区召开&#xff0c;此次会议吸引了来自全国各地的抖音直播从业者、有志于加入抖音直播事业的创业者以及行业内知名专家齐聚一堂&#xff0c;共同探讨行业发展趋势、分享实战经验&#xff0c…

tomcat版本升级导致的umask问题

文章目录 1、问题背景2、问题分析3、深入研究4、umask4.1、umask的工作原理4.2、umask的计算方式4.3、示例4.4、如何设置umask4.5、注意事项 1、问题背景 我们的java服务是打成war包放在tomcat容器里运行的&#xff0c;有一天我像往常一样去查看服务的日志文件&#xff0c;却提…

Mysql高级篇(中)——多版本并发控制 MVCC

多版本并发控制 MVCC 一、概述二、基本原理三、实现原理四、示例解释五、MVCC 优点六、现实中的实现七、MVCC 三剑客1. ReadView2. Undo Log3. Purge4. 三者之间的关系&#xff1a;5. 示例6. 总结 八、MVCC 整体操作流程⭐、readview1. 作用2. 工作机制3. 数据版本的可见性判断…

[云服务器15] 全网最全!手把手搭建discourse论坛,100%完成

首先&#xff0c;由我隆重地介绍Discourse&#xff1a; 这是一个优秀的论坛部署平台&#xff0c;相较于flarum Discuz!&#xff0c;有着更加简洁的画面、完全开源等优点&#xff0c;同时资源占用也不高&#xff01; 并且&#xff0c;这和我们亲爱的雨云论坛是有几分相似的哦&…

国庆偷偷卷!小众降维!POD-Transformer多变量回归预测(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现POD-Transformer多变量回归预测&#xff0c;本征正交分解数据降维融合Transformer多变量回归预测&#xff0c;使用SVD进行POD分解&#xff08;本征正交分解&#xff09;&#xff1b; 2.运行环境Matlab20…

Windows——解除Windows系统中文件名和目录路径的最大长度限制

第一步&#xff1a;打开本地组策略编辑器 按下Win R键打开运行窗口&#xff0c;输入 gpedit.msc 并回车&#xff0c;打开本地组策略编辑器。 第二步&#xff1a;开启 长路径设置 第三步&#xff1a;重启计算机

Windows环境Apache httpd 2.4 web服务器加载PHP8:Hello,world!

Windows环境Apache httpd 2.4 web服务器加载PHP8&#xff1a;Hello&#xff0c;world&#xff01; &#xff08;1&#xff09;首先需要安装apache httpd 2.4 web服务器&#xff1a; Windows安装启动apache httpd 2.4 web服务器-CSDN博客文章浏览阅读222次&#xff0c;点赞5次&…

Spark“数字人体”AI挑战赛_脊柱疾病智能诊断大赛_GPU赛道亚军比赛攻略_triple-Z团队

关联比赛: Spark“数字人体”AI挑战赛——脊柱疾病智能诊断大赛 triple-Z团队答题攻略 1 赛题分析 1.1 赛题回顾 本次比赛的任务是采用模型对核磁共振的脊柱图像进行智能检测。首先需要对5个椎体和6个椎间盘进行定位&#xff0c;这部分实际上就是11个关键点的检测任务&…

B2B商城交易解决方案:赋能企业有效重塑采购与销售新生态

在电商零售领域&#xff0c;商城系统始终是企业搭建商城的关键利器。 伴随着电商行业的蓬勃发展&#xff0c;各类新模式层出不穷&#xff0c;各种商城系统也应运而生&#xff0c;其中B2B商城更是最为常见的一种。 近年来&#xff0c;得益于电子商务的迅猛发展&#xff0c;B2B商…

C++入门基础知识92(实例)——实例17【实现一个简单的计算器】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于实现一个简单的计算器的相关内容&#x…

详细整理!!html5常用标签

文章目录 前言一、HTML简介1.HTML文件结构2.各标签意义 二、HTML标签介绍1.标题标签2.段落标签3. 换行标签4.hr标签5. span标签6.div标签7.img标签8.超链接标签9.注释标签10.空格11.格式化标签12.sup上标和sub下标13. pre预格式化标签14.table 表格标签table 标签基础内容合并单…

Java中异常的认识和创建

文章目录 前言一、异常的概念与体系结构 1.1 异常的概念1.2 异常的体系结构1.3 异常的分类二、异常的处理 2.1.防御式编程2.2 异常的抛出2.3 异常的捕获2.4 异常的处理流程三、自定义异常类 一、异常的概念与体系结构 1.1 异常的概念 在生活中&#xff0c;一个人表情痛苦&…

TI DSP TMS320F280025 Note16:EPWM的原理与使用

TMS320F280025 模数转换器(ADC) ` 文章目录 TMS320F280025 模数转换器(ADC)时基TB子模块计数比较CC子模块动作AQ子模块死区DB子模块斩波PC子模块错误联防模块TZ子模块数字比较DC子模块中断ET子模块EPWM的使用EPWMDriver.cEPWMDriver.h每个EPWM模块都包含多个子模块:时基TB子模…

系列二、案例实操

一、创建表空间 1.1、概述 在Oracle数据库中&#xff0c;表空间是一个逻辑存储单位&#xff0c;它是Oracle数据库中存储数据的地方。 1.2、超级管理员登录 sqlplus / as sysdba 1.3、创建表空间 create tablespace water_boss datafile C:\Programs\oracle11g\oradata\orcl\…

【NTN 卫星通信】基于NR的NTN RAN架构

1 引言 3GPP中,38.821协议中,研究了如何最大限度地减少对NG-RAN中新接口和协议的需求,以支持非地面网络。 研究了包括透传星和再生星的RAN架构。 2 基于透传星的NG-RAN架构 2.1 概述: 对于透传模式,卫星有效载荷在上行链路和下行链路方向上实现频率转换和射频放大器。它…

Python的异步编程

什么是协程&#xff1f; 协程不是计算机系统提供&#xff0c;程序员人为创造。 协程也可以被称为微线程&#xff0c;是一种用户态内的上下文切换技术。简而言之&#xff0c;其实就是通过一个线程实现代码块相互切换执行。 实现协程有那么几种方法&#xff1a; greenlet&…

推荐4个精准高效的录音转文字软件。

录音转文字在很多的场景中都能够为我们提供便利&#xff0c;比如&#xff1a;可以将课堂录音转换为文字&#xff0c;方便复习和整理笔记&#xff0c;可以将会议录音转换为文字&#xff0c;快速准确地记录内容&#xff0c;可以将采访录音转成文字&#xff0c;提高新闻稿件的撰写…

在VMware虚拟机上部署polardb

免密登录到我们的虚拟机之后&#xff0c;要在虚拟机上部署polardb数据库&#xff0c;首先第一步要先克隆源码&#xff1a; 为了进SSH协议进行传输源码需要先进行下面的步骤&#xff1a; 将宿主机上的私钥文件复制到虚拟机上 scp "C:\Users\waitw\.ssh\id_rsa" ann…