标签: interrupt

你如何测试你的中断处理模块?

我有一个中断处理模块,它控制嵌入式处理器上的中断控制器硬件.现在我想为它添加更多测试.目前,测试仅测试中断嵌套是否有效,方法是在ISR中进行两次软件中断,一次是低优先级,另一次是高优先级.如何进一步测试该模块?

c testing embedded interrupt

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

如何保持中断时间短?

嵌入式编程中最常听到的建议是"保持中断时间短".

现在我的情况是我的main()循环中有一个非常长的运行任务(将大块数据写入SD卡),有时需要100ms.因此,为了保持我的系统响应,我将所有其他内容移动到了中断处理程序.

例如,通常可以在中断中处理传入的UART数据,然后在main()循环中处理传入的命令,然后发回响应.但在我的情况下,命令的整个处理/处理也在中断中进行,因为我的main()循环可以被阻塞(相对)长时间.

最佳解决方案是切换到RTOS,但我没有RAM.我的设计是否有替代方案可以缩短中断时间?

embedded arm interrupt firmware interrupt-handling

11
推荐指数
2
解决办法
1758
查看次数

为什么在实现Runnable时使用Thread.currentThread().isInterrupted()而不是Thread.interrupted()?

在stackoverflow上,我经常看到使用Thread.currentThread().isInterrupted().Runnable在while循环中实现和使用它时,如下所示:

public void run() {
  while(!Thread.currentThread().isInterrupted()) { ... }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何不同使用Thread.interrupted()(除了interrupted使用时清除标志interrupted())?

我也见过Thread.currentThread().interrupted().这是正确的使用方式,还是Thread.interrupted()足够的?

java multithreading interrupt runnable

11
推荐指数
2
解决办法
6971
查看次数

PCIe插槽的中断路由直接连接到CPU

如果我们今天查看Haswell架构图,我们可以看到有PCIe通道直接连接到CPU(用于图形)以及其中一些路由到平台控制器集线器(南桥更换): 英特尔C22X芯片组图

如果我们看一下英特尔8系列数据表(C222的规格),我们会发现英特尔C222包含用于路由传统INTx中断的I/O APIC(第5.10章).我的问题是,如果传统的INTx中断请求直接到达CPU(通过PCIe 3.0通道)会发生什么.是否必须首先转发到C222,还是系统代理中还有另一个I/O APIC,在这种情况下我必须编程?此外,借助用于定向I/O的英特尔虚拟化技术,现在还有一个额外的间接,即中断重映射表.在CPU或C222上的系统代理(前北桥)中的那个表是否意味着在启用重映射的情况下,需要首先将PCIe 3.0通道的所有中断路由到C222?

operating-system x86-64 intel interrupt pci-e

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

CPU如何找到ISR并区分设备

我应该先分享我所知道的一切 - 那就是完全混乱.关于这个主题有几个不同的问题,所以请不要生气:).

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在这个问题上的作用,但是无法理解.

谢谢阅读.非常感谢您的回答.

interrupt irq isr apic

10
推荐指数
2
解决办法
1万
查看次数

Ruby - 在中断上隐藏"^ C"

在Ruby中我有以下内容:

# Trap Interrupts
trap("INT") do
    puts "Shutting down..."
    exit
end
Run Code Online (Sandbox Code Playgroud)

当我中断程序时,将打印以下内容(Mac OSX Lion):

^ CShutting down ...

有没有办法^C在Ruby中隐藏?

ruby interrupt

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

如何知道linux中特定引脚的中断/ GPIO编号

我正在做一个我需要在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编号?

我搜索了董事会文件和数据表,但它没有包含任何关于如何获得这些数字,任何想法或帮助在哪里看?

linux embedded arm interrupt embedded-linux

10
推荐指数
1
解决办法
2万
查看次数

Windows(或Linux)中的不间断进程?

有没有办法让程序无法中断(一个不间断的程序)?通过这个,我的意思是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上找不到任何东西.

c hook signal-processing interrupt interrupt-handling

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

Linux中断与轮询

我正在开发一个带有DSP和ARM的系统.在ARM上有一个Linux操作系统.我有一个DSP向ARM(Linux)发送数据 - 在Linux中有一个内核模块,它读取从DSP接收的数据.内核模块正在唤醒以使用DSP与ARM之间的硬件中断来读取数据.

我想编写一个用户空间应用程序,每次有来自DSP的新数据时,它将从内核空间(内核模块)读取数据.
问题是:

有什么方法可以做到这一点,从内核到用户空间的软件中断,或者每隔10ms从用户空间轮询(用内核读取已知的内存地址).

知道:

  • 从DSP到内核的数据必须在很短的时间内到达 - 100us.
  • 从内核到用户空间的数据可能需要10ms到30ms.
  • 正在读取的数据被认为很小 - 大约100个字节.

c linux real-time interrupt linux-kernel

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

dma vs中断驱动的i/o

我对DMA和中断I/O之间的差异有点不清楚.(目前正在阅读操作系统概念,第7版).

具体来说,我不确定在任何一种情况下中断何时发生,并且在两种情况下在哪些点上CPU都可以自由地进行其他工作.我一直在阅读的东西,但不一定和解:

中断驱动

  1. 控制器通过驱动程序初始化
  2. 控制器检查由驱动程序加载的寄存器以决定操作
  3. 从/向外设和控制器缓冲区的数据传输随之发生.
  4. 控制器发出中断时(每个字节读取?读取每个字?当缓冲区填满时?传输完成时?
  5. 这是我的理解,该CPU是没有做任何事情时外围< - >控制器I/O正在发生,并且控制器< - > MM I/O都发生?
  6. 当传输完成或块填满时,CPU必须初始化从控制器缓冲区到MM的传输

DMA

  1. 与上面相同,除了控制器能够在没有CPU干预的情况下将数据从其缓冲区直接传输到MM.
  2. 这是否意味着CPU仅在整个传输完成时中断,或者在控制器缓冲区填满时是否仍然中断?
  3. 唯一的区别是CPU不再需要等待控制器< - > MM I/O,但是当控制器缓冲区填满时仍然必须中断?或者DMA是否也将其隐藏在CPU中?

architecture operating-system driver interrupt dma

10
推荐指数
2
解决办法
2万
查看次数