//发送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);
}
}