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

Linux 驱动中 Timer / Tasklet / Workqueue 的作用与对比

Linux 驱动中 Timer / Tasklet / Workqueue 的作用与对比

🧩 1. 使用场景概览(对比表)

机制执行上下文是否可睡眠使用场景常用接口
Timer中断上下文❌ 不可睡眠延迟执行(如防抖、超时处理)add_timer()
Tasklet软中断上下文❌ 不可睡眠中断后的轻量快速处理tasklet_schedule()
Workqueue进程上下文✅ 可睡眠可阻塞、耗时操作(如 I/O)schedule_work()

🧠 2. 各机制作用详解

🔧 Timer(定时器)

  • 作用:延迟执行某个函数,常用于按键防抖、超时控制等
  • 上下文:中断上下文(不可睡眠)
  • 示例
    struct timer_list my_timer;
    timer_setup(&my_timer, my_timer_handler, 0);
    mod_timer(&my_timer, jiffies + msecs_to_jiffies(20));
    

⚡ Tasklet(软中断)

  • 作用:将中断处理函数中不能做的工作,延后到软中断上下文处理。
  • 上下文:软中断上下文(不可阻塞)。
示例:
struct tasklet_struct tasklet;
DECLARE_TASKLET(my_tasklet, tasklet_handler, data);
tasklet_schedule(&my_tasklet);

🧵 Workqueue(工作队列)

  • 作用:将任务放到内核线程中执行,可以使用阻塞操作,适合复杂或耗时的任务。
  • 上下文:进程上下文(可阻塞)。
示例:
struct work_struct work;                  // 定义工作队列结构体
void work_handler(struct work_struct *work) {printk(KERN_INFO "Work handler executed\n");
}
INIT_WORK(&my_work, work_handler);        // 初始化工作队列,绑定处理函数work_handler
schedule_work(&my_work);                  // 将工作队列加入调度队列
三种方式调用func示例:
static irqreturn_t gpio_key_isr(int irq, void *dev_id)
{struct gpio_key *gpio_key = dev_id;//printk("gpio_key_isr key %d irq happened\n", gpio_key->gpio);tasklet_schedule(&gpio_key->tasklet);mod_timer(&gpio_key->key_timer, jiffies + HZ/50);schedule_work(&gpio_key->work);// schedule_work:调度工作队列(需在非原子上下文中调用)return IRQ_HANDLED;
}
http://www.dtcms.com/a/281969.html

相关文章:

  • 查看.bin二进制文件的方式(HxD十六进制编辑器的安装)
  • 电路仿真——精密半波整流电路
  • 133. Java 泛型 - 目标类型与方法参数:重载解析与类型推导
  • 网络编程(数据库)
  • 在虚拟环境中复现论文(环境配置)
  • 力扣 hot100 Day46
  • 01 启动流程实例
  • 基于docker的redis集群
  • 开源 python 应用 开发(七)数据可视化
  • 基于大数据电信诈骗行为分析与可视化预测系统的设计与实现【海量数据、多种机器学习对比、数据优化、过采样】
  • 软路由 + 代理 IP 实现多手机不同公网 IP 分配教程
  • 60个功能OfficeBox 万彩办公大师:PDF 格式转换 OCR识别免费无广告
  • 【数据结构】栈与链表的区别
  • 物联网CAN通讯(控制器局域网络)(寄存器版+HAL库版)
  • 分布式缓存击穿以及本地击穿解决方案
  • xss-labs练习
  • 「源力觉醒 创作者计划」_巅峰对话:文心大模型4.5系列与DeepSeek/Qwen 3.0深度解析
  • React -自定义hooks - 封装双向数据绑定
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博类别信息爬取
  • 在 Spring Boot 中监控异步任务的执行情况
  • Flask 项目结构
  • Flask的基本概念
  • Ray集群部署与维护
  • 显示器如何突破 DisplayPort 1.4 的带宽限制,显示更高的分辨率刷新率
  • 网络劫持对用户隐私安全有何影响?
  • python fonttools字体多语言解析
  • iOS 上架被拒 4.3a 【Cocos全面解读】
  • iOS App 上架流程优化指南 工具组合与常见问题处理经验总结
  • 用AI做带货视频评论分析进阶提分【Datawhale AI 夏令营】
  • 插板式系统的“生命线“:EtherCAT分布式供电该如何实现?