2015-01-15 3 views
0

는 난 단지 Alarm_Status.bits.b3가 설정되지 않은 경우 내 count_float 0으로 다시 재설정 할 때 leakDetected = 0. 그러나 그것은 어떤 이유로 리셋 된 것으로 보이지 않습니다. 알람이 울리면 leakDetected를 1로 설정하여 카운터를 재설정 할 수 없습니다. 알람이 2 초 꺼지고 비활성화 된 경우 그러나 다시는 (2)의 수가 그것은 당신이 초기화되지 않은 count_float를 사용하는 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는 0으로 설정되어 있습니까? –

답변

3

으로 재설정해야 보유. 초기화하지 않고 변수에 액세스하면 정의되지 않은 동작이 발생합니다.

은 간단하게 초기화를 해결하려면 :

업데이트 된 질문에 대해
int count_float = 0; 

, 당신은이 루프에 와서 count_float 매번 초기화합니다. 이전 수를 유지하려면 (매초마다 반복하므로) 아래 그림과 같이 static으로 만드십시오.

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

알았습니다 ...하지만 OP가 '코드 업데이트 중'이었기 때문에 ... –