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