«  | トップページ |  »

2004年5月 7日 (金)



昨日は割り込みのオーバーヘッドで、こんなもんかな?で3usecと書いたけれど、実際にどれくらいなのか調べてみた。

コンパイルオプションを変更し、アセンブルリストを吐くようにしてみる。
タイマーW割り込みのところは...

;*** File HANDLER.C , Line 110 ; block
_TMW: ; function: TMW
PUSH.W R6
PUSH.L ER1
PUSH.L ER0
;*** File HANDLER.C , Line 110 ; block
;*** File HANDLER.C , Line 133 ; expression statement
MOV.W @65414:16,E0

(・・・略・・・)

;*** File HANDLER.C , Line 180 ; block
POP.L ER0
POP.L ER1
POP.W R6
RTE

となっていて、push/popとretで、全部で38ステート。
割り込み処理への分岐時間は、マニュアルによると15~27ステート。
合計で53~65ステート。

1ステート50nsecだから、実際のオーバーヘッドは2.65~3.25usecとなる。
感覚的にこんなもの、という感じで書いたにしては、ずばり真ん中を射ているなあ...
もっといろいろ処理を加えていくと、退避されるレジスタも増えるのだろうけれど。

アセンブルコードを見ていると、もうほんのちょっと高速化できそうなところがある...しかしインラインアセンブラで高速化するのも最後の手段にしたいところだ。

プログラムは、この調子で実行時間を計測しつつ、パズルのように進めていくつもり。たまにはこんなのも面白いだろう、多分...
(本人が)こわれたり、システムが破綻したら、用心棒の先生に変わってもらうし...

|

«  | トップページ |  »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: :

«  | トップページ |  »