Проблема чтения EEPROM при записи скетча через программатор

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:

Он не просто замысловатый он и логически неправильный, я же говорил, умные люди поправят )))
Как говорил Штирлиц, важно умение не только правильно зайти, но и выйти, добавил одну строку в Ваш код для улучшения эстетического восприятия )))
 

#include <EEPROM.h>

void setup() {
  Serial.begin(115200);
  for (uint16_t i = 0; i < EEPROM.length(); i++) { //Определяем диапазон EEPROM памяти
    if (0x00 == (i % 0x10)) { // В начале каждой строки из 16 ячеек дампа выводим адрес блока
      Serial.println();
      if (i < 0x0F) { Serial.print("0"); }
      if (i < 0xFF) { Serial.print("0"); }
      Serial.print(i, HEX);  Serial.print(" ");
    }
    uint8_t val = EEPROM.read(i);
    if (val < 0x0F) { Serial.print("0"); }
    Serial.print(val, HEX); Serial.print(" ");
  }
  Serial.println();
}

void loop() { }

 

Aleksandr1968
Offline
Зарегистрирован: 06.02.2018

В итоге решили проблему.

В начале программы поставили проверку. Если неиспользуемая программой ячейка EEPROM содержит 0 - то далее идет запуск основной программы. Если в этой ячейка 255 то сначала EEPROM прописывается нулями, а потом уже запускается программа. Все прекрасно работает независимо от способа заливки кода. 

 И вопрос напоследок, чтобы съэкономить время. Сможет ли Атмега 8 заменить без шаманства Атмга 328 при условии, что памяти у  Атмега 8 хватит для программы?

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Aleksandr1968 пишет:

Если в этой ячейка 255 то сначала EEPROM прописывается нулями, а потом уже запускается программа. 

Это неправильно.

Aleksandr1968 пишет:

 И вопрос напоследок, чтобы съэкономить время. Сможет ли Атмега 8 заменить без шаманства Атмга 328 при условии, что памяти у  Атмега 8 хватит для программы?

Если не используются специфические для 328 возможности, то будет работать.  По ногам они совпадают

 
 
Aleksandr1968
Offline
Зарегистрирован: 06.02.2018

ок  спасибо   попробую  

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

Aleksandr1968 пишет:

Если в этой ячейка 255 то сначала EEPROM прописывается нулями, а потом уже запускается программа. 

Это неправильно.

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ua6em пишет:

DetSimen пишет:

Aleksandr1968 пишет:

Если в этой ячейка 255 то сначала EEPROM прописывается нулями, а потом уже запускается программа. 

Это неправильно.

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

Потому, что:

1. "Пустой" ячейке соответствкет 255, а не 0.

2. Лишняя операция записи в устройство с ограниченным ресурсом.

3. Лишний код в программе.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

потому что "чистый" EEPROM всегда забит единицами, это его традиционно нормальное состояние, и забивать его нулями чистое извращение и снижение ресурса.  Я бы наоборот, проверял на старте, если ПЗУ забита единицами, значит его стёрли, и соответственно НЕ читать из него нужное значение,  а использовать дефолтное какрас для такого случая. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:
почему неправильно???
Ну, вот нахрена лишний раз "наждачкой" по памяти проходиться? Зачем? Не проще ли сделать одно из:

1) считать 255 нулём и не париться
2) найти наконец в конфигурационных файлах это прописывание FF-ками и выключить его нахрен?

Aleksandr1968
Offline
Зарегистрирован: 06.02.2018

Евгений, согласен с вами конечно. Поэтому этот блок проверки назвали в программе Костылем. Не самое изящное решение.

Вопрос, а насколько критична такая разовая "шлифовка" постоянной памяти. какой у нее ресурс перезаписи? 

bwn
Offline
Зарегистрирован: 25.08.2014

Ресурс охрененный, но зачем, если можно сделать по человечески?
Проверили 2-5-10 ячеек, если везде FF, прописываем дефолтные значения и работаем. ИМХО.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Да я знаю, и даже почему при форматировании прописывается F6 )))

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Aleksandr1968 пишет:

В итоге решили проблему.

В начале программы поставили проверку. Если неиспользуемая программой ячейка EEPROM содержит 0 - то далее идет запуск основной программы. Если в этой ячейка 255 то сначала EEPROM прописывается нулями, а потом уже запускается программа. Все прекрасно работает независимо от способа заливки кода. 

 И вопрос напоследок, чтобы съэкономить время. Сможет ли Атмега 8 заменить без шаманства Атмга 328 при условии, что памяти у  Атмега 8 хватит для программы?

 

обалдеть решение, а то что вам примеры неделю назад давали аналогичные вы благополучно игнорировали.....да вы реально тролль :)

Aleksandr1968
Offline
Зарегистрирован: 06.02.2018

Да что вы заладиль тролль не тролль. Была попытка не использовать такого решения, но нехватка времени и знаний заставила сделать так. Просто отписался о результате. 

b707
Offline
Зарегистрирован: 26.05.2017

Aleksandr1968 пишет:

Да что вы заладиль тролль не тролль. Была попытка не использовать такого решения, но нехватка времени и знаний заставила сделать так. Просто отписался о результате. 

Ну что за бред, а?  Какая "попытка не использовать"? Что сложного при обнаружении в памяти 255 ПРОСТО НИЧЕГО НЕ ДЕЛАТЬ?

Вы реально тролль. который не читает ответов на форуме. Нафига тогда спрашивать и у людей время отнимать?