Я пытаюсь написать код для ESP8266-12E, который определяет начальную загрузку программы новой версии кода. Для этой упрощенной версии моего кода (которая все еще демонстрирует поведение, которое я наблюдаю) в разделе l oop () нет кода.
Я помещаю свою текущую версию кода в const String pgmVersion. Код читает EEPROM (фактически fla sh для ESP8266) и сравнивает его с текущей версией кода (pgmVersion). Если они разные, то я знаю, что у меня новая версия кода. Затем следует запись в EEPROM для сохранения текущей версии pgmVersion, чтобы при следующей загрузке эта версия была старой.
Когда я запускаю код только с l oop для прочитав eeprom, я вижу, что сохраненная версия отличается от текущей (а также могу видеть, когда они совпадают). Кажется, это работает правильно.
Однако, когда я запускаю полный код, который включает запись в eeprom, чтение l oop всегда указывает, что сохраненная версия соответствует текущей версии и не выполняет eeprom напишите для l oop. Это происходит постоянно, даже когда я запускаю с новым значением для текущей версии. Меня это просто сбивает с толку. Я могу отключить питание, а затем снова включить его, и данные новой версии были сохранены в eeprom, так что кажется, что она действительно записывается.
Может ли кто-нибудь увидеть, что не так с моим кодом, или объяснить, почему кажется, что eeprom быть написанным без прохождения моего eeprom напишите для l oop? Я прочитал много сообщений и онлайн-документации и до сих пор не могу понять этого.
Джим
#include <EEPROM.h>
const String pgmVersion = "00.04";
void setup() {
Serial.begin(115200);
EEPROM.begin(6);
delay(500);
char eepData;
char pgmData;
bool pgmMatch = true;
for (unsigned int i = 0; i < pgmVersion.length(); i++)
{
eepData = char(EEPROM.read(i));
pgmData = pgmVersion.charAt(i);
Serial.print("eepData = ");
Serial.println(eepData);
Serial.print("pgmVersion[i] = ");
Serial.println(pgmData);
if (eepData == pgmData)
{
Serial.println("eepData matches pgmData at index " + String(i));
} else
{
Serial.println("eepData does NOT match pgmData at index " + String(i));
pgmMatch = false;
}
}
if (!pgmMatch)
{
Serial.println("Writing EEPROM");
for (unsigned int i = 0; i < pgmVersion.length(); i++)
{
pgmData = pgmVersion.charAt(i);
EEPROM.write(i,pgmData);
delay(10);
}
if (EEPROM.commit())
{
Serial.println("EEPROM successfully committed");
} else
{
Serial.println("ERROR! EEPROM commit failed");
}
}
}
void loop() {
// put your main code here, to run repeatedly:
}