C语言共用体字节对齐

本文详细介绍了如何在单片机中使用共用体进行字节对齐的设置,包括#pragma pack指令的应用,以及不同类型(如uint8_t和uint16_t)的共用体实例和操作。通过取消和指定不同字节对齐,探讨了其在内存布局和性能优化中的影响。
摘要由CSDN通过智能技术生成

以下做单片机共用体字节对齐使用说明:
1、字节对齐代码:
#pragma pack (N)      /*指定按N字节对齐*/
#pragma pack ()        /*取消指定对齐,恢复缺省对齐*/

2、应用示例:


#pragma pack (1)						/*指定按 1 字节对齐*/
typedef union
{
	struct
	{
		uint8_t data0;		
		uint8_t data1;	
		uint8_t data2;		
		uint8_t	data3;	
		uint8_t	data4;	
	}bits;
	uint8_t buff[5];
}TEST_DAT;
#pragma pack () 					/*取消指定对齐,恢复缺省对齐*/

3、共用体均为 uint8_t 类型说明:

//共用体定义
#pragma pack (1)						/*指定按 1 字节对齐*/
typedef union
{
	struct
	{
		uint8_t data0;		
		uint8_t data1;	
		uint8_t data2;		
		uint8_t	data3;	
		uint8_t	data4;	
	}bits;
	uint8_t buff[5];
}TEST_DAT;
#pragma pack () 					/*取消指定对齐,恢复缺省对齐*/


//共用体声明
TEST_DAT test_data;


//主函数功能

void main()
{

....

	for(count =0; count < 5; count++)		//赋值
	{
		test_data.buff[count]  =  count +1;
	}
	
	for(count =0; count < 5; count++)		//
	{
		Debug_Printf(DEBUG_UART,	"\r\n test_data.buff[%d] = %X ", count, test_data.buff[count]);
	}


....

}

4、共用体均为 uint16_t 类型说明:内部数据反向

//共用体定义
#pragma pack (1)						/*指定按 1 字节对齐*/
typedef union
{
	struct
	{
		uint16_t     data0;		
		uint16_t     data1;	
		uint16_t     data2;		
		uint16_t     data3;	
		uint16_t	 data4;	
	}bits;
	uint8_t buff[10];
}TEST_DAT;
#pragma pack () 					/*取消指定对齐,恢复缺省对齐*/


//共用体声明
TEST_DAT test_data;


//主函数功能

void main()
{

....

	for(count =0; count < 10; count++)		//赋值
	{
		test_data.buff[count]  =  count +1;
	}
	
	for(count =0; count < 10; count++)		//
	{
		Debug_Printf(DEBUG_UART,	"\r\n test_data.buff[%d] = %X ", count, test_data.buff[count]);
	}


....

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值