ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
26 августа
413484
fk0, легенда (29.05.2013 13:35, просмотров: 31449) reZident
А у решения с EEPROM есть одна существення проблема: выключение питания не вовремя надёжно гробит записываемые значения. Так что один фиг нужна какая-то обёртка (программная) над записью и более чем одной копии настроек во flash (eeprom), и алгоритм поиска последней правильно записи. И если эту мысль несколько обобщить, то получим что-то а-ля JFFS. Когда записи в каком-то участке, состоящем из N страниц flash записи пишутся строго по кругу (чем обеспечивается wear leveling). Когда в одну страницу (мин. единица для стирания) можно записать M записей (стирается при записи первой). Всего M*N записей. Каждая запись имеет серийный номер, CRC и данные. При старте прибора перебираются все (или методом двоичного поиска -- log(M*N)) записи и выявляется последняя корректно записанная (для чтения настроек) и адрес следующей для записи (после последней если там FFFFF... или с начала следующей страницы). M*N не может быть меньше двух, но может быть очень большим, настолько большим, чтоб N*C, где C макс. число циклов стирания страниц из даташита, было большим, чем число записей за срок жизни прибора. И таких областей, с записями, скажем так "файлов", может быть несколько. Для большого числа редко записываемых данных одна область, с малым числом N, для малого числа часто записываемых данных -- "файл" с большим числом N. Ну а с точки зрения программы есть просто структуры языка "C" которые сохраняются и считываются... Алгоритмы "эмуляции EEPROM" из даташитов устроены часто не так и стремятся именно побитово эмулировать EEPROM. Это не нужно, ибо не решает проблему сбоя в момент записи (описанный выше алгоритм -- решает), во-вторых зписывать часто нужно именно структурированные данные, а не какие-то биты или байты.
[ZX]