0
点赞
收藏
分享

微信扫一扫

C语言浮点数的发送和接收

清冷的蓝天天 2022-01-06 阅读 47
c语言

//发送float数据。共用体里的参数长度应该一致。否则内存无法对齐
//用于类型转换

union result2
{
  float lightnum;
  unsigned char data[4];
}Send_Float_Data;

/*

非常重要

Send_Float_Data 是联合体变量,类似结构体变量,不能放在 H文件下,如果放在H文件下就属于在H文件下定义变量,这样其他C文件包含这个H文件就会报变量多重定义的错误。

所以H文件只能声明变量,绝对不能定义变量。

解决办法 是:

typedef union 
{
  float lightnum;
  unsigned char data[4];
}Send_Float_Data;

这样Send_Float_Data 就不是变量而是 联合体名字,这样H文件就不会重复定义变量了。
然后在对应的C文件 定义联合体 变量 Send_Float_Data datatype;
要想datatype在其他文件也可以使用,可以在刚才的H文件声明下
extern Send_Float_Data datatype;(这种情况适用于main.c 中 需要定义很多结构体变量,显得很乱,这种方法可以使代码规范)

一般情况下是 H文件中用typedef声明结构体、枚举、联合体。 然后哪个C文件 用在哪个C文件定义对应变量。

*/

#include <stdio.h>

union result1
{
  float lightnum;
  unsigned char data[4];
}Read_Float_Data;


float Read_data = 0;
float Send_data = 319.261993;
 
void send_loopdata()
{	
	for(int i = 0;i<4; i++)
	{
		USART_SendData(USART_CH, Send_Float_Data.data[i]);
		Ddl_Delay1ms(1);
	}
}

int main(void)
{
	SystemClockConfig();
	ceventInit();
    ceventPost(EVENT_TIMER_STAGE1);
	ceventPost(EVENT_UART_STAGE2);
	SysTick_Init(1000u);  //1ms
	
	while(1)
	{	
#if 0
		/**接收浮点*/
		Read_Float_Data.data[0]  = 0x89;
		Read_Float_Data.data[1]  = 0xA1;	
        Read_Float_Data.data[2]  = 0x9F;
		Read_Float_Data.data[3]  = 0x43;	

		Read_data = Read_Float_Data.lightnum;
		printf("%f \n",Read_data);
#endif	
#if 1
	    /**发送浮点*/
		Send_Float_Data.lightnum =  Send_data;
		send_loopdata();
#endif
		Ddl_Delay1ms(2000);
	}
}
举报

相关推荐

0 条评论