программа неправильно оценивает условие if

error

Как следует из заголовка, у меня возникла проблема с неправильной оценкой условия if в одной конкретной функции

uint16_t    getSleepTime()
{
    volatile uint8_t flag = EEPROM.read(3);

    uint8_t high    = EEPROM.read(0);
    uint8_t low     = EEPROM.read(1);

    if(flag != 0xaa);
    {
        Serial.println(flag);
        Serial.println("ERROR: SLEEP TIME NOT DEFINED, CANNOT CONTINUE.");
        while(true)
        {
            digitalWrite(PIN_LED, true);
            delay(250);
            digitalWrite(PIN_LED, false);
            delay(250);
            wdt_reset();
        }
    }

    return word(high, low);
}

в результате функция if всегда оценивается как истина моей первой мыслью было, хорошо, eeprom не был записан правильно, поэтому я добавил println, возвращенное значение было 170 == 0xaa тогда я подумал, что, возможно, переменная флага оптимизирована, поэтому изменчивая а затем, возможно, это проблема сравнения типов, поэтому я также определил флаг const uint8_t со значением 0xaa одинаковые результаты в каждом случае

13:21:00.991 -> 170
13:21:00.991 -> ERROR: SLEEP TIME NOT DEFINED, CANNOT CONTINUE.
and the corresponding blink

Дело в том, что из-за такого тривиального кода у меня сейчас нет идей, кто-нибудь здесь сталкивался с чем-то подобным?

, 👍0

Обсуждение

при отладке поместите Serial.println(flag); перед оператором if, @jsotola


1 ответ


Лучший ответ:

2

Не ставьте ; после if:

if(flag != 0xaa);

такой же, как

if(flag != 0xaa)
{
}

Это означает, что код после оператора if всегда выполняется.

,

ой, глупая ошибка, @diegogmx

Однако нет проблем, я также должен проголосовать за закрытие, так как это не связано с Arduino., @Michel Keijzers