NUC140 之共用體和結構體巢狀
阿新 • • 發佈:2019-01-12
共用體和結構體巢狀的情況最早見於NUC1XXX的庫函式,後來用的非常順手,
看下面的程式碼:
typedef union { //定義一種共用體,它包含兩個成員,一個是8位的總的錯誤訊號(錯誤暫存器位元組1所用) uint8_t error_sample_all;//另一個是一個結構體,結構體的每一位表示一種錯誤型別, struct //由於共用體中成員共享一段記憶體單元,所以對error_sample_all賦值,就等於對error_sample賦值 { uint8_t temperature:1; //NUC小端模式:最低位 uint8_t VOP:1; uint8_t supply_28V:1; uint8_t DISF:1; uint8_t VSWR:1; uint8_t nogo_synthesizer:1; uint8_t nogo_Rx:1; uint8_t reserved:1; //保留位 }error_sample; }DEFINE_ERROR;
typedef是定義一種型別,具體不詳述了。
定義了一種共用體,它有兩個成員,一個是一個字元型變數,另一個是結構體,
結構體採用位定義,其中每一個成員佔用一位,加起來剛好一個位元組
DEFINE_ERROR error_register1
然後宣告這樣一個變數,使用效果如下:
error_register1.error_sample.DISF = 1;
為什麼不用8個變數而是用一個巢狀型的結構體呢,並不是為了省記憶體,
而是使用的時候非常方便,例如初始化和串列埠傳遞引數時,只需要:
error_register1.error_sample_all = 0;
是不是很方便,而且由於打包在一個結構體裡,非常適合暫存器的定義,便於閱讀。