有人可以請看看這段代碼。2結構內聯合,從頭文件
//位域定義
typedef union {
struct {
unsigned TRISA0 :1;
unsigned TRISA1 :1;
unsigned TRISA2 :1;
unsigned TRISA3 :1;
unsigned TRISA4 :1;
unsigned :1;
unsigned TRISA6 :1;
unsigned TRISA7 :1;
};
struct {
unsigned RA0 :1;
unsigned RA1 :1;
unsigned RA2 :1;
unsigned RA3 :1;
unsigned RA4 :1;
unsigned :1;
unsigned RA6 :1;
unsigned RA7 :1;
};
} TRISAbits_t;
extern volatile TRISAbits_t TRISAbits @ 0xF92;
這是從一個頭文件一個PIC微控制器。
什麼我已經知道,
1)本聯盟的規模是它裏面的最大元素。 所以我們有2層結構在這裏用相同的大小,所以聯合的大小將是 的sizeof(無符號)* 8
2):1中的每個變量之後給出比特級別的訪問
3 )訪問TRISA0或RA0可訪問內存中的相同位,其餘位置如此。
想想我的困惑源於這部分
extern volatile TRISAbits_t TRISAbits @ 0xF92;
4)的extern聲明類型TRISAbits_t的TRISAbits但它不分配內存。
5)易失性意味着可以通過不同的線程更改內存,而不會改變我的代碼。 6)當我寫代碼時,我會寫TRISAbits.RA0,它與TRISAbits.TRISA0相同。
7)@ 0xF92十六進制是做什麼的?並且我的答案是否正確?
謝謝。
編輯。 對於任何感興趣的人來說,這是從PIC18f1220微控制器頭文件
不,它的大小*不是* sizeof(unsigned)* 8'。由於每個結構都是位域,每個成員只佔用一個位。聯合的大小是'sizeof(TRISAbits_t)',沒有別的。 –