问题标签 [interrupt-handling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
embedded - 如何调试 STM32 设备中的意外复位?
我正在使用 STM32F107 芯片在 C 语言中进行一些开发,并且在某些时候,当我调用特定函数时,设备开始重置。我没有调试器,我的调试只是串行端口上的纯文本。
我使用了其他一些微控制器,在这些微控制器中我能够访问寄存器以查看重置的原因,但我似乎无法找到该设备的等价物。我知道 Cortex-M3 的硬件异常,但我不知道其中一个是否被触发,因为当我在这些处理程序中时,我似乎无法通过 usart 发送文本(可能是因为我的 TX函数使用中断?)。
所以,我决定问问在这个设备上比我更有经验的人:调试这种情况通常会做什么?
编辑
其中一位开发人员激活了 WWDG 看门狗,它正在重置硬件,然后我才能从故障处理程序中获取我的信息。这是一个硬故障,因为通过指向错误位置的指针调用函数。但是,我会保留这个问题,希望有人能提供更多详细信息(或有关它的材料),以便从保存在硬故障(@dwelch 想法)中的寄存器中指向 C 代码。
arm - 设置中断向量表,ARMv6
我正在尝试在我的 ARMv6 裸机应用程序中使用用户模式和 SVC,但为此我需要设置 ARMv6 中断向量表的 SVC 条目以分支到我的中断处理程序。但是,我找不到一个很好的例子来说明如何做到这一点(即:我需要设置什么内存地址,以及设置什么)。我过去做过类似的事情,但总是使用更全面的引导加载程序(RedBoot)为我设置了一些。任何帮助,将不胜感激。
我正在使用以下方法测试我的应用程序:
arm - Relocate the ARM exception vectors?
How would I relocate the ARM exception vectors?
Basically, I need to be able to remap them in a way, so when the ARM core tries to execute the vector, it should execute the custom exception vector that is stored in kernel's RAM bit and not in the ROM that is at 0x0
. Is that possible? Or am I meant to route the interrupts to the kernel from the ROM?
So essentially, is there a way of telling the ARM core, "here is the new address for your vector table"? I know that you can start the CPU in the high vector mode, but that's not what I'm looking for. I need to be able to set the vector base to a custom address dynamically.
linux - x86 架构的 Linux 内核中中断处理代码的位置
我正在做这样的研究,试图在 Linux 内核中找到实现中断处理的代码;特别是,我试图找到负责处理系统计时器的代码。
根据http://www.linux-tutorial.info/modules.php?name=MContent&pageid=86
内核处理中断的方式与处理异常的方式非常相似:所有通用 > 用途寄存器都被压入系统堆栈并调用一个公共中断处理程序。>保存当前中断优先级并加载新的优先级。这可以防止较低优先级的 >interrupts 在内核处理此 >interrupt 时中断内核。然后调用真正的中断处理程序。
我正在寻找将所有通用寄存器推送到堆栈上的代码,以及常见的中断处理代码。
至少将通用寄存器推入堆栈是独立于体系结构的,因此我正在寻找与 x86 体系结构相关的代码。目前我正在查看内核源代码的 3.0.4 版本,但任何版本都可能没问题。我已经开始查看 kernel/irq/handle.c,但我没有看到任何看起来像保存寄存器的东西;看起来它正在调用注册的中断处理程序。
linux - Linux ISR 入口点在哪里
我正在尝试了解 Linux 内核中的系统调用接口和实现。我知道标头和实现entry.S
之间的关系。libc
我想知道的是内核中int 80h
第一次接收到的位置,即决定它实际上是 80h 中断的位置。谁能指出我的 LXR 链接?
operating-system - 从中断返回到哪里
我已经阅读(并研究过)有关中断处理的信息。
我一直无法理解的是,我们如何知道从中断处理程序返回到(PC / IP)的位置。
据我了解:
- 中断是由设备引起的(比如键盘)
- 相关的处理程序被调用 - 在正在运行的进程下。也就是说,不执行到 OS 的上下文切换。
- 中断处理程序完成,并将控制权交还给正在运行的应用程序。
上面描述的过程,这是我对中断处理的理解,发生在当前运行进程的上下文中。所以它类似于方法调用,而不是上下文切换。
然而,由于我们实际上并没有调用中断处理程序,所以我们没有机会将当前 IP 推入堆栈。
那么我们如何知道从中断中跳回的位置。我很困惑。
将不胜感激任何解释,包括简单地指向一个好的 pdf/ppt 专门解决这个问题的单行词。
[我通常指的是Linux和C代码下的上述过程-但欢迎所有好的答案]
c# - Unable to trap Ctrl+C in a C# console app
I've got the following code that I'm trying to use to trap Ctrl+C in a console app:
I've already checked the questions here and here, but for some reason, when I press Control+C, Visual Studio 2010 won't get into my handler in the debugger, I just get a 'source code unavailable' screen, and the opportunity to continue debugging, and that's it. Does anybody have any idea why I'm not getting into the handler ? I'm sure I'm just missing something simple.
linux - 为什么我不能处理 NMI?
我想处理 NMI 并在 NMI 发生时做一些事情。首先,我编写了一个幼稚的 nmi 处理程序:
并编写一个模块来注册我的 nmi 处理程序,然后使用 APIC 触发 NMI 5 次:
现在我输入“insmod xxx.ko”来安装这个模块,然后,我检查/var/log/syslog:
显示我注册nmi_handler成功(result=0),NMI被触发了5次,但是我没有找到应该在nmi_handler中输出的sting。我在 Ubuntu 10.04 LTS、Intel Pentium 4 Dual-core 上工作。
- 这是否意味着我的 NMI 处理程序没有执行?
- 如何在 Linux 中处理 NMI?
embedded - stm32f4 上的 I2C 从机接收器
我尝试在 stm32f4 上实现 i2c 从接收器中断服务程序。这是我的智能代码。
}
中断被调用并进入 I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED 情况。SCL 现在很低。参考手册说,如果我清除地址标志,时钟将继续并发送数据(第 579 页 - 从属接收器)。在我看来,如果有任何数据到达并且下一个状态将是 I2C_EVENT_SLAVE_BYTE_RECEIVED,则总是会调用中断。
我无法从 stm 或通过 google 找到任何示例。任何人都可以帮助我或给我一个例子。
c - 在 C 中完成的 IDT 不起作用
我无法让 IDT 工作,因为我的中断例程没有被调用,尤其是当我按下键盘上的一个键时与键盘相关的例程。我正在传递 IDT 表的特殊 48 位指针地址。我正在这样做
我也不知道至少 GDT 是否在工作。
1)我应该怎么做才能让我的 IDT 工作。我也看过一些教程,但没有帮助 2) 我如何验证 GDT 是否正常工作?
提前致谢。
编辑:我正在为我自己的操作系统做这个。我怀疑我的汇编程序是否能够正确接收指针的地址。所以我也尝试使用内联汇编来做lidt,但没有帮助。我不知道出了什么问题。任何线索,想法?
}
}