2015-01-15 29 views
0

我只希望我的count_float重置爲0時Alarm_Status.bits.b3沒有設置,當leakDetected = 0。然而,它似乎從來沒有重置出於某種原因。當警報關閉時,我把leakDetected設置爲1,所以計數器不能被重置。但是,如果警報響起2秒鐘,然後被禁用它再次持有2.此計數應該重置爲0計數器問題(C程序)

{ 
    int count_float  
    int fixedCount = 50; 
    short leakDetected=0; 
    BS(TRISB,7); // Bund sw port=input. 
    DelayMs(2); // will rise is bund SW open 
    if(RB7){         
     if(Control.bits.BUND_ENABLE){  // if bund alarm enabled 
      if(Alarm_Status.bits.b3){ // if already set 
       count_float +=10;  //count increased by 10 
       if(count_float == fixedCount) { 
        leakDetected=1; 
        DU_Reason.bits.EmergencyDialIn=1;// alarm! 
       } 
      } 
      if((!Alarm_Status.bits.b3)&&(!leakDetected)){ 
       count_float=0; 
      }       
     } 
    } else { 
     Alarm_Status.bits.b3=1;  // Bund Sw Closed 
     BC(TRISB,7); 
    } 
} 
+0

正如你的問題相同_essence_,答覆是你需要在'int count_float'之後有';'。 –

+0

對不起,它沒有複製出於某種原因 – AutoCad1990

+2

哪裏leakDetected設置爲零? –

回答

3

您正在使用count_float初始化。在不初始化的情況下訪問變量會導致未定義的行爲。

要解決它,只需初始化爲:

int count_float = 0; 

關於你更新的問題,您可以初始化count_float每次你來到這個循環。如果您希望它保持以前的計數(因爲它每秒循環),請按如下所示將其設置爲static

static int count_float = 0; /* '= 0' is optional but recommended */ 
+0

我知道它......但由於OP是「更新代碼」... –