首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反问题(C程序)

反问题(C程序)
EN

Stack Overflow用户
提问于 2015-01-15 12:02:54
回答 1查看 109关注 0票数 0

我只希望在未设置Alarm_Status.bits.b3leakDetected=0.时,将count_float重置为0然而,由于某种原因,它似乎从未重置过。当警报响起时,我将leakDetected设置为1,这样计数器就不会被重置。但是,如果警报响了2秒,并且再次被禁用,它将保持这个计数为2。它应该重置为0。

代码语言:javascript
复制
{   
    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);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2015-01-15 12:15:04

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

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

代码语言:javascript
复制
int count_float = 0;

关于您更新的问题,每次访问此循环时都会初始化count_float。如果您希望它保持上一次计数(因为它每秒钟循环一次),请将其设置为static,如下所示。

代码语言:javascript
复制
static int count_float = 0;  /* '= 0' is optional but recommended */
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27962995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档