全局变量为什么在main文件内有些函数无法引用

2019-08-14 02:33发布

本帖最后由 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,也于事无补。


有谁能指点下哪个环节出现差错,感激不尽!



0条回答

一周热门 更多>