标签: interrupt

Python signal.signal 是否阻止传播?

所以我有这个代码(部分取自python文档):

import signal

def handler(signum, frame):
    print 'Signal handler called with signal', signum

s = signal.signal(signal.SIGINT, handler)

some_fancy_code() # this code is using subprocess.Popen() to call another script

singal.signal(signal.SIGINT, s)
Run Code Online (Sandbox Code Playgroud)

我现在发现,如果我在程序中执行 Ctrl+C,它会正确输入该处理程序并进行打印。现在,我的想法是,在收到 Ctrl+C 后,我的处理程序将抑制默认处理程序,因此例如我的 subprocess.Popen 将不会收到 KeyboardInterrupt 信号。但这种情况并非如此。

但是当我们用“signal.SIG_IGN”替换“handler”时,这种传播永远不会发生。修改后的片段:

import signal

s = signal.signal(signal.SIGINT, signal.SIG_IGN)

some_fancy_code() # this code is using subprocess.Popen() to call another script

singal.signal(signal.SIGINT, s)
Run Code Online (Sandbox Code Playgroud)

这是因为 SIG_IGN 是用语言本身编写的某种“神奇”信号吗?或者也许有一种方法可以在我自己的处理程序中进行类似的抑制?

在阅读了一些有关堆栈溢出的问题后,我有点困惑。如果有人能为我解释为什么行为如此不同。

python signals interrupt

1
推荐指数
1
解决办法
1647
查看次数

使用 Control + C 突然结束进程是陷阱还是中断?

陷阱和中断之间的区别似乎很明显:陷阱是对内核的软件调用(例如通过异常),而中断与硬件(磁盘、I/O 和外设)相关。鼠标和键盘等设备...)(在此处了解有关差异的更多信息)。

知道了这一点,按 Control + C 结束进程应该属于什么类别?它是一个软件调用的调用,因此是一个陷阱,因为它可以从 Shell 等执行,还是一个中断,因为它是 CPU 从键盘接收的信号?或者中断完全在用户域之外,这意味着它是硬件在用户无法达到的级别上与 CPU 交互?

谢谢你!

c linux signals process interrupt

1
推荐指数
1
解决办法
1167
查看次数

STM32F0 SPI 接收中断未触发

我有一个简单的项目,使用 CubeMX 创建用于外围设备初始化。

SPI 处于从机模式,并且似乎已正确初始化,但是当我对 8 位数据进行计时时,不会调用中断。

这是代码

/* SPI1 init function */
static void MX_SPI1_Init(void)
{

  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_SLAVE;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 7;
  hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;

  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }

}

void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{

  GPIO_InitTypeDef GPIO_InitStruct;
  if(hspi->Instance==SPI1)
  {
  /* USER CODE BEGIN SPI1_MspInit 0 */

  /* …
Run Code Online (Sandbox Code Playgroud)

c microcontroller interrupt spi stm32

1
推荐指数
1
解决办法
4057
查看次数

int3指令和调用__debugbreak有什么区别?

什么是 __debugbreak?是用来触发SIGTRAP的吗?int3 和 __debugbreak 之间有什么区别?

debugging x86 assembly gdb interrupt

1
推荐指数
1
解决办法
4893
查看次数

STM32 - 如何在 HAL 库中为外设 R/W 选择 DMA 或中断

我正在使用 STM32F3 微控制器和 HAL 库。对于许多外设(例如ADC、SPI、I2C),HAL 库提供了3 种读/写数据的方式:轮询模式、中断模式和DMA 模式。我知道我不想要轮询模式,因为它会阻塞。但是,我不确定如何在中断模式和 DMA 模式之间进行选择。有一般经验法则吗?我觉得DMA模式应该总是更好,因为它可以在没有CPU干预的情况下将值写入内存?

arm interrupt stm32 dma

1
推荐指数
1
解决办法
3961
查看次数

RISC-V 中断处理流程

我正在寻找 RISC-V 处理器如何处理中断请求。

我查看了互联网上的指令集手册和信息。重点是准确解释标题设置的内容:指令集。在我看来,如何处理中断是所谓的处理器“程序员模型”的问题。它不适合关于指令集的文档,因为部分中断处理没有在指令中表达。显然,跳转到 ISR并不是出现在程序代码中任何地方的指令。指令集手册提供了 saymret和 的描述mstatus,但未能提供整体视图。

对于一个假设的架构,中断处理可能是这样描述的:

If the IRQ line is high and the I-bit in the status register is set,
the processor executes the following steps atomically:

 - Push the PC of the next instruction onto the stack.
 - Push the status register onto the stack.
 - Clear the I-bit in the status register.
 - The PC is set to the location specified in the INTHNDLR register.
Run Code Online (Sandbox Code Playgroud)

这是我正在寻找的 RISC-V 架构的信息。

interrupt irq riscv

1
推荐指数
1
解决办法
3115
查看次数

我是操作系统新手,IDT 的大小是多少?

需要6个字节来存储中断门描述符,每个描述符由32位段选择器和16位偏移量组成。中断描述符表的大小(以字节为单位)是多少?

x86 interrupt osdev

1
推荐指数
1
解决办法
878
查看次数

(Windows)我可以在程序运行时更改或停止程序吗?

我现在正在用C++编写一个win32程序。我想在窗口上展示我的运行过程,就像时间在流动一样。

例如,这段代码

int a=0;
for(int i=0;i<10;i++)
{
  a++;//The change in "a" can be seen on the window.
  Sleep(1*1000);
}
Run Code Online (Sandbox Code Playgroud)

但我发现,如果我想展示这个过程,比如点击一个按钮,屏幕上就会出现一个变化的数字,那么程序需要一直运行。此时,我没有办法做任何其他事情,例如单击另一个按钮。

所以我意识到我需要一个可以中断当前进程的操作。但我查了很多资料,发现只有Linux系统的fork()函数才能满足我的需求。但我现在使用的是Windows,那么还有什么其他方法可以实现这一点呢?真诚期待您的回复。

c++ winapi interrupt

1
推荐指数
1
解决办法
74
查看次数

x86 16 位汇编中 CLI 和 STI 指令的工作示例

I would like a practical example of the cli and sti instructions in x86 16-bit assembly, i.e. an example in code written in this language which allows me to know what these instructions are for by practice and to go further than theory.

I know the documentation says that cli disables the interrupt flag and sti enables it and the interrupt flag does not affect not handling non-maskable interrupts (NMI) or software interrupts generated by the int instruction.

In the …

x86 assembly interrupt x86-16

1
推荐指数
1
解决办法
1134
查看次数

在中断服务程序中,什么都不能用?

我知道ISR需要非常快,并且应该很快处理中断.但我不明白同样的原因.为什么要满足这个条件?而且,为了做到这一点,对ISR代码的所有内容有什么限制吗?通常情况下,所有不应包含在ISR代码中的内容?

谢谢

operating-system interrupt linux-kernel

0
推荐指数
1
解决办法
2012
查看次数