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

linux驱动编程——等待队列

一、等待队列

可实现调用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.kler.cn/a/327016.html

相关文章:

  • leetcode-有效的字母异位词
  • 细谈 Linux 中的多路复用epoll
  • 影刀RPA实战:嵌入python,如虎添翼
  • 【网络】深入理解HTTP协议:请求方法、状态码与工作流程全解析
  • clickhouse运维篇(三):生产环境一键生成配置并快速部署ck集群
  • MySQL超大分页怎么优化处理?limit 1000000,10 和 limit 10区别?覆盖索引、面试题
  • 显示器放大后,大漠识图识色坐标偏移解决方法
  • 【leetcode】122. 买卖股票的最佳时机 II
  • Linux下路由信息探测traceroute
  • UE4_Niagara基础实例—5、骨架网格体表面生成粒子及过滤骨骼位置生成粒子
  • 不同领域神经网络一般选择什么模型作为baseline(基准模型)
  • 【如何在Linux系统本地快速部署Leanote蚂蚁笔记】
  • SQL第9课——汇总数据
  • 命令模式
  • PCL 索引空间采样
  • golang fmt.Sprintf 引用前述变量
  • java将word转pdf
  • python 实现lstm prediction预测算法
  • 【C++】unordered_map(set)
  • 几种常见点云开源库——点云、网格数据结构转换
  • 麒麟桌面系统V10 SP1安装php的达梦数据库扩展
  • latex打出邮箱图标和可点击的orcidID
  • NXP(恩智浦)—MC33PF8200A0ES PMIC芯片详解
  • 【COSMO-SkyMed系列的4颗卫星主要用途】
  • Spring Boot技术:构建高效网上购物平台
  • 高效学习工作SMART原则