我应该先分享我所知道的一切 - 那就是完全混乱.关于这个主题有几个不同的问题,所以请不要生气:).
1)为了找到ISR,CPU具有中断号.在x86机器(286/386及以上)中,有一个带有ISR的IVT; 每个4字节大小的条目.所以我们需要将中断数乘以4才能找到ISR.所以第一堆问题是 - 我完全混淆了CPU接收中断的机制.为了引发中断,首先设备应该探测IRQ - 然后是什么?中断号在"IRQ"上向CPU传输?我还读过像数据总线上设置ISR地址的设备; 什么呢?覆盖ISR的设备的概念是什么?有人可以告诉我几个CPU轮询中断的示例设备吗?它在哪里找到它们的ISR?
2)如果两个设备共享IRQ(这是非常可能的),它们之间的CPU有何不同?如果两个设备同时引发相同优先级的中断怎么办 我知道会有相同类型和低优先级中断的屏蔽 - 但这种通信是如何在CPU和设备控制器之间发生的?我研究了PIC和APIC在这个问题上的作用,但是无法理解.
谢谢阅读.非常感谢您的回答.
在Ruby中我有以下内容:
# Trap Interrupts
trap("INT") do
puts "Shutting down..."
exit
end
Run Code Online (Sandbox Code Playgroud)
当我中断程序时,将打印以下内容(Mac OSX Lion):
^ CShutting down ...
有没有办法^C在Ruby中隐藏?
我正在做一个我需要在Linux中处理中断的项目.
我使用的板是一个ARM9Board由三星(臂11处理器)的基础上S3C6410 MCU和它具有以下的I/O接口:

