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