我无法理解“待处理中断”这个词。我的意思是,我看到异步事件的方式就像“时间、潮汐和中断”不等待。
那么这个待处理中断是什么呢?我怎样才能满足一个已经过去但已经消失的请求。
有人可以用一个使用场景来解释一下吗?
编辑:从定义上来说,它是可以理解的(英语意义上),但是如果我应该处理之前发生的中断,我是否正在查看硬件设备上的一些数据缓冲?
我有一段代码:
disable_irq(irq_clk);
local_irq_save(flags);
Run Code Online (Sandbox Code Playgroud)
我发现disable_irq()禁用特定中断,而local_irq_save()禁用所有中断。
所以我想知道上面代码的含义。
我们可以在Windows操作系统中使用Int 13h(直接磁盘读/写),还是Windows保护模式不允许我们使用,如果是,那么是否有工作轮?提前致谢.
我想使用Perl脚本批处理用system()调用的重复操作.当出现问题并且我想要中断这个脚本时,shell会捕获^ C,停止任何工作,并且Perl脚本会快速地转到下一个脚本.
有没有办法可以调用作业,以便中断将停止Perl脚本?
我将如何重定位ARM异常向量?
基本上,我需要能够以某种方式重新映射它们,所以当ARM内核尝试执行向量时,它应该执行存储在内核的RAM位而不是存储在ROM中的自定义异常向量0x0.那可能吗?或者我的意思是将中断从ROM路由到内核?
基本上,有没有办法告诉ARM内核," 这里是你的向量表的新地址 "?我知道你可以在高矢量模式下启动CPU,但那不是我想要的.我需要能够动态地将矢量基数设置为自定义地址.
在过去的几天里,我正在研究很多关于linux第10章的书ldd3.我有一些疑问请澄清一下.有些是我的分析,如果他们错了,请建议.
对于ARM,有一个中断向量表地址 - IRQ中断 - 0x00000018然后芯片制造商可以为USART,SPI,I2C,外部中断等硬件提供单独的中断线 - 并将它们复用到单个IRQ线臂.并有(他们选择的)寄存器来确定哪一个触发了中断.
此外,如果有一个中断线可用于GPIO引脚电平变化中断.如下所示,链路的单个中断线可以由不同设备驱动程序的许多处理程序共享.
fiq&irq handler - arm 通常,中断控制器是一个硬件单元,它将许多中断线复用在一起,为CPU产生单线.发生中断时,控制器会断言IRQ线.CPU停止执行并跳过IRQ向量(位置变化)到中断处理程序.中断处理程序读取中断控制器上的寄存器以确定中断线,然后调用正确的中断处理程序,然后清除中断 - 允许另一个中断发生.
http://www.makelinux.net/ldd3/chp-10-sect-2 此链接中描述了如何注册中断处理程序.
https://unix.stackexchange.com/questions/47306/how-does-the-linux-kernel-handle-shared-irqs Linux为同一共享线路调用所有intruppt处理程序.
我的问题是作为一个设备驱动程序程序员我只调用.... request_irq().
谁提供通用的代码 - IRQ中断@ 0x00000018地址 - 它正在读取供应商特定寄存器以确定哪个中断线引发了IRQ.然后告诉linux功能 - 调用为该IRQ线路注册的所有共享中断处理程序?
是芯片组的GCC编译器启动代码为我们做这项工作吗?
该手册说
陷阱指令
当程序发出陷阱指令时,处理器会生成软件陷阱异常.当程序需要操作系统进行维护时,程序通常会发出软件陷阱.操作系统的常规异常处理程序确定陷阱的原因并作出适当的响应.
然而,当我之前询问它时,答案说这是一个软件中断:
对于不同的体系结构,异常和中断之间的差异似乎也略有不同,因此可以有4种hw,sw,异常和中断的组合(?).
现在我正在研究这个小型系统的程序集,我认为我可以自己学习个别指令,但我正在寻求帮助以了解更大的图景,为什么事件完全是软件异常,而不是硬件异常,硬件中断,软件中断.
# The label alt_main is defined in this file.
# There is a call to this label in the Altera-supplied startup code for Nios II.
# At label alt_main, interrupts and handlers are initialized; thereafter,
# the label main is called, starting the main program.
################################################################
#
# Definitions for important devices and addresses in this system.
#
# Uart_0 at 0x860
.equ de2_uart_0_base,0x860
# Timer_1 at 0x920, interrupt index 10 …Run Code Online (Sandbox Code Playgroud) 我正在阅读关于如何在ARM中处理中断并且知道何时任何硬件中断到达地址0x00000018的指令被执行,这通常是跳转到受尊重的中断处理程序,但是对于不同的模块可能有许多中断处理程序.
那么,这些不同的处理程序如何映射到地址0x00000018?
另外,arm cpu如何知道中断提升是irq或fiq,谁决定它以及哪个设备引发了中断,如何映射到这个中断的受尊重的处理程序.
任何机构都可以指向一个简单的中断处理程序代码,我可以看到所有中断处理程序的作用吗?
我是ARM新手,了解ARM中的中断处理.我已经了解了如何在ARM中设置IRQ处理程序,但不确定如何在ARM程序集中编写它.以下是我对设置IRQ处理程序的理解.
_IRQ_HANDER:
1)SUB lr, lr, #4(不知道它做了什么).
2)在IRQ模式下应该设置单独的堆栈.我知道在x86中我们设置了如下堆栈:
push ebp
mov esp,ebp
sub esp,8
Run Code Online (Sandbox Code Playgroud)
这将重新产生8个字节的堆栈空间.
但不确定我在ARM中如何做同样的事情?
3)存储非存储寄存器,我们可以这样做:
STMFD !sp {r13,r14}
Run Code Online (Sandbox Code Playgroud)
4)复制CPSR到SPSR(我怎么做ARM组装?)
5)转到处理器IRQ模式(我在ARM组件中可以这样做).
6)下一步是什么?
我们需要提供PIC的基址吗?
我正在使用ARMV7架构.
我最近开始研究ARM Cortex微控制器.在通过Internet阅读不同的文章时,我通常会发现2个常见术语,如软件中断和硬件中断.这两者的实际差异是什么?你能用一个例子解释一下吗?
c embedded interrupt-handling embedded-linux interrupted-exception