5
次のコードがあります。これは私のIDEによって生成されたもので、私はそれを理解しようとしています。Cで低レベルの初期化を理解する
#define TRGMR (*(volatile union un_trgmr *)0xF0250).trgmr
ここで、タイマーマネージャは、データシートに従って0xF0250の位置にあります。しかし私が理解できないのは文法です。
union un_trgmr {
unsigned char trgmr;
__BITS8 BIT;
};
私はポインタについて知っています。しかし、私は本当に何が正確に行われているのか理解できません。誰かが私を助けてもらえ、次のようにBITS8はビットフィールドを持つ別の構造体ですところで:?
typedef struct {
unsigned char no0 :1;
unsigned char no1 :1;
unsigned char no2 :1;
unsigned char no3 :1;
unsigned char no4 :1;
unsigned char no5 :1;
unsigned char no6 :1;
unsigned char no7 :1;
} __BITS8;
この 'volatile union un_trgmr *'は、共用体へのポインタを作成します。一番外側の点は何ですか?それは組合にその住所にあることを伝えますか? –
最も外側の '*'は '共用体へのポインタ'を逆参照し、共用体を与えます。 'TRMGR'をl値(Paulで表示)またはr値として使うことができます:' unsigned char bits = TRMGR; '。私はマクロTRMGRのために、全体の "ユニオン"ビットが...過労であると主張します。マクロは '#define TRMGR(*(volatile unsigned char *)0xF0250)'と書くことができ、同じように動作します。これは、 "メモリアドレス0xF0250を' volatile unsigned char * 'として扱い、そのアドレスに格納されている値にアクセスします。組合とのバージョンは同じで、より長い間巻き込まれています。 –