読者です 読者をやめる 読者になる 読者になる

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にセットされた割り込み処理にジャンプするので、便利かなと思う。