[H8-ML(3254)] Re:割込みによるシリアル通信について(ビットフィールド話)
From: Shigeru Makino <mac@xxxxxxxxxxxxxx>
Date: 2003年05月25日(日)15時08分34秒
macです。

hamayan <hamayan@xxxxxxxxxxxxxxxx> wrote:

> そもそも、コンパイラメーカーからバージョンアップの時に
> 何が変更されているのか、聞かないのですか?

「はい、旧バージョンのバグを修正し、多くの新機能が追加され、
今までより、30%も処理速度が速くなりました。」

な〜んて答えが返って来るのがおちでしょう (^^)

> 所で、バスにWAITを挿入する時、15位まで挿入できたとしたら、
> WAIT1からWAIT15までdefineマクロを用意するのでしょうか?

そうですね、例えば、

#define WAIT3 0x80
#define WAIT2 0x40
#define WAIT1 0x20
#define WAIT0 0x10

#define WAITMASK (WAIT3|WAIT2|WAIT1|WAIT0)
#define WAITSHIFT 4
#define WAIT(x)	((x << WAITSHIFT) & WAITMASK)

と定義し、
WCR = (WCR & ~WAITMASK) | WAIT(7);
などと書けばよいのではないでしょうか?

> 上の例で、キャラクタ長だけ変更したい時も、全部書かなけりゃいけない
> のですか?
> SMR0 = (ASYNC | CHRLEN7 | NONEPRTY | STOPLEN1 | !MP | CLKDIV1);

SMR0 = (SMR0 & ~CHR) | CHRLEN7;
と書いたっていいけど、
SMR0 = (ASYNC | CHRLEN7 | NONEPRTY | STOPLEN1 | !MP | CLKDIV1);
と書いたほうが、間違えないし読みやすいでしょ?

まあ、いちいち問題を出す前に、
bit fieldでないとかけない記述が、
あるかどうか考えてみてはどうでしょう?
# あるわけないよねえ。
# bit fieldをサポートしていないコンパイラーだってあるし。

あるいは、bit fieldで書いたほうが、
それを使わなかった場合より、
どれほど良いか具体例を書いてみるとか。

-- mac

スレッド概略
[3252(R)](起点)
 └[表示中]


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


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