こんにちは、椚座と申します。 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