zhongvv的笔记 https://bbs.21ic.com/?239819 [收藏] [复制] [RSS]

日志

结构体联合体联合使用技巧

热度 1已有 4563 次阅读2017-8-17 09:39 |个人分类:C语言|系统分类:嵌入式系统| C语音, 结构体, 联合体, 单片机, 嵌入式, C语音


数据使用通常有两总情况:
1.作为数值使用,比如1000,10000;
2.作为数据使用,比如数组中的ucDat[0],ucDat[1]....,串口或是其他通信接口中传输的数据data0,data1....
在应用过程中经常要在这两者之间相互转换,非常麻烦,而且容易出错.

typedef struct LCDSHOWDAT_tag
{
   /*里程*/
   union
   {
             u32 uiDis;
             u8 ucDat[4];
   }Undat;
   /*速度*/
   u16 usSpd;
   /*模式*/
   u8 ucMod;
   /*电量*/
   u8 ucPow;
   /*系统错误信息*/
   u8 ucSysErr;
   /*显示亮度pwm占空比*/
   u8 usPwmDuty;
   /*自动关机*/
   u16 usAutoOffTim;
   
}LCDSHOWDAT_STRU;
LCDSHOWDAT_STRU  stShowDat;
里面就包含有结构体和联合体.
联合体结构体的联合使用就很好解决这个问题.
如果要使用32位的uiDis,那么使用stShowDat.Undat.uiDis这个就OK了
如果要填数据或传输数据,那么使用stShowDat.Undat.ucDat[0],stShowDat.Undat.ucDat[1]....
好处:

1.方便使用,减少出错可能性
2.减少运算
3.节省内存空间
4.方便移植,省时,省力
5.你说呢?哈哈哈

路过

鸡蛋

鲜花
1

握手

雷人

刚表态过的朋友 (1 人)

发表评论 评论 (1 个评论)

回复 绚紫飞鸥 2017-9-12 16:05
学到了学到了