1. 程式人生 > >嵌入式程式設計技巧之------共用體union

嵌入式程式設計技巧之------共用體union

嵌入式程式設計技巧之------共用體union

union簡介

共用體是一種特殊的資料型別,為了使用共用體,就必須使用union語句,簡單的語法相關知識這裡不做詳細解釋,請大家點選參考➢菜鳥教程


union和struct一起使用

struct是結構體代名詞,union是共用體的代名詞,將這兩者聯合在一起使用有時候會減少很多工作量。


應用1------串列埠通訊

下面進行定義

/*定義結構體*/
typedef strcut stdatas
{
	unsigned char head;
	unsigned char data[10];
	unsigned char tail;
}stDatas;

/*定義共用體*/
typedef union undatas
{
	stDatas st;
	unsigned char arr[12];
}unDatas;

/*定義資料*/
unDatas DataTx;

上面定義了需要傳送的資料,訪問時能夠直接進行訪問,因為stDatas裡面的資料型別都一樣,所以記憶體分配時都是分配的連續地址,因此可以連續訪問。結構體具體分配可參考➢菜鳥教程下面的筆記。

DataTx->arr[0]對應DataTx->st->head
DataTx->arr[1]對應DataTx->st->data[0]
. . .
DataTx->arr[10]對應DataTx->st->data[9]
DataTx->arr[11]對應DataTx->st->tail

串列埠通訊基本上都是採用unsigned char(或者叫u8,uint8,uint8_t)型別進行通訊,採用這樣的資料格式進行傳送的時候就減少了轉換這一環節,大大節省了CPU的工作效率。


應用1------Flash讀寫

Flash通常採用unsigned int型別進行讀寫,因此我們可以進行下面的定義

/*定義結構體*/
typedef strcut stdatas
{
	int a;
	double b;
	float c;
	char d;
	int e;
}stDatas;

/*定義共用體*/
typedef union undatas
{
	stDatas st;
	unsigned int arr[10];	//因為不能系統的計算機的同種資料型別佔的位元組數不一樣,因此這裡定義一個比較大的陣列
}unDatas;

/*定義資料*/
unDatas FlashData;

這裡資料使用的時候只需要訪問FlashData->st這個結構體。
進行Flash讀寫的時候只需要訪問FlashData->arr這個陣列。


溫馨提示:有的地方不建議使用union這種資料型別,是因為裡面的資料使用的是同一塊儲存空間,很容易錯誤地修改不需要修改的資料,不過C語言既然定義了這種資料型別,那就一定有它的用武之地,只要使用恰當的話一定會給你帶來很大的便利。