反问题(C程序)

时间:2015-01-15 12:02:55

标签: c

我只希望我的count_float在未设置 Alarm_Status.bits.b3 leakDetected = 0 时重置为0。然而,由于某种原因它似乎永远不会重置。当警报响起时,我将leakDetected置于1,因此计数器无法重置。但是如果闹钟响2秒并再次被禁用,它将保持此计数2.它应该重置为0.

{   
    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);
    }
}

1 个答案:

答案 0 :(得分:3)

您正在使用count_float未初始化。在不初始化变量的情况下访问变量会导致未定义的行为。

要修复它,只需初始化为:

int count_float = 0;

关于您更新的问题,每次进入此循环时都会初始化count_float。如果您希望它保持先前的计数(因为它每秒循环),请按下面所示进行static

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