программа неправильно оценивает условие if
Как следует из заголовка, у меня возникла проблема с неправильной оценкой условия 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
Дело в том, что из-за такого тривиального кода у меня сейчас нет идей, кто-нибудь здесь сталкивался с чем-то подобным?
@diegogmx, 👍0
Обсуждение1 ответ
Лучший ответ:
Не ставьте ;
после if:
if(flag != 0xaa);
такой же, как
if(flag != 0xaa)
{
}
Это означает, что код после оператора if
всегда выполняется.
ой, глупая ошибка, @diegogmx
Однако нет проблем, я также должен проголосовать за закрытие, так как это не связано с Arduino., @Michel Keijzers
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Ошибка A fatal error occurred: Failed to connect to ESP32: Wrong boot mode detected (0x13)! The chip needs to be in download mode. [upload] Error 2
- Текстовая часть превышает доступное место на плате
- Arduino - ошибка "expected primary-expression before '.' token"
- Почему IDE не может найти плату, несмотря на то, что она четко видна и выбрана?
- Ошибка переменной does not name a type!
- Функция, объявленная в другом файле, не распознана (undefined reference to)
- Arduino sketch использует слишком много места в памяти?
при отладке поместите
Serial.println(flag);
перед операторомif
, @jsotola