关于stm32中u8定义的stm32变量类型值为0时,提示警告的问题,怎么解决

关于stm32中u8定义的变量值为0时,提示警告的问题,怎么解决_百度知道
关于stm32中u8定义的变量值为0时,提示警告的问题,怎么解决
我有更好的答案
可能只是你没有使用这个变量 你可以吧警告截图贴出来 一般这样的警告没有什么影响
其他类似问题
stm32的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁21ic官方微信
后使用快捷导航没有帐号?
查看: 1223|回复: 9
求解:STM32库函数编程全部变量问题
&&未结帖(5)
主题帖子积分
初级技术员, 积分 72, 距离下一级还需 28 积分
初级技术员, 积分 72, 距离下一级还需 28 积分
主题帖子积分
专家等级: 结帖率:0%
主题帖子积分
初级技术员, 积分 72, 距离下一级还需 28 积分
初级技术员, 积分 72, 距离下一级还需 28 积分
本帖最后由 stevendaoyun 于
22:01 编辑
现在我在程序中定义了三个全局变量,由对应子函数进行赋值,利用其中全局变量带入公式中计算得到的结果不正确,如果在公式语句前,给这两个变量赋值,赋的值正是子函数计算出的值,公式得到结果正确,不知道问题出在哪了。定义了三个全局变量:
double Data_T,Data_R,Data_Z;
三个子函数最后一句话是给全局变量赋值,这是程序一部分,子函数代码不用看,测试结果正确:
/**************环境温度检测函数*****************/
void T_det()
{
& && &&&double Rt,r,Ut,A
& && &&&Average=(double)(ADC1_Average());
& && &&&Ut=Average/1000;
& && &&&Rt=.42*Ut)/(100-0.42*Ut);
& && &&&r=(Rt-R1)/(R2-R1);
& && &&&Data_T=49.989*r+0.03*r*r-0.02*r*r*r;//适用于0到50摄氏度& && &&&
}
/*********交流电阻R测试函数***************/
void R_det()
{& && &&&
& && &&&u8
& && &&&u32&&temp1,temp2,Uh=0,Ul=0,U=0;
& && &&&flag=0;
& && &&&DAC_Configuration();& && && && && && &&&//DAC配置数控恒流源
& && &&&DAC_DATA=(u16)(49.636*TestCurrent1);
& && &&&DAC_WriteData();
& && &&&delay_us(100);
& && &&&GPIO_SetBits(GPIOA,GPIO_Pin_8);& && &&&//使能参考电压
& && &&&ADC_Configuration_R_Z();
& && &&&Timer_Configuration();
& && &&&TIM_Cmd(TIM3,ENABLE);//启动定时器
& && &&&while(j&num) //等待num次数据采集完成
& && &&&{
& && &&&//& && &&&printf(&当交流电阻R测试电流为:%d(mA)\r\n&,Current());& && &&&
& && &&&}& && &&&
& && &&&TIM_Cmd(TIM3,DISABLE);//关闭定时器
& && &&&GPIO_ResetBits(GPIOA,GPIO_Pin_6);//PA6、PA7置低电平为Z测试做准备& && &&&
& && &&&GPIO_ResetBits(GPIOA,GPIO_Pin_7);
& && &&&j=0;
& && &&&for(i=10;i&(num-10);i++) //采样num-20次
& && &&&{
& && && && &if(i%2==0) //获取正向(反向)电压
& && && && && & {
& && && && && && &&&temp1=0;
& && && && && && && && &temp1=ADC_RegularConvertedValueTab1[i];
& && && && && && && && &Uh=Uh+temp1;
& && && && && && && && &printf(&电阻R正向电压转换值=%dmV\r\n&,ADC_RegularConvertedValueTab1[i]);
& && && && && & }
& && && && && & else
& && && && && & {
& && && && && && && && &temp2=0;
& && && && && && && && &temp2=ADC_RegularConvertedValueTab1[i];
& && && && && && && && &Ul=Ul+temp2;
& && && && && & printf(&电阻R反向电压转换值=%dmV\r\n&,ADC_RegularConvertedValueTab1[i]);
& && && && && & }
& && &&&}& && &&&
& && &&&printf(&Uh=%d,Ul=%d\r\n&,Uh,Ul);
& && &&&U=Uh-Ul; //正向和反向电压差
& && &&&Data_R=U*1.0/(2*2*TestCurrent1*50);//计算交流电阻R
}
/************优值系数Z测试函数************/
void Z_det()//Z值测试子函数 等待TEC工作稳定
{
& && &&&u32 Uadd=0,Ua=0,temp1,temp2;
& && &&&double Ua1,Uadd1,Ur1;
& && &&&u8 i,w;
& && &&&flag=1;
& && &&&DAC_DATA=(u16)(49.636*TestCurrent2);
& && &&&DAC_WriteData();
& && &&&delay_us(100);
& && &&&GPIO_SetBits(GPIOA,GPIO_Pin_8);
& && &&&ADC_Configuration_R_Z();& && &&&
& && &&&Timer_Configuration();
& && &&&TIM_Cmd(TIM3,ENABLE);& && &&&
& && &&&for(w=WaitTime_S;w&0;w--)& && &&&//延时等待TEC工作在稳定状态
& && &&&{
& && && && && & delay_ms(500);
& && && && && & delay_ms(500);
& && &&&}
& && &&&Z_TestStart=1;& && && && && &
& && &&&while(k&num)
& && &&&{
& && && &//& && &&&printf(&当前优值系数Z测试电流为:%d(mA)\r\n&,Current());
& && &&&}
& && &&&TIM_Cmd(TIM3,DISABLE);
& && &&&Z_TestStart=0;
& && &&&k=0;
& && &&&for(i=10;i&(num-10);i++)&&//测量num-20次
& && &&&{
& && && && && & if(i%2==0)& && &&&//获取塞贝克电压值
& && && && && & {
& && && && && & temp1=0;
& && && && && & temp1=ADC_RegularConvertedValueTab2[i];
& && && && && & Ua=Ua+temp1;
& && && && && & printf(&& && && && &&&塞贝克电压Ua=%dmV\r\n&,ADC_RegularConvertedValueTab2[i]);
& && && && && & }
& && && && && & else& && &&&//获取电阻电压与塞贝克电压之和电压值
& && && && && & {
& && && && && & temp2=0;
& && && && && & temp2=ADC_RegularConvertedValueTab2[i];
& && && && && & Uadd=Uadd+temp2;
& && && && && & printf(&电阻电压与塞贝克电压和Uadd=%dmV\r\n&,ADC_RegularConvertedValueTab2[i]);
& && && && && & }
& && &&&}
& && &&&Ua1=(double)((Ua-2500*50)/(2*50));
& && &&&Uadd1=(double)((Uadd-2500*50)/(2*50));
& && &&&Ur1=Uadd1-Ua1;
& && &&&Data_Z=(double)(Ua1/(Ur1*Data_T));//塞贝克电压与电阻电压比值为优值系数Z值
}
主函数main中用到的公式:
Max_Temper_Differ=(double)((Data_T+273)-(sqrt(1+2*(Data_T+273)*Data_Z/1000)-1)/(Data_Z/1000));
直接利用子函数给全局变量Data_T和Data_Z赋值,通过Printf语句观察,全局变量确实被赋值了,然而这样得到的计算结果错误。
下面直接给全局变量赋值,所赋值的两个数是子函数计算结果:
Data_T=8.58;
Data_Z=1.42;& && && && && && && && && && && && && && && && && && && && &
Max_Temper_Differ=(double)((Data_T+273)-(sqrt(1+2*(Data_T+273)*Data_Z/1000)-1)/(Data_Z/1000));
得到的结果正确,两个值正是T_det()和Z_DET()两个子函的值。复制代码
主题帖子积分
初级技术员, 积分 72, 距离下一级还需 28 积分
初级技术员, 积分 72, 距离下一级还需 28 积分
主题帖子积分
专家等级: 结帖率:0%
主题帖子积分
初级技术员, 积分 72, 距离下一级还需 28 积分
初级技术员, 积分 72, 距离下一级还需 28 积分
自己顶一下,翘首企盼高手到来
主题帖子积分
资深技术员, 积分 419, 距离下一级还需 81 积分
资深技术员, 积分 419, 距离下一级还需 81 积分
主题帖子积分
专家等级: 结帖率:62%
主题帖子积分
资深技术员, 积分 419, 距离下一级还需 81 积分
资深技术员, 积分 419, 距离下一级还需 81 积分
你得变量是否在中断中用过?
主题帖子积分
助理工程师, 积分 1428, 距离下一级还需 572 积分
助理工程师, 积分 1428, 距离下一级还需 572 积分
主题帖子积分
专家等级: 结帖率:12%
主题帖子积分
助理工程师, 积分 1428, 距离下一级还需 572 积分
助理工程师, 积分 1428, 距离下一级还需 572 积分
你这个问题,完全是变量在处理的时候,造就的问题,你可以把这变量值在main函数当中应用的时候,将这三个全局变量再赋值给三个局部变量,然后在main函数当中,打印出这三个局部变量。就可以了解了。还有注意变量类型。
专业单片机Zigbee方案代开发。可接毕设。
主题帖子积分
资深工程师, 积分 16327, 距离下一级还需 3673 积分
资深工程师, 积分 16327, 距离下一级还需 3673 积分
主题帖子积分
专家等级: 结帖率:100%
主题帖子积分
资深工程师, 积分 16327, 距离下一级还需 3673 积分
资深工程师, 积分 16327, 距离下一级还需 3673 积分
问题解决了就好& & 楼上高手
微软CEO史蒂夫·鲍尔默:不要激情,要有韧性
电子设计的灵魂是知识,坚持做技术,共勉
主题帖子积分
初级技术员, 积分 72, 距离下一级还需 28 积分
初级技术员, 积分 72, 距离下一级还需 28 积分
主题帖子积分
专家等级: 结帖率:0%
主题帖子积分
初级技术员, 积分 72, 距离下一级还需 28 积分
初级技术员, 积分 72, 距离下一级还需 28 积分
sun1238898 发表于
你这个问题,完全是变量在处理的时候,造就的问题,你可以把这变量值在main函数当中应用的时候,将这三个全 ...
这个我之前试过,打印出局部变量的值也是对的,但是计算结果和用全局变量一样,数据类型我再看看有没有问题
主题帖子积分
初级技术员, 积分 72, 距离下一级还需 28 积分
初级技术员, 积分 72, 距离下一级还需 28 积分
主题帖子积分
专家等级: 结帖率:0%
主题帖子积分
初级技术员, 积分 72, 距离下一级还需 28 积分
初级技术员, 积分 72, 距离下一级还需 28 积分
pentral0311 发表于
你得变量是否在中断中用过?
没有在中断中用过,但是数据是在TIM3中断函数中采集,将采集的数据存在全局数组中,子函数通过数组中的数据计算出三个全局变量值
主题帖子积分
助理工程师, 积分 1428, 距离下一级还需 572 积分
助理工程师, 积分 1428, 距离下一级还需 572 积分
主题帖子积分
专家等级: 结帖率:12%
主题帖子积分
助理工程师, 积分 1428, 距离下一级还需 572 积分
助理工程师, 积分 1428, 距离下一级还需 572 积分
我想应该是你的程序设计,哪里出现了异常,导致这样的问题,你再瞅瞅看看,
专业单片机Zigbee方案代开发。可接毕设。
主题帖子积分
初级技术员, 积分 72, 距离下一级还需 28 积分
初级技术员, 积分 72, 距离下一级还需 28 积分
主题帖子积分
专家等级: 结帖率:0%
主题帖子积分
初级技术员, 积分 72, 距离下一级还需 28 积分
初级技术员, 积分 72, 距离下一级还需 28 积分
sun1238898 发表于
我想应该是你的程序设计,哪里出现了异常,导致这样的问题,你再瞅瞅看看, ...
恩,今天一天在忙,没调程序,明天继续调程序
主题帖子积分
初级技术员, 积分 72, 距离下一级还需 28 积分
初级技术员, 积分 72, 距离下一级还需 28 积分
主题帖子积分
专家等级: 结帖率:0%
主题帖子积分
初级技术员, 积分 72, 距离下一级还需 28 积分
初级技术员, 积分 72, 距离下一级还需 28 积分
感谢各位热情帮助,问题解决了,是我数据处理出了点问题,打印函数中为了方便观察结果,将Data_Z乘以了1000printf(&Data_Z:%f(1000/K)\r\n&,Data_Z*1000);复制代码
而最大温差计算函数中直接用Data_Z带入我帖子了的代码是这样的:
Max_Temper_Differ=(double)((Temper+273)-(sqrt(1+2*(Temper+273)*Data_Z/1000)-1)/(Data_Z/1000));复制代码
正确的是这样的:
Max_Temper_Differ=(double)((Temper+273)-(sqrt(1+2*(Temper+273)*Data_Z)-1)/(Data_Z));复制代码
技术新星奖章
人才类勋章
涓涓之细流
发帖类勋章
时间类勋章
技术奇才奖章
人才类勋章
时间类勋章
欢快之小溪
发帖类勋章
社区建设奖章
等级类勋章
核心会员奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
热门推荐 /1注册时间: 18:41
回复数: 331
主题数: 86
论坛积分:589
来自: 广东
warning:& #186-D: pointless comparison of unsigned integer with zero
大家遇到这种情况没:u8 tmp;if(tmp &= 0 && tmp &= 9){.....}
会提示警告啊!而在51里是没有警告的啊,这给移植带来很大不便,各位是如何解决的呢?
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205
学习嵌入式的同学不要错过啊!
注册时间: 13:22
回复数: 684
主题数: 33
论坛积分:1183
u8一定是大于等于0的。你这个比较没意义。
业余程序玩家。
注册时间: 14:58
回复数: 167
主题数: 14
论坛积分:209
来自: 重庆
回复【楼主位】&可乐虎&:
---------------------------------
表达式无意义,警告说得很清楚
注册时间: 18:41
回复数: 331
主题数: 86
论坛积分:589
来自: 广东
回复【1楼】&ofourme&:
---------------------------------
回复【2楼】&wobukansanguo&:
---------------------------------
不好意思&我是这样写的:if(tmp&&=&0&&&&tmp&&=&9){.....}
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205
学习嵌入式的同学不要错过啊!
注册时间: 13:22
回复数: 684
主题数: 33
论坛积分:1183
回复【3楼】&可乐虎&:
---------------------------------
if(&tmp&&=&9&){.....}
这样写就行了。
业余程序玩家。
注册时间: 18:41
回复数: 331
主题数: 86
论坛积分:589
来自: 广东
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205
学习嵌入式的同学不要错过啊!
请选择一个版面...
STM32-F0/F1/F2专区
STM32-F3/F4专区
MSP430专区
ARM7/ARM9/ARM11专区
其他Cortex系列
uCOS & uCGUI & Emwin
trochili(飞鸟)操作系统
中国RTOS联盟
FPGA/CPLD/DSP专区
数字,模拟,高频电路
编程语言学习
蓝牙/WIFI/Zigbee等通信技术
开发工具专栏
UOL 单片机面向对象语言
四轴飞行器
DIY大赛专区
DIY项目资料专区
论坛建设区
二手交易专栏
& 开源电子网() |问题补充&&
猜你感兴趣
服务声明: 信息来源于互联网,不保证内容的可靠性、真实性及准确性,仅供参考,版权归原作者所有!Copyright &
Powered by}

我要回帖

更多关于 stm32 64位变量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信