Usart 串口发送数据包 两种方式(遍历结构体,指针数组)

Usart 串口发送数据包 两种方式(结构体,指针数组)

1.结构体指针

1.1 结构体和联合体

/*
	叙述:这种直观性比较,利用联合体和结构体的形式组成数据包,通过结构体指针发送
*/
typedef union{
	struct
	{
		unsigned char id;
		unsigned char addr;
		unsigned char head; 
		unsigned char left_time; 		
		unsigned char left_hour; 				
		unsigned char right_time; 		
		unsigned char right_hour; 						 
		unsigned char key_high; 						  
		unsigned char key_low; 						  	 
		unsigned char sofa_left; 						  
		unsigned char sofa_right; 						  	 
		unsigned char funtion_dis; 						  	 
		unsigned char checksum;
		unsigned char stop;
	}led_sta;
	unsigned char tx_buf[BUF_SIZE];
}
DATA_FORMAT_TX;

void   send_buf(DATA_FORMAT_TX *buf) {
	unsigned char i;	
	for(i =  0 ; i <14;i++ ){
			printf("%c", buf->tx_buf[i]); 			
	}			
}

void send_buf_packet(void){	
	DATA_FORMAT_TX buf;
	buf.led_sta.id 	   			=0x05;
	buf.led_sta.addr  			=0x03 ;
	buf.led_sta.head  			=0xE1 ; 
	buf.led_sta.left_time 		= 0 ; 		
	buf.led_sta.left_hour 		= 1 ; 				
	buf.led_sta.right_time 		= 2 ; 		
	buf.led_sta.right_hour 		= 3 ; 						 
	buf.led_sta.key_high 	 	= 4 ; 						 
	buf.led_sta.key_low    		= 5 ; 						 
	buf.led_sta.sofa_left		= 6 ; 						 
	buf.led_sta.sofa_right 		= 7 ; 						 
	buf.led_sta.funtion_dis		= 8 ; 						 
	buf.led_sta.checksum		= 0XAA;
	buf.led_sta.stop 			= 0XFB;		
	send_buf(&buf);
}

1.2 纯结构发送的形式

/*
	叙述:这种跟前面一种较为相似, 直接操作结构体
*/

void send_buf_packet(void) {
	DATA_FORMAT_TX  send_dat,*p  = &send_dat ;  // 定义一个结构,把地址传给指针
	unsigned char *pstu,i,len;
	p->id 	   				= 0x05;
	p->addr  				= 0x03 ;
	p->head  				= 0xE1 ; 
	p->left_time 			= 0 ; 		
	p->left_hour 			= 1 ; 				
	p->right_time 			= 2 ; 		
	p->right_hour 			= 3 ; 						 
	p->key_high 	 		= 4 ; 						 
	p->key_low    			= 5 ; 						 
	p->sofa_left			= 6 ; 						 
	p->sofa_right 			= 7 ; 						 
	p->funtion_dis			= 8 ; 						 
	p->checksum				= 0XAA;
	p->stop 				= 0XFB;
	pstu = (unsigned char *)&send_dat;  // 强制转换地址,前提结构一种类型(unsigned char)
	len = sizeof(send_dat);   		   //  计算结构体的长度
	for(i =  0 ; i <len;i++ ){		  
			printf("%c",*pstu++);     // 输出遍历结构元素
	}
}

2.指针数组形式

/*
	这种比较简单暴力直观明了,利用指针数组的形式传递数据
*/

void  send_buf_packet(void)
{
	unsigned char *p, arr[10] = {0,1,2,3,4,5,6,7,8,9};
	for(p = &arr[0]; p < &arr[10];){   //把地址的位置值取出来				
		printf("%c",*p); 			 //打印数据
		*p++;						//指向地址
	}	
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mg_hover

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值