ロボットカー制御システム全体のプログラムに共通して使用する定数定義などを実装します。
共通ファイルの実装
「common.h」ファイルに、全体的に共通で使用する定義値などを実装します。
実装内容は次のようにします。
#ifndef COMMON_H
#define COMMON_H
typedef unsigned char U1;
typedef unsigned short U2;
typedef unsigned long U4;
typedef unsigned long long U8;
typedef signed char S1;
typedef signed short S2;
typedef signed long S4;
typedef signed long long S8;
#define EI() __EI()
#define DI() __DI()
#define halt() __halt()
#define U1_CLR ((U1)(0U))
#define U2_CLR ((U2)(0U))
#define U4_CLR ((U4)(0U))
#define S1_CLR ((S1)(0U))
#define S2_CLR ((S2)(0U))
#define S4_CLR ((S4)(0U))
#define U1_OFF ((U1)(0U))
#define U1_ON ((U1)(1U))
#define U1_LO ((U1)(0U))
#define U1_HI ((U1)(1U))
#define BIT0 ((U1)(0U))
#define BIT1 ((U1)(1U))
#endif
1,2行目、33行目は多重インクルードを防止するために記述しています。
ヘッダーファイルを作成する場合、このように多重インクルード防止を記述するのが一般的です。
これは、他のファイルで、ヘッダーファイルをインクルードしたときに、インクルードしたファイルにさらにインクルードするなどにより、意図しないところで同じ定義を多重にインクルードしてしまうため、これを回避するために、一度インクルードすると、デファインで定義され、同じファイルをインクルードしたときは、定義済みになるため、インクルードしなくなります。
次に型の定義です、unsigned charなど、型が長くなるため、短くしています。Uがunsignedを示し、Sがsignedを示します。また、数字はバイト数を示します。
これは、intなどの方は環境により異なるため、数字で表現することにより明確になるので、今回はこのようにしました。これで、U1はunsignedの1バイト型、S4はsignedの4バイト型ということがぱっと見でわかります。
次に、__EI()、__DI()、__halt()は、CC-RLコンパイラの組み込み関数になります。これを別名として、CC-RLコンパイラ固有の関数を直接記載するのではなく、別名にすることにより、コンパイラが変わっても、common.hのみ変更するだけで済みので、別名を使用することにしました。
次の定数定義は、汎用的に使用できる定数定義を記述しました。
簡単ではありますが、共通ファイルの定義については以上となります。