FIQ考察
最速でFIQをやりたい場合は次のような記述か?
__vectors: LDR PC,RST_addr /*リセット*/ LDR PC,UNDEFINED_addr /*Undefined Instruction:未定義命令*/ LDR PC,SWI_addr /*ソフトウェア割り込み*/ LDR PC,PreAbort_addr /*Prefetch Abort:命令のプリフェッチ中にアボート*/ LDR PC,DatAbort_addr /*Data Abort:データアクセス中のアボート*/ NOP /*予約領域*/ LDR PC,IRQ_addr /*割り込み*/ /*FIQ処理*/ /*レジスタ退避*/ /*本処理*/ /*レジスタ復帰*/ /*FIQ処理終了*/
と言うかんじか?これならジャンプ命令もないぶん高速化できる。ただ、C言語で書くとなるとどうするか悩む?
やっぱ現実的には、次のようなソースかなと思う。
__vectors: LDR PC,RST_addr /*リセット*/ LDR PC,UNDEFINED_addr /*Undefined Instruction:未定義命令*/ LDR PC,SWI_addr /*ソフトウェア割り込み*/ LDR PC,PreAbort_addr /*Prefetch Abort:命令のプリフェッチ中にアボート*/ LDR PC,DatAbort_addr /*Data Abort:データアクセス中のアボート*/ NOP /*予約領域*/ LDR PC,IRQ_addr /*割り込み*/ LDR PC,[PC, #-0x0FF0] /* Vector from VicVectAddr 高速割り込み*/
これだと何かとまずVICにセットされた割り込み処理にジャンプするので、便利かなと思う。