LightElf (01.02.2020 18:43 - 18:51, просмотров: 249) ответил fk0 на Хорошо, а как понять какую страницу использовать? Тоже ближнюю к концу, он они же пишутся по кругу? Кроме того, если устройство подразумевает перезапись, а не стирание-и-запись (пишем в файл на компе), то в конце страницы запросто окажутся
Ну тут вроде о эмуляции eeprom на внутреннем флеше, что подразумевает именно стирание и запись. Используется две страницы флеша. Подразумевается, что весь набор данных (т.е. по одной версии каждой переменной) гарантированно помещается в одну страницу. У меня были страницы флеша по 1кБ, куда сохранялись с десяток переменных по 4..16 байт каждая.
При старте выполняется проверка/инициализация, в которой проверяется состояние страниц
1) Самое частое и тривиальное состояние: одна страница стертая (все FF), соответственно вторая - рабочая.
2) Одна страница полностью заполнена (свободного места в конце меньше, чем длина самой длинной переменной), другая (например вторая) заполнена частично. Такое может произойти если питание/ресет дернули при переносе данных из одной страницы в другую. В таком примере первая страница содержит корректные данные. Инициализация будет заключаться в стирании второй страницы, переносе туда последних версий переменных из первой страницы и стирании первой страницы.
При записи переменная со своим тэгом, длиной и КС записывается в конец рабочей страницы. Если после записи свободного места в странице осталось меньше, чем длина самой длинной переменной (плюс тэг, плюс длина, плюс КС) - то инициируется перенос последних версий данных во вторую страницу. После чего первая страница стирается.
Не надо делать мне как лучше, оставьте мне как хорошо