2015-09-02 210 views
-1

我的代码有这样的事情:变量总是返回false

double TMR_HV ; 
.... 
TMR_HV =2.0; // in another part of my code 


void RTKAPI Tempos10(void * p) // task for timers 
{ 
    while(1) { 
     if (TMR_HV > 0.00) TMR_HV -= 0.01; 
     else TMR_HV = 0.00; 
     RTKDelay(1); 
    } 
} 

条件if永远是假的。谁能帮我这个?

+0

变量,如在贴代码看出,未初始化。它是否在其他地方初始化?如果没有,它的价值可以是任何东西。 –

+0

也许TMR_HV是NaN或+ Inf – john

+0

该变量是全局变量,它初始化为0.0,当我们在计时器上放置一个中断点时,初始值为0.0,并且它运行已预期。当变量得到一个大于0.0的值时,它开始减少并永不停止。它变为负值。 –

回答

0

重要的是你声明你的TMR_HV变量不在其他函数内。它应该是全球性的。

+0

是的,它是一个全局变量,它的声明如下:double TMR_HV = 0.0; –

0

我以这种方式解决了我的问题。 我创建此功能

enter code here 

INT DblComp(双A,双B) { LONG32 AL; LONG32 bL; aL =(LONG32)(A * 1000.0); bL =(LONG32)(B * 1000.0); (aL < bL)return(-1);如果(aL < bL)返回(-1); else if(aL == bL)return(0); else return(1); }

然后当我需要比较2个将变量i调用此函数

enter code here 
    if (DblComp(ReadWriteDisk_C, 0.00) == MAIOR)   ReadWriteDisk_C -= 0.01; else ReadWriteDisk_C = 0.00; 

的MAIOR定义为1