为什么 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。
我正在了解 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。