news 2026/6/10 16:43:09

52.延迟工作队列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
52.延迟工作队列

延迟工作队列可以对原有的共享工作队列和自定义工作队列,加上定时器进一步封装,再进入中断程序的下半部分进行延迟进入。

直接延迟:「先占队列,再等延迟」→ 霸占公共资源;
delayed_work:「先等延迟,再占队列执行」→ 仅占用执行逻辑的必要时间,不浪费公共资源。

这是比在直接在中断下半段延迟的好处

驱动函数

#include <linux/module.h> #include <linux/init.h> #include <linux/interrupt.h> #include <linux/gpio.h> #include <linux/delay.h> #include <linux/workqueue.h> int irq; struct workqueue_struct *test_workqueue; struct delayed_work test_workqueue_work; // 工作项处理函数 void test_work(struct work_struct *work) { msleep(1000); printk("This is test_work\n"); } // 中断处理函数 irqreturn_t test_interrupt(int irq, void *args) { printk("This is test_interrupt\n"); // 提交延迟工作项到自定义工作队列 queue_delayed_work(test_workqueue, &test_workqueue_work, 3 * HZ); return IRQ_RETVAL(IRQ_HANDLED); } static int interrupt_irq_init(void) { int ret; irq = gpio_to_irq(101); // 将GPIO映射为中断号 printk("irq is %d\n", irq); // 请求中断 ret = request_irq(irq, test_interrupt, IRQF_TRIGGER_RISING, "test", NULL); if (ret < 0) { printk("request_irq is error\n"); return -1; } // 创建工作队列 test_workqueue = create_workqueue("test_workqueue"); // 初始化延迟工作项 INIT_DELAYED_WORK(&test_workqueue_work, test_work); return 0; } static void interrupt_irq_exit(void) { free_irq(irq, NULL); // 释放中断 cancel_delayed_work_sync(&test_workqueue_work); // 取消延迟工作项 flush_workqueue(test_workqueue); // 刷新工作队列 destroy_workqueue(test_workqueue); // 销毁工作队列 printk("bye bye\n"); } module_init(interrupt_irq_init); module_exit(interrupt_irq_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("quan");

Makfile

obj-m += delay_workqueue.o KDIR:=/home/linux/samba-mount/linux-kernel/linux-6.17.5 PWD?=$(shell pwd) all: make -C $(KDIR) M=$(PWD) modules echo $(PWD) clean: rm -rf *.ko *.o *.mod *.mod.o *.mod.c *.symvers *.order install: cp *.ko ../../linux-kernel/linux-6.17.5/kmodules

编译及开发板验证测试

由此可以看到延迟了4秒钟,包括进入下半段和下半段延迟。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 12:26:33

Duplicacy缓存机制终极指南:5个技巧让备份速度翻倍

Duplicacy缓存机制终极指南&#xff1a;5个技巧让备份速度翻倍 【免费下载链接】duplicacy A new generation cloud backup tool 项目地址: https://gitcode.com/gh_mirrors/du/duplicacy Duplicacy作为新一代云备份工具&#xff0c;其独特的缓存机制是提升备份性能的关…

作者头像 李华
网站建设 2026/6/10 12:23:50

OXID 实习主机探测(包含完整实现代码)

目录 前言 OXID 解析器基础原理 RPC 架构基础 总体架构关系 OXID 解析流程 多方法探测设计思路 存活判断依据 分层探测策略 核心模块设计 扫描流程 多层验证 严格响应验证 误报防护 代码分析 构造多种探测数据 EPM绑定探测数据 基本RPC验证数据 空请求探测数…

作者头像 李华
网站建设 2026/6/10 14:10:24

2025免费降AI率完全指南:从ai查重工具选择到降AI技巧,一步到位!

在论文、报告、内容创作越来越严格的时代&#xff0c;查AI率、检测AI率、降AI率 已经成为学生、写作者、博主的日常需求。很多同学因为 AI率过高被导师指出“AI痕迹太重”&#xff0c;甚至退回重写。本文今天一次性告诉你&#xff1a; 检测AI率应该注意什么 免费查AI率的网站有…

作者头像 李华