Linux内核中断之中断申请接口

Linux内核中断之中断申请接口,第1张

本文基于 RockPI 4A 单板Linux44内核介绍中断申请的常用接口函数

1、文件

2、定义

说明:

1)、 irq :要申请的中断号,可通过 platform_get_irq() 获取,见“Linux内核中断之获取中断号”。

2)、 handler :中断处理函数,发生中断时,先处理中断处理函数,然后返回 IRQ_WAKE_THREAD 唤醒中断处理线程。中断处理函数尽可能简单。

中断处理函数定义: typedef irqreturn_t (irq_handler_t)(int, void );

中断返回值如下:

3)、 thread_fn :中断处理线程,该参数可为NULL。类似于中断处理函数的下半部分。

4)、 irqflags :中断类型标志。

定义文件: include/linux/interrupth ,内容如下:

5)、 devname :中断名称,可使用 cat /proc/interrupts 命令查看。

6)、 dev_id :设备ID,该值唯一。

在使用共享中断时(即设置 IRQF_SHARED ),必须传入 dev_id ,在中断处理和释放函数中都会使用该参数。

注:

1、 request_threaded_irq() 函数可替代 request_irq 加 tasklet 或 workqueue 的方式。

2、对应的中断释放函数为: void free_irq(unsigned int, void ) ,需要和中断申请函数成对出现。

1、文件

2、定义

说明:

1)、 __must_check :指调用函数一定要处理函数的返回值,否则编译器会给出警告。

2)、 request_irq() 函数本质上是中断处理线程 thread_fn 为空的 request_threaded_irq() 函数。

对应的中断释放函数为: void free_irq(unsigned int, void ) ,需要和中断申请函数成对出现。

1、文件

2、定义

说明

devm_request_threaded_irq() 本质上还是使用 request_threaded_irq() 函数实现中断申请。

两者区别:

1)多了一个 dev 参数;

2)在设备驱动卸载时,中断会自动释放;

3)如果想单独释放中断,可使用 void devm_free_irq(struct device dev, unsigned int irq, void dev_id) 函数。

1、文件

2、定义

devm_request_irq() 函数本质上是中断处理线程 thread_fn 为空的 devm_request_threaded_irq() 函数。

1、获取中断号

2、申请中断

3、中断处理函数

4、中断处理线程

5、查看中断

当然是wait()后了,因为线程唤醒后是从被挂起点继续执行的呀
你的程序当然是要执行
isEmpty = true; 的了
——————————————————————
不好意思,没看到那是个循环
while(thisorder != order){
try{thiswait();}
catch(InterruptedException e){}
}
因为你的是循环wait()被唤醒后还是要进入的循环,直到thisorder == order时才执行isEmpty = true;的

