[H8-ML(1604)] Re: 関数はすべて正論理で書きたい
From: Junsuke Kunugiza <jk@xxxxxxx>
Date: 2002年02月23日(土)15時11分43秒
こんにちは、椚座と申します。

Sat, 23 Feb 2002 11:09:20 +0900 ごろ
"ike" <ike@xxxxxxxxxxxxxxxxxxx> さんは書きました:

> 直接H8には関係ないのですが、教えてください。
> 私はハード屋ですので、ハードチェック用F/Wしか書いていないのでが
> 正論理信号,負論理信号の扱いでよい方法が無いか教えてください。
> 1.関数はすべて正論理で書きたい。
> 2.正/負論理を1箇所で定義したい。
> 3.日立のヘッダーFILEも、使いたい。
> 4.日立のCコンパイラとGCCの両方で使いたい。

以下のようなものでどうでしょうか。P1.DR.BIT.B1 とかも
使えます。多分、どっちのコンパイラでもOKでしょう。


/* 正論理か負論理かを明示するマクロを予め作る */

#define IS_POSITIVE(state) state
#define IS_NEGATIVE(state) !state


/* 入力名と論理の正負を一括で定義するところ */

/* 正論理な入力信号であるところの SOME_INPUT */
#define SOME_INPUT    IS_POSITIVE(P1.DR.BIT.B1)

/* 負論理な入力信号であるところの ANOTHER_INPUT */
#define ANOTHER_INPUT IS_NEGATIVE(P1.DR.BIT.B2)

というようなヘッダを作って include しておくと、たとえば
以下例のように、コーディングするときには正論理・負論理を
意識することなく信号の真偽を評価できます。

  if (SOME_INPUT) {
    /* 真であるときの処理 */
  } else {
    /* 偽であるときの処理 */
  }

  /* 負論理な入力だけど、! 不要 */
  if (ANOTHER_INPUT) {
    /* 真であるときの処理 */
  } else {
    /* 偽であるときの処理 */
  }


テストはしてませんが、これをプリプロセッサに通すと

  if ( P1.DR.BIT.B1   ) {

  } else {

  }

  if (! P1.DR.BIT.B2   ) {

  } else {

  }

こんな風に書き変わります。


椚座 淳介 -- jk@xxxxxxx

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


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


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