为什么 FIQ 需要用汇编而不是 C 来写?

Why FIQ need to be written in assembly not in C?

我正在了解 FIQ 在 ARM 上的工作原理,并发现 FIQ 应该始终用汇编而不是用 C 编写,但我不明白为什么?

我经历了以下link

http://comments.gmane.org/gmane.linux.ports.arm.kernel/14004

但还是不明白为什么需要它?

谁能通过一些例子指出在汇编中编写 FIQ 的必要性吗?

我的猜测是基于:

Also, it's a little difficult to write the FIQ code in C, since you lack a stack :)

如果没有堆栈,则意味着编译器仅限于对所有变量使用寄存器,我什至不确定您是如何表达的。

您可以将 register 放在所有局部变量上,但这并不意味着编译器必须遵守。

用汇编编写代码当然绕过了这个限制,并且可以结合寄存器和全局状态来做事。

另请参阅 this question's answers 以了解有关普通中断和快速中断之间区别的更多信息。

因为有什么意义呢,你使用额外的寄存器组来节省少量时钟周期来保存状态,然后使用 C 并完全破坏那微小的成本节省?如果您对优化到该级别不感兴趣,请不要为 fiq 烦恼,只需使用 irq。