线程中断方法主要是两种:
isInterrupted()是否为中断状态
interrupt()设置为中断
线程中断,并非真正的线程中断,而只是将线程的中断状态标识设置为true,由线程自己根据状态标识进行相应的业务处理逻辑,而线程实际上还在进行。
要区别于InterruptedException异常,一般的,线程会因为BlockingQueue#put、BlockingQueue#take、Object#wait、Thread#sleep以上状态被打断而抛出异常,这个异常是真正的线程中断,而与线程的中断状态标识没有任何关系,标识状态依然为false。
所以,这就需要注意一个问题,千万不能捕获了InterruptedException而不做中断处理,否则业务逻辑依然以为你没有中断,依然走正常的异常逻辑
二、示例代码
文章知识点与官方知识档案匹配
Java技能树首页概览
92423 人正在系统学习中
打开CSDN APP,看更多技术内容
线程中断的几种方式_坚持与努力的博客_线程中断
有三种方法可以使终止线程。1 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。2 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。3 使用interrupt方法中断线程
继续访问
线程中断解析_叶小希的博客_线程中断状态
// 如果线程不响应中断 无法中断线程 tinterrupt(); // jvm不建议使用的方法 会让线程之间介绍,线程状态未知的情况下 将线程结束 // tstop(); } 常见check的代码 if(Threadinterrupted()){// 会清理掉中断状态
继续访问
java 线程 异常中断_java多线程并发之旅-19-InterruptedException 中断异常处理及中断机制
引言如果对 Java 中断没有一个全面的了解,可能会误以为被中断的线程将立马退出运行,但事实并非如此。中断机制是如何工作的?捕获或检测到中断后,是抛出 InterruptedException 还是重设中断状态以及在方法中吞掉中断状态会有什么后果?Threadstop 与中断相比又有哪些异同?什么情况下需要使用中断?线程池中的异常如何处理?中断处理的最佳实践?线程中断基础知识1、interrup
继续访问
什么是线程中断?
下面的这断代码大家应该再熟悉不过了,线程休眠需要捕获或者抛出线程中断异常,也就是你在睡觉的时候突然有个人冲进来把你吵醒了。 try { Threadsleep(3000); } catch (InterruptedException e) { eprintStackTrace(); } 此时线程被打断后,代码会继续运行或者抛出异常结束运行,这并不是我们需要的中断线程的作用。 到底是什么是线程中断? 线程中断即线程运行过程中被其他线程给打断了,它与 stop 最大的区别是:stop 是由系
继续访问
java阻塞线程中断_线程阻塞,线程中断,何时以及如何响应中断
2 sleep()造成的线程阻塞可以中断,而IO和synchronized造成的阻塞不可中断(即不能响应中断请求) 中断 不可中断阻塞 的方法: 关闭在其上发生阻塞的底层资源比如 IO阻塞时不可中断, 在关闭这个IO时便可以中断
继续访问
线程线程中断详解
文章目录中断线程判断线程是否被中断如何中断线程(中断原理)底层中断异常处理方式 中断线程 线程的threadinterrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序本身。线程会不时地检测这个中断标示位,以判断线程是否应该被中断(中断标示值是否为true)。 它并不像stop方法那样会中断一个正在运行的线程。 判断线程是否被中断 判断某个线程是否已被发送过中断请求,请使用ThreadcurrentThr
继续访问
并发编程之LockSupport的 park 方法及线程中断响应
并发编程之LockSupport的 park 方法及线程中断响应
继续访问
Java并发基础学习(二)——线程的停止和中断
前言 上一篇博客简单介绍了线程启动的方式,这一篇博客打算介绍一下如何停止线程,Java中停止线程相对来说就比较麻烦了,如何正确的停止线程其实也是一个比较常见的面试考题,需要详细总结一下。 线程停止的原理 Java中线程的停止并不是像关闭一个开关一样,直接停止线程,Java中的线程停止原理有点类似于计算机组成原理中对中断的处理,首先关闭中断标志位,让后响应中断,然后处理中断。 Java中线程的处理也可以看成大致的这个过程——线程本身响应外部的中断通知,然后将中断标志位复位,但是什么之后线程停止,由线程本身
继续访问
线程响应中断
首先介绍下Thread的两个方法: interrupt():设置当前中断标记为true isInterrupted():检查线程的中断标记 @Slf4j public class StopThread implements Runnable { public static void main(String[] args) throws InterruptedException {
继续访问
对于Java线程中断的理解,哪种情况下会响应中断?哪种情况下不响应中断?
最近在学习JUC框架的时候,发现了很多工具类都是支持可中断的,如AQS、FutureTask都是可以在线程执行中,支持对于中断的响应,所以需要对线程中断有个了解,才能更好的学习JUC的源码。 线程中断的作用: 线程中断可以使一个线程从等待状态变成就绪状态,如果中断的线程正处于运行状态,那么这个中断是不会用任何作用的(表面上不会影响正在运行的线程),线程恢复到就绪状态后,可以继续执行逻辑代码,想要让一个线程从等待状态中恢复过来有三种发送:一等待超时,二得到一个通知
继续访问
线程篇——线程的停止与中断
interrupt 还是先看下Thread类中interrupt方法的注释: Interrupts this thread Unless the current thread is interrupting itself, which is always permitted, the checkAccess method of this thread is invoked, which may cause a SecurityException to be thrown If this thread i
继续访问
线程的中断
我们都知道线程被终止一般有两个原因:一是run()方法正常执行完毕而自然死亡;二是因为一个没有捕获的异常终止了run方法而异外死亡。 当一个线程在正常执行完毕之前被中断是一件很可怕的事情,会出现很多意想不到的事情,比如不能归还锁而造成死锁现象,stop()方法和destroy()方法就是因此而被废弃的。 在前一篇博客中,我们尝试了利用一些变量以指示目标线程应该停止运行来达到线程终止的目的。在Jav
继续访问
java关闭未执行完的线程_发现在JAVA中完全没办法用另一个线程去中断一个正在运行的线程,
引用来自“爱吃大肉包”的答案引用来自“Grrrr”的答案真搞不懂,sun 已经推荐使用ExecutorService框架来处理thread了,为什么还是不用Executor提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。可以关闭ExecutorService,这将导致其拒绝新任务。提供两个方法来关闭ExecutorService。shutdown()方法
继续访问
线程中断Thread的interrupt()方法
什么时候需要关闭一个线程? 下面简单的举例情况: 比如我们会启动多个线程做同一件事,比如抢12306的火车票,我们可能开启多个线程从多个渠道买火车票,只要有一个渠道买到了,我们会通知取消其他渠道。这个时候需要关闭其他线程 很多线程的运行模式是死循环,比如在生产者/消费者模式中,消费者主体就是一个死循环,它不停的从队列中接受任务,执行任务,在停止程序时,我们需要一种”优雅”的方法以关闭该线程 在一些场景中,比如从第三方服务器查询一个结果,我们希望在限定的时间内得到结果,如果得不到,我们会希望取消该任务
继续访问
终止线程的方法
转载自:>

CAN_MCR 寄存器的 AWUM 位置 1,这样硬件将通过清零 SLEEP
位来自动执行唤醒序列。(摘自 -- STM32F4xx中文参考手册)

或者自定义中断,在中断例程中将 SLEEP 位清零。这样在中断引脚电平变化的时候,就会自动唤醒。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/13380003.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-25
下一篇 2023-07-25

发表评论

登录后才能评论

评论列表(0条)

保存