構造体・変数中の特定のビットに名前をつける
1.配列の中身をわかりやすくする
配列は便利ですが、中に入っている値が、各個別々の意味を持った配列の場合
インデックスだけではわかりにくいことがあります。
そういうときには配列ではなく、構造体を使ったほうがわかりやすいです。
構造体は
struct aData {
BYTE LeftV;
BYTE RightV;
BYTE LeftH;
BYTE RightH;
}AData;
こんな風に書きますが、たくさんの変数を使いたい場合は、構造体の型を定義したほうが楽です。
typedef struct aDataType {
BYTE LeftV;
BYTE RightV;
BYTE LeftH;
BYTE RightH;
}ADataType;
こう書くと、
ADataType a;
などと複数の変数を記述することができます。
また、最初は配列としてデータが入ってくるけど、
実際には構造体を使ったほうが楽に編集できるという場合、
ポインタをキャストして使うと便利です。
void someproc(char data[]){
ADataType * trueData = (ADataType *)data;
trueData->LeftV = ...
のような感じですね。
2.変数中の特定のビットに名前をつける
XC8ではビット単位で名前をつけて構造体にすることができます。
CS8416のコントロールレジスタ1を参考にすると
union {
BYTE all;
struct {
unsigned CHS:1; // bit0
unsigned RMCKF:1;
unsigned HOLD:2;
unsigned INT:2;
unsigned MUTESAO:1;
unsigned SWCLK:1; // bit7
} bits;
}CS8416_Control1 = { CS8416_Control1_Default };
と書けます。
共用体にしているのは、変数全bitにアクセスするときに使うためです。
また、allの方を先にしているのは、最後に変数の初期値を与えるときに
共用体の最初に定義されているものが使われるからです。