1. 程式人生 > >NUC140 之共用體和結構體巢狀

NUC140 之共用體和結構體巢狀

 共用體和結構體巢狀的情況最早見於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;	

是不是很方便,而且由於打包在一個結構體裡,非常適合暫存器的定義,便於閱讀。