μT-Kernel共通規定

データ型

汎用的なデータ型

typedef signed char          B;     /* 符号付き  8ビット整数 */
typedef signed short         H;     /* 符号付き 16ビット整数 */
typedef signed long          W;     /* 符号付き 32ビット整数 */
typedef signed long long     D;     /* 符号付き 64ビット整数 */
typedef unsigned char       UB;     /* 符号無し  8ビット整数 */
typedef unsigned short      UH;     /* 符号無し 16ビット整数 */
typedef unsigned long       UW;     /* 符号無し 32ビット整数 */
typedef unsigned long long  UD;     /* 符号無し 64ビット整数 */

typedef char                VB;     /* 型が一定しない  8ビットのデータ */
typedef short               VH;     /* 型が一定しない 16ビットのデータ */
typedef long                VW;     /* 型が一定しない 32ビットのデータ */
typedef long long           VD;     /* 型が一定しない 64ビットのデータ */
typedef void                *VP;    /* 型が一定しないデータへのポインタ */

typedef volatile B          _B;     /* volatile 宣言付 */
typedef volatile H          _H;
typedef volatile W          _W;
typedef volatile D          _D;
typedef volatile UB         _UB;
typedef volatile UH         _UH;
typedef volatile UW         _UW;
typedef volatile UD         _UD;

typedef signed int          INT;    /* プロセッサのビット幅の符号付き整数 */
typedef unsigned int        UINT;   /* プロセッサのビット幅の符号無し整数 */

typedef INT                 SZ;     /* サイズ一般 */

typedef INT                 ID;     /* ID一般 */
typedef W                   MSEC;   /* 時間一般(ミリ秒) */

typedef void            (*FP)();    /* 関数アドレス一般 */
typedef INT             (*FUNCP)(); /* 関数アドレス一般 */

#define LOCAL           static      /* ローカルシンボル定義 */
#define EXPORT                      /* グローバルシンボル定義 */
#define IMPORT          extern      /* グローバルシンボル参照 */

/*
 * ブール値
 *      TRUE = 1 と定義するが、0 以外はすべて真(TRUE)である。
 *      したがって、if ( bool == TRUE ) の様な判定をしてはいけない。
 *      if ( bool ) の様に判定すること。
 */
typedef INT             BOOL;
#define TRUE            1           /* 真 */
#define FALSE           0           /* 偽 */

/*
 * TRON 文字コード
 */
typedef UH              TC;         /* TRON 文字コード */
#define TNULL           ((TC)0)     /* TRON コード文字列の終端 */

注意

  • VB, VH, VW, VDと B, H, W, Dとの違いは、前者はビット数のみが分かっており、データ型の中身が分からないものを表すのに対して、後者は整数を表すことがはっきりしているという点である。

  • BOOLは、TRUE を1と定義するが、0以外はすべて真である。したがって、TRUE を比較演算子(== および !=)の左辺または右辺の値として用いて真偽の判定を行ってはいけない。すなわち、if (ブール値 == TRUE) の様な比較演算を行うべきではなく、ブール値を直接条件として用いて、たとえば if (ブール値) の様に判定を行うべきである。

  • VP の定義は旧バージョンのμT-Kernelとの互換性のために残しているが、CONST修飾子との関係から、新規の使用は推奨しない。代わりに、直接 "void *" と記述することを推奨する。

注意関連するサービスプロファイル
 

64ビットの型 D, UD, VD は、以下のサービスプロファイルが有効に設定されている場合に限り利用可能であることが保証される。

TK_HAS_DOUBLEWORD 64ビットデータ型(D, UD, VD)をサポート

注意補足事項
 

stksz, wupcnt, メッセージサイズなど、明らかに負の数にならないパラメータも、原則として符号付き整数(INTやW)のデータ型となっている。これは、整数はできるだけ符号付きの数として扱うというTRON全般のルールに基づいたものである。また、タイムアウト(TMO tmout)のパラメータでは、これが符号付きの整数であることを利用し、TMO_FEVR(= -1) を特殊な意味に使っている。符号無しのデータ型を持つパラメータは、ビットパターンとして扱われるもの(オブジェクト属性やイベントフラグなど)である。

注意T-Kernel 2.0との差異
 

