我只希望在未设置Alarm_Status.bits.b3和leakDetected=0.时,将count_float重置为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);
}
}发布于 2015-01-15 12:15:04
您正在使用未初始化的count_float。访问变量而不初始化变量会导致未定义的行为。
要修复它,只需将其初始化为:
int count_float = 0;关于您更新的问题,每次访问此循环时都会初始化count_float。如果您希望它保持上一次计数(因为它每秒钟循环一次),请将其设置为static,如下所示。
static int count_float = 0; /* '= 0' is optional but recommended */https://stackoverflow.com/questions/27962995
复制相似问题