itop-3568开发板驱动学习笔记(20)中断线程化

news/2025/2/12 5:13:20/

《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记

文章目录

    • 中断线程化简介
    • 中断线程化 API
    • 中断线程化实验

中断线程化简介

中断线程化也是中断下文的一种方式,与工作队列和软中断不同的是,中断线程只用于这个中断,当发生中断的时候,会唤醒这个内核线程,然后由这个内核线程来执行中断下半部分的函数。

——原文

中断线程化 API

request_threaded_irq() 用来申请中断和中断线程,它和之前提到的 request_irq() 函数非常类似,仅仅多了一个 thread_fn 参数。

#include <linux/interrupt.h>
int request_threaded_irq(unsigned int irq, irq_handler_t handler, 
irq_handler_t thread_fn, unsigned long flags,const char *name, 
void *dev);

函数功能:向内核注册一个中断服务函数(当 irq 对应的中断发生时,会执行 handler 指向的中断服务函数)。

中断服务函数原型为:typedef irqreturn_t (*irq_handler_t)(int, void *)

函数参数

  • irq 中断号(在内核中是唯一的)
  • handler 中断服务函数指针
  • thread_fn 中断线程函数(为 NULL 表示不使用中断线程)
  • flags 中断标志,具体内容由中断源决定,如果中断源为外部中断,则存在上升沿和下降沿两种标志
  • name 中断名(会在 /proc/interrupts 下体现)
  • dev 中断服务函数的参数

返回值
返回 0 表示申请成功,失败返回负值。

中断线程化实验

实验代码

#include <linux/module.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/gpio.h>
#include <linux/delay.h>int irq;//中断下文(中断线程函数)
irqreturn_t thread_func(int irq, void *args)
{msleep(1000);printk("This is inttrupt thread func.\n");return IRQ_RETVAL(IRQ_HANDLED);
}//中断服务函数
irqreturn_t my_interrupt(int irq, void *args)
{printk("my interrupt handler.\n");	return IRQ_WAKE_THREAD; // 唤醒中断线程函数//return IRQ_RETVAL(IRQ_WAKE_THREAD); // 错误
}static int interrupt_irq_init(void)
{int ret = 0;// 获取中断号irq = gpio_to_irq(101);printk("irq is %d\n", irq);// 申请中断(线程)ret = request_threaded_irq(irq, my_interrupt, thread_func, IRQF_TRIGGER_RISING, "inttrupt_test", NULL);if(ret < 0){printk("request irq error.\n");return 0;}return 0;	
}static void interrupt_irq_exit(void)
{printk("interrupt irq exit.\n");// 注销中断free_irq(irq, NULL);
}module_init(interrupt_irq_init);
module_exit(interrupt_irq_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("xiaohui");

实验结果

和之前的软中断实验类似,在中断上文执行完成后,继续执行中断下文(中断线程函数)。

在这里插入图片描述


http://www.ppmy.cn/news/44547.html

相关文章

Spring入门案例--IOC入门案例

IOC入门案例思路分析 (1)Spring是使用容器来管理bean对象的&#xff0c;那么管什么? 主要管理项目中所使用到的类对象&#xff0c;比如(Service和Dao) (2)如何将被管理的对象告知IOC容器? 使用配置文件 (3)被管理的对象交给IOC容器&#xff0c;要想从容器中获取对象&…

网络安全自学笔记+岗位介绍

我就在这个行业&#xff0c;目前湖南&#xff0c;薪资就没必要说了&#xff0c;高就对了。 这个行业优势就是工资高&#xff0c;缺点就需要一直学&#xff0c;卷得要死&#xff0c;不是跟别人卷&#xff0c;而是自己卷&#xff0c;一会后面细说 这个行业目前分为几个岗位&#…

低代码,是稳打稳扎还是饮鸩止渴?

2023年&#xff0c;业内对低代码的发展充满了想象。 人们认为&#xff0c;未来低代码它的商业价值不可估量。 据Gartner的最新报告显示&#xff0c;到2023年&#xff0c;全球低代码开发技术市场规模预计将达到269亿美元&#xff0c;比2022年增长19.6%。 随着数字化进入深水区&a…

Excel VBA 之Interior 对象设置底色

Interior 对象 代表一个对象的内部 针对interior对象&#xff0c;我们用得最多的是它的颜色&#xff0c;下面就来讨论一下。 1.ColorIndex 索引颜色值 Sub 索引颜色值()For i 1 To 56Cells(i, 1).Interior.ColorIndex iCells(i, 2) iNext iFor i 1 To 56Cells(i, 3).Interi…

【C++】哈希的应用——bitset(STL)位图

哈希的应用——bitset(STL)位图 文章目录哈希的应用——bitset(STL)位图一、bitset的介绍1.位图的引入2.位图的概念3.位图的应用二、bitset的使用1.bitset的构造方式2.bitset成员函数的使用3.bitset运算符的使用三、bitset位图的模拟实现1.位图的基本框架2.成员函数2.1.构造函数…

【教程】Unity 与 Simence PLC 联动通讯

开发平台&#xff1a;Unity 2021 依赖DLL&#xff1a;S7.NET 编程语言&#xff1a;CSharp 6.0 以上   一、前言 Unity 涉及应用行业广泛。在工业方向有着一定方向的涉足与深入。除构建数据看板等内容&#xff0c;也会有模拟物理设备进行虚拟孪生的需求需要解决。而 SIMATIC&a…

4点决定你在银行的到手薪资

众所周知&#xff0c;银行的工资水平在整个国家中也是排名靠前的。然而&#xff0c;全国范围之内&#xff0c;有4000多家银行&#xff0c;有20多万个网点&#xff0c;不同的银行&#xff0c;甚至同一银行不同区域的网点之间的工资差别都是比较大的&#xff0c;即使是在同一家银…

如何用ChatGPT写毕业论文?

老早之前就听说有同学用ChatGPT写论文了 但是一直不觉得人工智能够真的替代人类 正好最近毕业论文开始降重了&#xff0c;超高的重复率愁得我快睡不着了 刷微博突然看到这个有关ChatGPT的问题。 出于好奇的我决定先来试试这个ChatGPT到底能不能帮我解决降重问题哈哈哈 点击…