2015-01-15 2 views
0

Я только хочу, чтобы мой count_float сбросить обратно в 0, когда Alarm_Status.bits.b3 не установлен, а когда leakDetected = 0. Однако по какой-то причине он никогда не сбрасывается. Когда будильник отключается, я помещаю leakDetected в 1, чтобы сбрасывать счетчик. Но если сигнал гаснет на 2 секунды и снова отключается он держит этот счетчик 2. Он должен сбросить на 0.Счетчик выпуск (C Program)

{ 
    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_ вашего вопроса, вам нужно иметь ';' after '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 был «Обновление кода» ... –