本帖最后由 leozzd 于 2017-9-7 20:10 编辑
问题背景:
1、在一个getdata.c文件内定义了如下变量温湿度、风速风向变量
signed int hum_h, hum_l, temp_h, temp_l;//温度湿度
short tempu;
float temp = 0.0, hum = 0.0;
u8 wind_speed_h, wind_speed_l, wind_dir_h, wind_dir_l;//风速风向
float wind_speed = 0.0;
在getdata.h文件内做了外部声明
extern signed int hum_h, hum_l, temp_h, temp_l;//温度湿度
extern float temp , hum ;
extern u8 wind_speed_h, wind_speed_l, wind_dir_h, wind_dir_l;//风速风向ModBus
extern float wind_speed;
处理函数
hum_h = USART1_RX_BUF[3]; //湿度高位
hum_l = USART1_RX_BUF[4]; //湿度低位
temp_h = USART1_RX_BUF[5]; //温度高位
temp_l = USART1_RX_BUF[6]; //温度低位
tempu = temp_l + temp_h * 256;//带符号初计算
temp = ((double)tempu)/10.0;
hum = (hum_l + hum_h * 256)/10.0;
2、在main文件里有两处引用到temp,hum,wind_speed,三个变量
一处是在任务优先级最高的显示函数: DisplayStringAndFloatValue("温度:",temp, COL1 , Row1 , 4 , "℃");,函数原型: void DisplayStringAndFloatValue(u8 *str1,float val , u8 col , u8 row , u8 type , u8 *str2)
一处是在任务优先级第二的Json函数: cJSON_AddNumberToObject(dust, "Temperature", temp); , 函数原型:cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n));,数据原型:cJSON *cJSON_CreateNumber(double num);
问题现象:
1、temp输出float类型,显示函数接收为float类型,Json函数接收为double类型。显示函数显示数值正常,Json函数打印一直为0。修改Json数据原型为:数据原型:cJSON *cJSON_CreateNumber(float num);Json打印也为0.
2、temp输出float类型,显示函数接收为float类型,Json函数接收为double类型。在Json函数里强制转换整型:cJSON_AddNumberToObject(dust, "Temperature", (int)temp); 能显示整数,但不是我要的。
3、temp输出double类型,显示函数接收为float类型,Json函数接收为double类型。显示函数显示数值正常,Json函数打印temp和hum正常,可是wind_speed显示为0。 4、getdata.h的外部声明extern变量复制到main函数里,也于事无补。
5、添加volatile易变关键字给temp、hum、wind_speed,也于事无补。
有谁能指点下哪个环节出现差错,感激不尽!
一周热门 更多>