utils.h
utils.h をインクルードすることで利用できるマクロを紹介します。

S_OCTET(x)

1バイトをメモリを書き込む。
1
uint8 *q = &sTx.au8Data[0];
2
3
S_OCTET(0x12); 
4
S_BE_WORD(0x1234);
5
S_BE_DWORD(0x12345678);
Copied!
uint8 *q をローカル変数として宣言しておき、データを読み込みたい領域のポインタとしておく。代入演算子の評価後 q++ が実行される。

S_BE_WORD(x)

2バイトをメモリを書き込む。
1
uint8 *q = &sTx.au8Data[0];
2
3
S_OCTET(0x12); 
4
S_BE_WORD(0x1234);
5
S_BE_DWORD(0x12345678);
Copied!
uint8 *q をローカル変数として宣言しておき、データを読み込みたい領域のポインタとしておく。代入演算子の評価後 q+=2 が実行される。
BE はビッグエンディアン、LE はリトルエンディアン。

S_BE_DWORD(x)

4バイトをメモリを書き込む。
1
uint8 *q = &sTx.au8Data[0];
2
3
S_OCTET(0x12); 
4
S_BE_WORD(0x1234);
5
S_BE_DWORD(0x12345678);
Copied!
uint8 *q をローカル変数として宣言しておき、データを読み込みたい領域のポインタとしておく。代入演算子の評価後 q+=4 が実行される。
BE はビッグエンディアン、LE はリトルエンディアン。

G_OCTET()

1バイトメモリを読み込み uint8 型の変数に値を格納する。
1
uint8 *p = &sRx.au8Data[0];
2
3
uint8 u8data1 = OCTET(); 
4
uint16 u16data2 = G_BE_WORD();
5
uint32 u32data3 = G_BE_DWORD();
Copied!
uint8 *p をローカル変数として宣言しておき、データを読み込みたい領域のポインタとしておく。=演算子の評価後 p++ が実行される。

G_BE_WORD()

2バイトメモリを読み込み uint16 型の変数に値を格納する。
1
uint8 *p = &sRx.au8Data[0];
2
3
uint8 u8data1 = OCTET(); 
4
uint16 u16data2 = G_BE_WORD();
5
uint32 u32data3 = G_BE_DWORD();
Copied!
uint8 *p をローカル変数として宣言しておき、データを読み込みたい領域のポインタとしておく。=演算子の評価後 p+=2 が実行される。
BE はビッグエンディアン、LE はリトルエンディアン。

G_BE_DWORD()

1バイトメモリを読み込み uint8 型の変数に値を格納する。
1
uint8 *p = &sRx.au8Data[0];
2
3
uint8 u8data1 = OCTET(); 
4
uint16 u16data2 = G_BE_WORD();
5
uint32 u32data3 = G_BE_DWORD();
Copied!
uint8 *p をローカル変数として宣言しておき、データを読み込みたい領域のポインタとしておく。=演算子の評価後 p+=4 が実行される。
BE はビッグエンディアン、LE はリトルエンディアン。

ENCODE_VOLT(x)

2000~3600 の値を 8bit 値に変換します。
  • 1.95~2.80V は 5mV 刻み
  • 2.81~3.65V は 10mV 刻み
1
// utils.h の定義
2
#define ENCODE_VOLT(m) \
3
(m < 1950 ? 0 : \
4
(m > 3650 ? 255 : \
5
(m <= 2802 ? ((m-1950+2)/5) : ((m-2800-5)/10+171)) ))
6
7
...
8
uint16 u16Volt = 2860;
9
uint8 u8Volt_enc = ENCODE_VOLT(u16Volt);
10
uint16 u16Volt_dec = DECODE_VOLT(u8Volt_Enc);
Copied!
2000~2800 の値は 5 刻み、2800~は10 刻みで 8bit 値に割り当てます。

DECODE_VOLT(x)

ENCODE_VOLT() により得られた8bit値を元の値に戻します。
  • 1.95~2.80V は 5mV 刻み
  • 2.81~3.65V は 10mV 刻み
1
// utils.h の定義
2
#define DECODE_VOLT(i) \
3
(i <= 170 ? (1950+i*5) : (2800+(i-170)*10) )
4
5
...
6
uint16 u16Volt = 2860;
7
uint8 u8Volt_enc = ENCODE_VOLT(u16Volt);
8
uint16 u16Volt_dec = DECODE_VOLT(u8Volt_Enc);
Copied!
2000~2800 の値は 5 刻み、2800~は10 刻みで 8bit 値に割り当てます。

vPortAsInput(c)

ポートcを入力に設定する
1
#define vPortAsInput(c) vAHI_DioSetDirection(1UL << (c), 0)
Copied!

vPortAsOutput(c)

ポートcを出力に設定する
1
#define vPortAsOutput(c) vAHI_DioSetDirection(0, 1UL << (c))
Copied!

​vPortSetHi(c)

ポートcをHi状態にする
1
#define vPortSetHi(c) vAHI_DioSetOutput(1UL << (c), 0)
Copied!

​​vPortSetLo(c)

ポートcをLo状態にする
1
#define vPortSetLo(c) vAHI_DioSetOutput(0, 1UL << (c))
Copied!

​​​vPortSet_TrueAsLo(c, s)

ポート c を s が TRUE なら Lo, FALSE なら Hi に設定する
1
#define vPortSet_TrueAsLo(c, s) vAHI_DioSetOutput((s) ? \
2
0 : 1UL << (c), s ? 1UL << (c) : 0)
Copied!

bPortRead(c)

ポート c を読み出す。Loレベルなら TRUE が返る
1
#define bPortRead(c) ((u32AHI_DioReadInput() & \
2
(1UL<<(c))) ? FALSE : TRUE)
Copied!

​u32PortReadBitmap()

ポート c を読み出す。Loレベルなら TRUE が返る。
1
#define u32PortReadBitmap() (u32AHI_DioReadInput())
Copied!
ビットマップの1がHi,0がLoとなります。

​bPortCheckBitmap(bitmap, c)

読みだしたビットマップのポート c に対応するビットがLoレベルならTRUEを返す。
1
#define bPortCheckBitmap(bitmap, c) \
2
(bitmap & (1UL<<(c))) ? FALSE : TRUE)
Copied!

vPortDisablePullup(c)

ポート c のプルアップを停止する。
1
#define vPortDisablePullup(c) vAHI_DioSetPullup(0x0, 1UL << (c))
Copied!

_C

switch でスコープを定義したい場合 _C { … } と記述している。
1
#define _C if(1)
2
3
// for example
4
switch(c) {
5
case 1:
6
_C {
7
uint8 u8work;
8
; // work
9
} break;
10
default:
11
}
Copied!

LB

改行コード (CRLF) 文字列です。
2バイトの文字列リテラルですので、vPutChar() では利用できません。
1
#define LB "\r\n"
2
3
// for example
4
vfPrintf(&sSerStream, "HELLO WORLD!" LB);
Copied!