2015-09-02 208 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