#define BYTE0(dwTemp) ( *( (char *)(&dwTemp) ) )是什麼意思?

1.數據拆分宏定義

#define BYTE0(dwTemp)       ( *( (char *)(&dwTemp)    ) )
#define BYTE1(dwTemp)       ( *( (char *)(&dwTemp) + 1) )
#define BYTE2(dwTemp)       ( *( (char *)(&dwTemp) + 2) )
#define BYTE3(dwTemp)       ( *( (char *)(&dwTemp) + 3) )

在通訊中經常需要把數據拆成字節的形式,有多種方法這裏是其中一種比較好用的方法。

大致的處理過程是 對變量 dwTemp 去地址,然後將其強制轉化成char類型的指針  最後再取出指針所指向的內容,這樣就完成了對數據的拆分工作。

能完成這種功能的還有種寫法就是利用結構體,準確說是聯合體示例如下:

typedef union 
{
	uint16_t u16_vale;
	uint8_t bytes[2];
}u16_type_u;

int mian ()
{
	u16_type_u u16;
	u16.bytes[0] = 10;
	u16.bytes[1] = 1;
	printf ("%d \n",&u16.u16_value);
	return 0;
}

以上均可以完成數據的拆分工作。

2.充當內聯函數使用

示例如下:

#define LED1(a)	if (a)	\
					GPIO_SetBits(GPIOB,GPIO_Pin_0);\
					else		\
					GPIO_ResetBits(GPIOB,GPIO_Pin_0)

關於內聯函數,有如下示例大致可說明含義

inline int max (int i ,int j, int k)
{
    if (i<j)
	i = j;
    if  (i<k)
	i = k;
    return i;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章