问题标签 [interrupt]
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.
你会从 DOS 挂起什么中断来获取实时时钟
你会从 DOS 挂起什么中断来获取实时时钟?
在 Mac OS X Intel 上启用浮点中断
在 Linux 上,feenableexcept 和 fedisableexcept 可用于控制浮点异常时 SIGFPE 中断的生成。如何在 Mac OS X Intel 上执行此操作?
http://developer.apple.com/documentation/Performance/Conceptual/Mac_OSX_Numerics/Mac_OSX_Numerics.pdf , pp. 7-15中提供了用于启用浮点中断的内联汇编,但仅适用于 PowerPC 汇编。
使用键盘中断显示与用户键入的内容不同的内容
在 C 语言中,使用键盘中断,如何显示用户键入的备用键?例如,当我按键盘上的“Q”时,屏幕应显示“A”。
WinCE 6.0 在 ARM 目标上的典型中断延迟是多少?
ARM 目标上 WinCE 6.0 的典型中断延迟是多少?
(只是寻找性能估计的大概值)
断点可以在 ISR 中使用吗?
断点可以在中断服务例程 (ISR) 中使用吗?
静态全局变量和静态易失变量有什么区别?
我在文件范围内使用了一个静态全局变量和一个静态 volatile 变量,
两者都由 ISR 和主循环更新,主循环检查变量的值。
在优化过程中,全局变量和 volatile 变量都没有被优化。因此,不是使用 volatile 变量,而是使用全局变量来解决问题。
那么使用全局变量而不是 volatile 好不好?
使用静态易失性的任何具体原因?
任何示例程序都将是可观的。
提前致谢..
您如何在内存非常有限的嵌入式系统上处理大量数据传输?
我有一个微控制器,它必须从 PC 串行端口(115200 波特)下载一个大文件,然后通过 SPI(~2 MHz)将其写入串行闪存。闪存写入必须在 256 字节块中,前面有写入命令和页面地址。系统上可用的总 RAM 为 1 kB,堆栈大小为 80 字节。
这目前是通过从 UART 填充一个 256 字节缓冲区然后乒乓到另一个 256 字节缓冲区来工作的,该缓冲区由 RX 缓冲区就绪信号上的中断填充,同时使用忙写入写入闪存。重复缓冲区交换,直到操作完成。
我更愿意为在单独的循环缓冲区上运行的 SPI 和 UART 端口设置 TX/RX 中断处理程序。因此,我可以简单地填充 TX 缓冲区并启用中断或检查缓冲区是否有传入数据,而不是轮询新字节并等待操作完成。这将为实际工作提供更多时钟周期,而不是等待外围设备。
在使用 128 字节循环缓冲区实现 IRQ 后,我轮询 UART RX 缓冲区中的数据并立即将其放入 SPI TX 缓冲区以进行文件传输。我使用这种方法遇到的问题是我没有足够的 RAM 用于缓冲区,并且 PC 接收缓冲区的填充速度比我将数据传输到闪存传输缓冲区的速度要快。显然,传输速度不是问题(115.2 kHz 输入和 2 MHz 输出),但在传输每个 256 字节页面后有一个写周期等待。
似乎频繁的 SPI 中断阻塞了一些 UART 中断并导致字节丢失。我选择的解决方案是为 UART 接收中断使用一个环形缓冲区,并将数据馈送到一个 256 字节的页面缓冲区,该缓冲区通过轮询字节传输和写入完成来发送到串行闪存。一个 128 的环形缓冲区足够大,可以防止 SPI 写入期间的溢出。
我应该如何关闭信号处理程序中的套接字?
我正在编写一个非常简单的服务器,它会永远循环,直到按下 Ctrl-C。我想让 ctrl-c 的信号处理程序关闭打开的套接字并关闭服务器,但我不知道信号处理程序的范围是什么,我不喜欢声明套接字的想法(s) 我需要关闭才能成为全球性的。
有人可以提供建议吗?有没有一些标准的方法来做到这一点?
在从中断处理程序返回之前,我是否必须弹出某些异常推送到堆栈的错误代码?
我已经加载了一个包含 256 个条目的 idt 表,所有条目都指向类似的处理程序:
- 对于异常 8 和 10-14,推送异常编号(这些异常会自动推送错误代码)
- 对于其他人,推送“虚拟”错误代码和异常编号;
- 然后跳转到一个通用处理程序
因此,当公共处理程序进入时,堆栈已正确对齐并包含异常/中断号、错误代码(可能只是一个伪代码)、eflags、cs 和 eip。
我的问题是关于从中断处理程序返回的。我使用iret
从堆栈中取出异常编号和错误代码后返回,但这不适用于异常 nr 8;如果我将错误代码留在堆栈上,则返回正常!
问题:
- 对于将错误代码放在那里的异常,我是否必须将错误代码留在堆栈上?如果是这样,如何
iret
确定它是否必须弹出错误代码? - 一旦我启用中断,我总是会得到异常 8(双重故障),但随后一切正常(我正在开发一个爱好操作系统)。这是正常行为还是我在某处有错误?