[H8-ML(3267)] Re:Cのビット演算とインラインアセンブラのトレードオフ
From: まつぞの <k-zono@xxxxxxxxxxxxxxxx>
Date: 2003年05月25日(日)20時35分23秒
まつぞの です。

お返事ありがとうございます。

"Shouji Hirata" <shouji@xxxxxxxxxxxxx> wrote:

> > I/O空間のビット処理に限定した場合、どのような基準で C とアセンブラを
> > 使い分けるものなのでしょうか?
> 特にしっかりした基準を設けているわけではないのですが、速度をあまり要求されな
> いところはほとんどCで書いています。たとえば周辺の初期化や後始末のような部分
> などです。逆に「時間的にタイトな」割り込み処理の中や、つい先ごろここで話題に
> なった「シリアルROMにクロックを与える」のような応用の場合は#asmを持ち出すかも
> しれません。

「処理時間が何クロックかかるか」という時間のオーダーで厳しい場合ですね。
C で書いた場合、あるコードが何クロックかかるか、というのはわかりずらい
ので、アセンブラに落としてみてクロック数の検討をつける、ということに
なるのでしょうか。
# CISC な命令セットだと命令あたりのクロック数がばらばらで
# メンドウかもしれませんが。

コンパイラの最適化のオプションも効いてきそうですね。
それほどシビアなコードは書いたことがありません(^^;
お勉強モードでそのうちやってみたいと思います。

> あと、ビット制御命令(H8に限らず)は1ビット単位のセット、クリアしかサポート
> していない場合が多いので複数ビットを同時に扱うような場合はアセンブラで書いて
> もCで書いてもあまりかわらなそうなのでCで書くかもしれません。

mac さんが書かれているような "read modify write" な書き方ですね。
# Byte 単位で読み出して、ビット操作をして、書き戻す。

アセンブラと C でどのくらいかわるのか、後でやってみます。
ありがとうございました。

P.S.
ビットフィールドのスレッドを読み直してから、このメールを
書いているのですが、mac さんの [H8-ML(3237)] を見直して
「おー、SH ってビット操作命令が無いんだー。知らんかった」
と思いました。マイコンを触り始めて1年ちょっと(趣味です)、
H8 も AVR にもビット操作命令があったので SH にもあるもんだと
とゆーか、どの CPU にもあるものかと思っていました(^^;;;

スレッド概略
[3245(R)](起点)
 └[3262(U)]
   └[表示中]
     └[3271(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]