C设置位问题

时间:2015-02-13 12:33:21

标签: c

下面的代码是紧急文字。因此,如果设置了DU_Reason.bits.EmergencyDialIn,它将登录到网络。然后,如果设置send_update,则会发送Compose_Report()。这不是问题,因为send_update在发送消息后被清除。但是如果设置了tempalarm,它将发送一条消息并保持设置,除非它收到一条消息告诉它清除。这是为了在温度低于限制时一直反复发送消息。因此,如果没有重置tempalarm并且检测到泄漏,我只想发送Compose_Leak_Report();,但它会发送Compose_Temp_Report();

有什么方法可以帮助任何人。

if (DU_Reason.bits.EmergencyDialIn) {                       
    if (Send_Update) {
        Compose_Report();
        GSM_Send_Text_Sms (GSM_Tx_Buff, SenderNum);
        num_Leaks_month = 0;    
        monthly_timer = 0;
        Send_Update = 0;
        DU_Reason.bits.EmergencyDialIn = 0;
    } 
    else if (TempAlarm) {
        Compose_Temp_Report();
        GSM_Send_Text_Sms (GSM_Tx_Buff, SenderNum); 
        DU_Reason.bits.EmergencyDialIn = 0;
    } 
    else {
        Compose_Leak_Report();
        GSM_Send_Text_Sms (GSM_Tx_Buff, SenderNum); 
        DU_Reason.bits.EmergencyDialIn = 0;
    }       

1 个答案:

答案 0 :(得分:1)

我正在通过添加一个变量TempAlarmTriggered并将其初始化为零来修改代码。

if (DU_Reason.bits.EmergencyDialIn) {                       
    if (Send_Update) {
        Compose_Report();
        GSM_Send_Text_Sms (GSM_Tx_Buff, SenderNum);
        num_Leaks_month = 0;    
        monthly_timer = 0;
        Send_Update = 0;
        DU_Reason.bits.EmergencyDialIn = 0;
    } 
    else if ((TempAlarm) && (TempAlarmTriggered == 0)) {
        TempAlarmTriggered  = 1;
        Compose_Temp_Report();
        GSM_Send_Text_Sms (GSM_Tx_Buff, SenderNum); 
        DU_Reason.bits.EmergencyDialIn = 0;
    } 
    else {
        Compose_Leak_Report();
        GSM_Send_Text_Sms (GSM_Tx_Buff, SenderNum); 
        DU_Reason.bits.EmergencyDialIn = 0;
    }    

当您的临时重置清除TempAlarmTriggeredTempAlarm时。