如图所示,我有外部中断的EINTx引脚和GPIO引脚作为GPIO引脚,我不介意使用其中任何一个,但我没有他们的数字!
对于EINTx引脚:
我打电话的时候
int request_irq(unsigned int irq, void (*handler)(int, struct pt_regs *),
unsigned long flags, const char *device);
Run Code Online (Sandbox Code Playgroud)
我需要中断号作为函数的第一个参数传递它,那么如何获得irq数,例如EINT16引脚?
对于GPxx引脚: 与我需要GPIO引脚编号将其传递给这些功能的故事相同
int gpio_request(unsigned gpio, const char *label);
int gpio_direction_input(unsigned gpio);
int gpio_to_irq(unsigned gpio);
Run Code Online (Sandbox Code Playgroud)
即,我如何知道GPP8引脚的GPIO编号?
我搜索了董事会文件和数据表,但它没有包含任何关于如何获得这些数字,任何想法或帮助在哪里看?
有没有办法让程序无法中断(一个不间断的程序)?通过这个,我的意思是a process that can't be terminated by any signal, kill command, or any other key combinations在任何系统:Linux,Windows等.
首先,我有兴趣知道它是否可能.如果是,那么可能的范围是什么?
我主要用C,C++和python编写代码; 但我不知道这些编程语言中有任何这样的命令.
是否可以使用汇编语言,以及如何使用?或者使用嵌入式汇编代码(内联汇编)的高级语言c?
我知道有些信号可以捕获,有些信号不像SIGKILL和SIGSTOP.
我记得,当我some viruses couldn't be terminated even from Task Manager.习惯使用Windows-XP时,我想在低级语言中可能有一些解决方案.也许通过重写中断向量表.
我们可以使用TSR(挂钩)编写一个不间断的程序吗?因为TSR只能在重新启动计算机时或者从内存中明确删除TSR时删除.我对么?
我在Google上找不到任何东西.
我试图在Python中运行一个简单的多进程应用程序.主线程产生1到N个进程并等待它们都完成处理.每个进程都运行一个无限循环,因此它们可以在没有用户中断的情况下永远运行,因此我输入了一些代码来处理KeyboardInterrupt:
#!/usr/bin/env python
import sys
import time
from multiprocessing import Process
def main():
# Set up inputs..
# Spawn processes
Proc( 1).start()
Proc( 2).start()
class Proc ( Process ):
def __init__ ( self, procNum):
self.id = procNum
Process.__init__(self)
def run ( self ):
doneWork = False
while True:
try:
# Do work...
time.sleep(1)
sys.stdout.write('.')
if doneWork:
print "PROC#" + str(self.id) + " Done."
break
except KeyboardInterrupt:
print "User aborted."
sys.exit()
# Main Entry
if __name__=="__main__":
main()
Run Code Online (Sandbox Code Playgroud)
问题是当使用CTRL-C退出时,即使进程似乎立即退出,我也会收到一个额外的错误:
......User aborted.
Error …Run Code Online (Sandbox Code Playgroud) 我一直在尝试在程序集(16位)中为MS-DOS编写TSR(Terminate-Stay-Resident)程序(一般).我已经阅读了TSR上的维基百科页面以及在DOS中专门使用它的页面(但它似乎是用C语言教学,而不是直接用汇编语言).我查看了一个包含大量DOS中断文档的站点,找到了这个,这个,以及另一个与TSR程序最相关的站点.我无法发布所有链接,因为作为新用户,我在帖子上最多可以有2个超链接.
所以,我尝试在NASM中以实模式平面模型(.COM文件格式)编写(看似)非常简单的TSR程序.这是代码:
[BITS 16]
[ORG 0x0100]
[SECTION .text]
Start:
; Get current interrupt handler for INT 21h
mov AX,3521h ; DOS function 35h GET INTERRUPT VECTOR for interrupt 21h
int 21h ; Call DOS (Current interrupt handler returned in ES:BX)
mov WORD [v21HandlerSegment],ES ; Store the current INT 21h handler segment
mov WORD [v21HandlerOffset],BX ; Store the current INT 21h handler offset
; Write new interrupt handler for INT 21h
mov AX,2521h ; DOS function 25h …Run Code Online (Sandbox Code Playgroud) Thread.interrupt中断这样的调用sleep,join和wait.我想知道它是如何实现的.
我知道Thread.interrupt设置一面旗帜isInterrupted.是否wait只是调查这个标志?我希望它没有.所以我的问题是如何wait"了解"中断.
我首先了解了计算机如何在原始单个存储程序机器方面工作.
现在我正在学习多任务操作系统,日程安排,上下文切换等等.我认为除了一件事之外,我对这一切都有相当好的把握.我一直认为CPU是一种不间断充电的东西.它总是知道接下来要去哪里(程序计数器),并且无限制地进入该指令等.
显然情况并非如此,因为我的台式计算机CPU并非始终以100%运行.那么CPU如何自行关闭或自行关闭,以及操作系统在这方面扮演什么角色?我猜测CPU上有一个输入允许它掉电......如果没有什么可以安排,操作系统可以设置它,但下一个逻辑问题是它如何重新启动?我猜两件事中的任何一件:
我搜索了所有关于这方面的信息并且相当空手而归.任何见解都会非常感激.
"RES:Rescheduling interrupts"和"LOC:Local timer interrupts"有什么区别?什么责任解雇RES中断?LOC是否与处理器中的定时器h/w生成的通用定时器中断相同?
另外,请详细说明在定时器中断和RES中断期间调度器的哪个部分被调用?如何在Linux内核中发生?
提前致谢.
我是ARM架构的新手,我正试图围绕唤醒机制.
首先,我发现很难找到关于此的好消息.ARM的文档似乎非常简洁.
我想要了解的是,当Cortex(尤其是我正在使用的M0)将被唤醒时.
作为参考,我还咨询了以下内容:
WFE指令的文档是:
3.7.11. WFE
Wait For Event.
Syntax
WFE
Operation
If the event register is 0, WFE suspends execution until
one of the following events occurs:
an exception, unless masked by the exception mask registers or the current
priority level
an exception enters the Pending state, if SEVONPEND in the
System Control Register is set
a Debug Entry request, if debug is enabled
an event signaled by a peripheral or another processor in a
multiprocessor …Run Code Online (Sandbox Code Playgroud)