utils.h をインクルードすることで利用できるマクロを紹介します。
1バイトをメモリを書き込む。
uint8 *q をローカル変数として宣言しておき、データを読み込みたい領域のポインタとしておく。代入演算子の評価後 q++ が実行される。
2バイトをメモリを書き込む。
uint8 *q をローカル変数として宣言しておき、データを読み込みたい領域のポインタとしておく。代入演算子の評価後 q+=2 が実行される。
BE はビッグエンディアン、LE はリトルエンディアン。
4バイトをメモリを書き込む。
uint8 *q をローカル変数として宣言しておき、データを読み込みたい領域のポインタとしておく。代入演算子の評価後 q+=4 が実行される。
BE はビッグエンディアン、LE はリトルエンディアン。
1バイトメモリを読み込み uint8 型の変数に値を格納する。
uint8 *p = &sRx.au8Data[0];
uint8 u8data1 = OCTET();
uint16 u16data2 = G_BE_WORD();
uint32 u32data3 = G_BE_DWORD();uint8 *p をローカル変数として宣言しておき、データを読み込みたい領域のポインタとしておく。=演算子の評価後 p++ が実行される。
2バイトメモリを読み込み uint16 型の変数に値を格納する。
uint8 *p = &sRx.au8Data[0];
uint8 u8data1 = OCTET();
uint16 u16data2 = G_BE_WORD();
uint32 u32data3 = G_BE_DWORD();uint8 *p をローカル変数として宣言しておき、データを読み込みたい領域のポインタとしておく。=演算子の評価後 p+=2 が実行される。
BE はビッグエンディアン、LE はリトルエンディアン。
1バイトメモリを読み込み uint8 型の変数に値を格納する。
uint8 *p = &sRx.au8Data[0];
uint8 u8data1 = OCTET();
uint16 u16data2 = G_BE_WORD();
uint32 u32data3 = G_BE_DWORD();uint8 *p をローカル変数として宣言しておき、データを読み込みたい領域のポインタとしておく。=演算子の評価後 p+=4 が実行される。
BE はビッグエンディアン、LE はリトルエンディアン。
2000~3600 の値を 8bit 値に変換します。
// utils.h の定義
#define ENCODE_VOLT(m) \
(m < 1950 ? 0 : \
(m > 3650 ? 255 : \
(m <= 2802 ? ((m-1950+2)/5) : ((m-2800-5)/10+171)) ))
...
uint16 u16Volt = 2860;
uint8 u8Volt_enc = ENCODE_VOLT(u16Volt);
uint16 u16Volt_dec = DECODE_VOLT(u8Volt_Enc);2000~2800 の値は 5 刻み、2800~は10 刻みで 8bit 値に割り当てます。
ENCODE_VOLT() により得られた8bit値を元の値に戻します。
// utils.h の定義
#define DECODE_VOLT(i) \
(i <= 170 ? (1950+i*5) : (2800+(i-170)*10) )
...
uint16 u16Volt = 2860;
uint8 u8Volt_enc = ENCODE_VOLT(u16Volt);
uint16 u16Volt_dec = DECODE_VOLT(u8Volt_Enc);2000~2800 の値は 5 刻み、2800~は10 刻みで 8bit 値に割り当てます。
ポートcを入力に設定する
ポートcを出力に設定する
ポートcをHi状態にする
ポートcをLo状態にする
ポート c を s が TRUE なら Lo, FALSE なら Hi に設定する
ポート c を読み出す。Loレベルなら TRUE が返る
ポート c を読み出す。Loレベルなら TRUE が返る。
ビットマップの1がHi,0がLoとなります。
読みだしたビットマップのポート c に対応するビットがLoレベルならTRUEを返す。
ポート c のプルアップを停止する。
switch でスコープを定義したい場合 _C { … } と記述している。
#define _C if(1)
// for example
switch(c) {
case 1:
_C {
uint8 u8work;
; // work
} break;
default:
}改行コード (CRLF) 文字列です。
2バイトの文字列リテラルですので、vPutChar() では利用できません。