サイズを表現するための整数型として、μT-Kernel 2.0 では新たに SZ 型を導入する。 'SZ'は SiZe の意味である。'SZ' は、メモリ範囲を表現するために十分なビット幅を持った符号付き整数型として定義されなければならない。前述の定義例では INT として定義されているが、16ビットのプロセッサ環境で32KB以上のメモリ空間を扱う場合には、より大きなビット幅を持つ W による定義が適切である。

注意μT-Kernel 1.0との差異
 

前述の通り、μT-Kernel 2.0では新たに SZ 型が導入された。

さらに、T-Kernel 2.0仕様に基づく以下の変更が加えられている。

  • 64ビットのD, UDを追加した。'D'は Double integer の意味である。また、符号付き整数の宣言にsignedを追加した。W, UWが32ビットであることを明確にするため、intからlongに変更した。

  • μT-Kernel 1.0では exinf などのデータタイプをVPとしていたが、μT-Kernel 2.0では、CONST修飾子との関係から、原則としてVPは使わず、VPの代わりに"void *"のデータタイプ定義を直接書くことにした。μT-Kernel 2.0でも、互換性維持のためにVP自体の定義は残しているが、VPの新規の使用は推奨しない。

意味が定義されているデータ型

パラメータの意味を明確にするため、出現頻度の高いデータ型や特殊な意味を持つデータ型に対して、以下のような名称を使用する。

typedef INT             FN;             /* 機能コード */
typedef INT             RNO;            /* ランデブ番号 */
typedef UW              ATR;            /* オブジェクト/ハンドラ属性 */
typedef INT             ER;             /* エラーコード */
typedef INT             PRI;            /* 優先度 */
typedef W               TMO;            /* ミリ秒単位のタイムアウト指定 */
typedef D               TMO_U;          /* 64ビットでマイクロ秒単位のタイムアウト指定 */
typedef UW              RELTIM;         /* ミリ秒単位の相対時間 */
typedef UD              RELTIM_U;       /* 64ビットでマイクロ秒単位の相対時間 */

typedef struct systim {                 /* ミリ秒単位のシステム時刻 */
        W       hi;                     /* 上位32ビット */
        UW      lo;                     /* 下位32ビット */
} SYSTIM;

typedef D               SYSTIM_U;       /* 64ビットでマイクロ秒単位のシステム時刻 */

/*
 * 共通定数
 */
#define NULL            0               /* 無効ポインタ */
#define TA_NULL         0               /* 特別な属性を指定しない */
#define TMO_POL         0               /* ポーリング */
#define TMO_FEVR        (-1)            /* 永久待ち */

注意

  • 複数のデータ型を複合したデータ型の場合は、その内の最も主となるデータ型で代表する。例えば、tk_cre_tsk の戻値はタスクIDかエラーコードであるが、主となるのはタスクIDなので、データ型はIDとなる。

注意関連するサービスプロファイル
 

マイクロ秒単位の時間および時刻に関連する型 TMO_U, RELTIM_U, SYSTIM_U は、以下のサービスプロファイルが有効に設定されている場合に限り利用可能であることが保証される。

TK_SUPPORT_USEC マイクロ秒命令をサポート

注意μT-Kernel 1.0との差異
 

T-Kernel 2.0仕様に基づき、64ビットでマイクロ秒単位のタイムアウト指定を示すTMO_U、64ビットでマイクロ秒単位の相対時間を示すRELTIM_U、64ビットでマイクロ秒単位のシステム時刻を示すSYSTIM_Uを追加した。RELTIM_UはRELTIMに合わせて符号無し、SYSTIM_UはSYSTIMに合わせて符号付きである。また、SYSTIMは32ビットのメンバを2つ合わせた構造体であるが、SYSTIM_Uは64ビットデータの利便性を直接活かす形で、構造体ではない通常の64ビット整数となっている。

注意補足事項
 

マイクロ秒(μsec)を意味するパラメータやデータタイプには最後に"_u"(uはμの意味) または"_U"を付け、それ以外の64ビット整数を意味するパラメータやデータタイプには最後に"_d"(dは double integer の意味)または"_D"を付ける方針としている。TMO_U, RELTIM_U, SYSTIM_Uはこの方針によるデータタイプ名である。