Перейти к содержанию
    

Инициализация структуры во Flash

Да все три по очереди, стереть первую копию записать, стереть вторую копию записать...

Вот стёрли Вы вторую, и тут бах! - выключились. А после включения получили: 1-я - новое содержимое; 2-я - стёрта; 3-я - старое содержимое.

И с Вашим методом сравнения получите потерю содержимого этих структур.

 

Это может произойти только в одном из копий и она да повредится, остальные копии уже записались либо ещё не стерлись.

Вот эти остальные у Вас и будут разные. И когда начнёте сравнивать побайтно, получите что в 3-х разных копиях три разных варианта значений.

Как можно не замечать очевидного???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да все три по очереди, стереть первую копию записать, стереть вторую копию записать...

Кроме всего прочего, у Вас будет очень сильный износ флеши. Если размер структуры много меньше размера секции флеши и рабочая копия есть в ОЗУ, то выгоднее с точки зрения износа флеши (а, следовательно, достоверности данных в ней) и проще записывать каждую обновлённую структуру сразу же после предыдущей. По окончании записи, в предыдущей затирать первый байт (слово). При считывании определяем актуальную запись по первому слову.

Тогда флеш будет расходоваться максимально рационально, причём стираться будет только после использования всей свободной области, т.е. редко. А в случае сбоя просто актуальными окажутся предыдущие настройки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кроме всего прочего, у Вас будет очень сильный износ флеши. Если размер структуры много меньше размера секции флеши и рабочая копия есть в ОЗУ, то выгоднее с точки зрения износа флеши (а, следовательно, достоверности данных в ней) и проще записывать каждую обновлённую структуру сразу же после предыдущей. По окончании записи, в предыдущей затирать первый байт (слово). При считывании определяем актуальную запись по первому слову.

Тогда флеш будет расходоваться максимально рационально, причём стираться будет только после использования всей свободной области, т.е. редко. А в случае сбоя просто актуальными окажутся предыдущие настройки.

Конечно, в этом случае лучше создать кольцевой буфер из N записей. Каждая запись - полная конфигурационная структура. Весь буфер должен занимать как минимум 2 блока стирания.

И стирать байты в предыдущей записи не нужно - кольцо надо поддерживать в таком состоянии, чтобы в нём был разрыв из N стёртых записей. При старте ПО должно находить место этой стёртой дырки,

и последняя записанная запись перед этой дыркой - это последняя актуальная конфигурация. Если же её CRC не совпадает (процесс её записи был прерван), валидной считается предыдущая (если её CRC верный).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...