jjzjj

interrupt

全部标签

linux - linux 内核的最大中断频率是 Hz、kHz、MHz 还是 GHz?

开始之前:是的,我知道答案是architecturedependent-我只对大致数字感兴趣,就数量级而言。linux内核对中断频率有上限吗?背景:我想在Linux中连接相机模块。该模块有一个时钟并行数据输出(8位,~650kHz),我想从中读取数据并将其存储在缓冲区中,以便通过例如/dev/camera进行访问。我编写了一个基本的驱动程序,它正在监视相应的中断线。如果我让一根电线悬在中断引脚上,我就会从白噪声中得到中断。但是,如果我连接一个更高频率的信号(来自555计时器的atm~250kHz),则不会触发任何中断。(我已经用/proc/interrupts确认了这一点)我的想法是,

linux - TASK_KILLABLE 和 TASK_INTERRUPTIBLE 有什么区别?

TASK_KILLABLE似乎应该是TASK_INTERRUPTIBLE的一个子集,因为终止任务是,嗯,中断它的一种方式;然而,根据sched.hhere和here看起来TASK_KILLABLE是UNINTERRUPTIBLE。#defineTASK_INTERRUPTIBLE1#defineTASK_UNINTERRUPTIBLE2#defineTASK_WAKEKILL128#defineTASK_KILLABLE(TASK_WAKEKILL|TASK_UNINTERRUPTIBLE)这对我来说真正归结为;我什么时候想使用wait_for_completion_interrupt

linux - TASK_KILLABLE 和 TASK_INTERRUPTIBLE 有什么区别?

TASK_KILLABLE似乎应该是TASK_INTERRUPTIBLE的一个子集,因为终止任务是,嗯,中断它的一种方式;然而,根据sched.hhere和here看起来TASK_KILLABLE是UNINTERRUPTIBLE。#defineTASK_INTERRUPTIBLE1#defineTASK_UNINTERRUPTIBLE2#defineTASK_WAKEKILL128#defineTASK_KILLABLE(TASK_WAKEKILL|TASK_UNINTERRUPTIBLE)这对我来说真正归结为;我什么时候想使用wait_for_completion_interrupt

c++ - 在没有用户输入的情况下中断 cin while 循环

在main中,我让用户能够输入命令来停止应用程序:while(run_processes&&cin>>command_line_input){我还想通过设置run_processes=false;停止其他地方的应用程序。但是,当我将run_processes设置为false时,如果用户不输入,上述循环不会停止。如何在用户不输入的情况下正确中断循环? 最佳答案 不可能以可移植的方式中断std::cin。然而,您可以解决非可移植解决方案,例如在UNIX系统上手动poll()标准输入并在轮询时检查run_processes。

c++ - 在没有用户输入的情况下中断 cin while 循环

在main中,我让用户能够输入命令来停止应用程序:while(run_processes&&cin>>command_line_input){我还想通过设置run_processes=false;停止其他地方的应用程序。但是,当我将run_processes设置为false时,如果用户不输入,上述循环不会停止。如何在用户不输入的情况下正确中断循环? 最佳答案 不可能以可移植的方式中断std::cin。然而,您可以解决非可移植解决方案,例如在UNIX系统上手动poll()标准输入并在轮询时检查run_processes。

linux - 为什么 _exit(0)(通过系统调用退出)阻止我接收任何标准输出内容?

我有一个Linuxx86-32GAS汇编程序这样终止:movl$1,%eaxmovl$0,%ebx#argumentfor_exitint$0x80当我这样退出时,程序正常运行,但如果我尝试读取标准输出输出,我什么也得不到(使用less或wc)。我尝试编译一个最小的C程序并比较strace输出。我发现的唯一区别是,GCC使C程序(intmain(){printf("donkey\n");})隐式退出exit_group(0)在strace输出中。我尝试修改我的ASM程序以使用callexit而不是原始系统调用退出。标准输出现在可以正常读取了。测试用例.datadouout:.strin

linux - 为什么 _exit(0)(通过系统调用退出)阻止我接收任何标准输出内容?

我有一个Linuxx86-32GAS汇编程序这样终止:movl$1,%eaxmovl$0,%ebx#argumentfor_exitint$0x80当我这样退出时,程序正常运行,但如果我尝试读取标准输出输出,我什么也得不到(使用less或wc)。我尝试编译一个最小的C程序并比较strace输出。我发现的唯一区别是,GCC使C程序(intmain(){printf("donkey\n");})隐式退出exit_group(0)在strace输出中。我尝试修改我的ASM程序以使用callexit而不是原始系统调用退出。标准输出现在可以正常读取了。测试用例.datadouout:.strin

c - request_irq 和 __interrupt 的区别

据我所知,两者都用于注册中断处理程序。我在内核代码中看到了很多request_irq调用,但甚至没有看到一个__interrupt调用。__interrupt是从用户空间注册处理程序的某种方式吗? 最佳答案 request_irq本质上是对request_threaded_irq的包装调用,它分配IRQ资源并启用IRQ。这是从kernel/irq/manage.c,Line#1239中的注释block中解释的.基本上,如果您需要为某种设备设置中断处理,您需要使用request_irq。确保您正在使用的任何子系统还没有为request

c - request_irq 和 __interrupt 的区别

据我所知,两者都用于注册中断处理程序。我在内核代码中看到了很多request_irq调用,但甚至没有看到一个__interrupt调用。__interrupt是从用户空间注册处理程序的某种方式吗? 最佳答案 request_irq本质上是对request_threaded_irq的包装调用,它分配IRQ资源并启用IRQ。这是从kernel/irq/manage.c,Line#1239中的注释block中解释的.基本上,如果您需要为某种设备设置中断处理,您需要使用request_irq。确保您正在使用的任何子系统还没有为request

linux - 如何在 Linux 中避免共享 IRQ 竞争

我正在考虑嵌入式Linux项目(还没有硬件)中即将出现的情况,其中两个外部芯片需要共享一条物理IRQ线。这条线在硬件中能够实现边沿触发,但不能实现电平触发中断。查看Linux中的共享irq支持,我了解到这与两个单独的驱动程序一起工作的方式是每个驱动程序都会调用它们的中断处理程序,检查它们的硬件并在适当时进行处理。但是我想象以下竞争条件,并且想知道我是否遗漏了什么或者可以采取什么措施来解决这个问题。假设有两个外部中断源,设备A和B:设备B中断发生,IRQ激活IRQ边缘导致Linux核心中断处理程序运行设备A的ISR运行,发现没有待处理的中断设备中断发生,IRQ保持活跃(线或)设备B的IS