OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2647|回复: 0

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

[复制链接]

20

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
186
金钱
186
注册时间
2015-1-22
在线时间
57 小时
发表于 2017-9-7 15:17:33 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 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,也于事无补。


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



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 03:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表