我正在研究 FIQ 如何在 ARM 上工作,并发现 FIQ 应该始终用汇编而不是 C 编写,但不明白为什么?
我已经通过以下链接
http://comments.gmane.org/gmane.linux.ports.arm.kernel/14004
但仍然无法弄清楚为什么需要它?
任何人都可以通过一些例子指出我需要在汇编中编写 FIQ 吗?
我正在研究 FIQ 如何在 ARM 上工作,并发现 FIQ 应该始终用汇编而不是 C 编写,但不明白为什么?
我已经通过以下链接
http://comments.gmane.org/gmane.linux.ports.arm.kernel/14004
但仍然无法弄清楚为什么需要它?
任何人都可以通过一些例子指出我需要在汇编中编写 FIQ 吗?
因为重点是什么,您使用额外的一组寄存器来节省少数时钟周期来保存状态,然后使用 C 并完全浪费了那微小的成本节省?如果您对优化到那个级别不感兴趣,那么不要打扰 fiq,只需使用 irq。
我的猜测是基于此:
此外,用 C 语言编写 FIQ 代码有点困难,因为您缺少堆栈 :)
如果没有堆栈,这意味着编译器仅限于对所有变量使用寄存器,我不确定你会如何表达。
您可以放置register
所有局部变量,但这并不意味着编译器必须遵守。
用汇编编写代码当然会绕过这个限制,并且可以结合寄存器和全局状态来做事。
有关普通中断和快速中断之间区别的更多信息,另请参阅此问题的答案。