ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 апреля
713468 Топик полностью
Nikolay_Po (17.11.2016 10:42 - 10:49, просмотров: 216) ответил Adept на чёт-то ещё параноидальнее монструознее, чем у меня :( про разные страницы подумаю (наверное действительно вернее). Питание не может йопнутся внезапно ("супервизор" и буферные ёмкости в 2000мкФ)
При избытке объёма EEPROM разумно использовать нечто вроде wear leveling. Я делаю так: делю EEPROM на несколько блоков, в каждый из которых помещается порядковый номер записи, данные и контрольная сумма. И каждую следующую запись делаю со следующим порядковым номером в следующий блок. Проверяю записанное. Если верно - ОК. Если не верно - пишу в следующий блок, до тех пор пока не достигну успеха или не будут перепробованы все блоки по кругу. При чтении читаю все блоки по очереди, проверяю контрольные суммы. Из блоков с верными контрольными суммами беру порядковые номера записей. Запись с большим номером использую, а следующий за ней блок EEPROM (который обычно с самым старым порядковым номером) отмечаю как следующий под запись. Так обеспечивается использование всей памяти с равномерным износом. И даже в случае сбоя последней записи, можно использовать предыдущую, пусть с устаревшими данными. На случай какого-либо фатального сбоя EEPROM или для полной инициализации устройства, предусматриваю возможность полного стирания EEPROM пользователем. P.S. если EEPROM используется всего на 5%, то я бы так и делал - разбил бы на 20 блоков (или сколько там выйдет), 4 байта порядковый номер записи, 10 байт данных, 4 байта контрольная сумма. Лишь бы времени хватало записать весь блок. В любом случае когда применяется запись в EEPROM и FLASH, обязательно использовать дублирование данных и контроль их целостности.