共用体在嵌入式方向的应用(代码片段)

//共用体共享内存,一个int占四个字节,每个字节占8个bit位,总共占4*8=32个bit位
//共用体体中的结构体共32个int型变量,每个变量占一个bit位
union XBytes
{
	unsigned int bytes;
	struct 
	{
		unsigned int b00:1,b01:1,b02:1,b03:1,b04:1,b05:1,b06:1,b07:1;
		unsigned int b08:1,b09:1,b0a:1,b0b:1,b0c:1,b0d:1,b0e:1,b0f:1;
		unsigned int b10:1,b11:1,b12:1,b13:1,b14:1,b15:1,b16:1,b17:1;
		unsigned int b18:1,b19:1,b1a:1,b1b:1,b1c:1,b1d:1,b1e:1,b1f:1;
	}bits;
};

//根据条件设置开关的每一位.i:是第多少个开关,value是1/0,switch是开关的个数<pre name="code" class="cpp">int getValue(int i)
	{
		if (i<0||i>=switchSum) return 0;
		 
		int index = i/32; //设备编号
		int order = i%32; //位编号
		switch (order)
		{
		case 0:return xbyte[index].bits.b00;
		case 1:return xbyte[index].bits.b01;
		case 2:return xbyte[index].bits.b02;
		case 3:return xbyte[index].bits.b03;
		case 4:return xbyte[index].bits.b04;
		case 5:return xbyte[index].bits.b05;
		case 6:return xbyte[index].bits.b06;
		case 7:return xbyte[index].bits.b07;
		case 8:return xbyte[index].bits.b08;
		case 9:return xbyte[index].bits.b09;
		case 10:return xbyte[index].bits.b0a;
		case 11:return xbyte[index].bits.b0b;
		case 12:return xbyte[index].bits.b0c;
		case 13:return xbyte[index].bits.b0d;
		case 14:return xbyte[index].bits.b0e;
		case 15:return xbyte[index].bits.b0f;
		case 16:return xbyte[index].bits.b10;
		case 17:return xbyte[index].bits.b11;
		case 18:return xbyte[index].bits.b12;
		case 19:return xbyte[index].bits.b13;
		case 20:return xbyte[index].bits.b14;
		case 21:return xbyte[index].bits.b15;
		case 22:return xbyte[index].bits.b16;
		case 23:return xbyte[index].bits.b17;
		case 24:return xbyte[index].bits.b18;
		case 25:return xbyte[index].bits.b19;
		case 26:return xbyte[index].bits.b1a;
		case 27:return xbyte[index].bits.b1b;
		case 28:return xbyte[index].bits.b1c;
		case 29:return xbyte[index].bits.b1d;
		case 30:return xbyte[index].bits.b1e;
		case 31:return xbyte[index].bits.b1f;
		}	
	}
//得到每一位开关的状态
int getValue(int i)
	{
		if (i<0||i>=switchSum) return 0;
		 
		int index = i/32; //设备编号
		int order = i%32; //位编号
		switch (order)
		{
		case 0:return xbyte[index].bits.b00;
		case 1:return xbyte[index].bits.b01;
		case 2:return xbyte[index].bits.b02;
		case 3:return xbyte[index].bits.b03;
		case 4:return xbyte[index].bits.b04;
		case 5:return xbyte[index].bits.b05;
		case 6:return xbyte[index].bits.b06;
		case 7:return xbyte[index].bits.b07;
		case 8:return xbyte[index].bits.b08;
		case 9:return xbyte[index].bits.b09;
		case 10:return xbyte[index].bits.b0a;
		case 11:return xbyte[index].bits.b0b;
		case 12:return xbyte[index].bits.b0c;
		case 13:return xbyte[index].bits.b0d;
		case 14:return xbyte[index].bits.b0e;
		case 15:return xbyte[index].bits.b0f;
		case 16:return xbyte[index].bits.b10;
		case 17:return xbyte[index].bits.b11;
		case 18:return xbyte[index].bits.b12;
		case 19:return xbyte[index].bits.b13;
		case 20:return xbyte[index].bits.b14;
		case 21:return xbyte[index].bits.b15;
		case 22:return xbyte[index].bits.b16;
		case 23:return xbyte[index].bits.b17;
		case 24:return xbyte[index].bits.b18;
		case 25:return xbyte[index].bits.b19;
		case 26:return xbyte[index].bits.b1a;
		case 27:return xbyte[index].bits.b1b;
		case 28:return xbyte[index].bits.b1c;
		case 29:return xbyte[index].bits.b1d;
		case 30:return xbyte[index].bits.b1e;
		case 31:return xbyte[index].bits.b1f;
		}	
	}


 
<pre name="code" class="cpp">         XBytes tmpBytes = xbyte;

	//向串口发送数据(只有当状态发生变化时才发送数据)
	if(tmpBytes.bytes != xbyte.bytes)
	{		 
		unsigned char data[6] = {0xAA,0x00,0x00,0x00,0x00,0x55};//发送的数据0xAA打头,0x55结尾
		memcpy(data+1,&xbyte.bytes,4);
		serial.writeBytes(data,6);
	}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值