jcxz 187 25 мая, 2016 Опубликовано 25 мая, 2016 · Жалоба Да все три по очереди, стереть первую копию записать, стереть вторую копию записать... Вот стёрли Вы вторую, и тут бах! - выключились. А после включения получили: 1-я - новое содержимое; 2-я - стёрта; 3-я - старое содержимое. И с Вашим методом сравнения получите потерю содержимого этих структур. Это может произойти только в одном из копий и она да повредится, остальные копии уже записались либо ещё не стерлись. Вот эти остальные у Вас и будут разные. И когда начнёте сравнивать побайтно, получите что в 3-х разных копиях три разных варианта значений. Как можно не замечать очевидного??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ШСА 0 25 мая, 2016 Опубликовано 25 мая, 2016 · Жалоба Да все три по очереди, стереть первую копию записать, стереть вторую копию записать... Кроме всего прочего, у Вас будет очень сильный износ флеши. Если размер структуры много меньше размера секции флеши и рабочая копия есть в ОЗУ, то выгоднее с точки зрения износа флеши (а, следовательно, достоверности данных в ней) и проще записывать каждую обновлённую структуру сразу же после предыдущей. По окончании записи, в предыдущей затирать первый байт (слово). При считывании определяем актуальную запись по первому слову. Тогда флеш будет расходоваться максимально рационально, причём стираться будет только после использования всей свободной области, т.е. редко. А в случае сбоя просто актуальными окажутся предыдущие настройки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 187 25 мая, 2016 Опубликовано 25 мая, 2016 · Жалоба Кроме всего прочего, у Вас будет очень сильный износ флеши. Если размер структуры много меньше размера секции флеши и рабочая копия есть в ОЗУ, то выгоднее с точки зрения износа флеши (а, следовательно, достоверности данных в ней) и проще записывать каждую обновлённую структуру сразу же после предыдущей. По окончании записи, в предыдущей затирать первый байт (слово). При считывании определяем актуальную запись по первому слову. Тогда флеш будет расходоваться максимально рационально, причём стираться будет только после использования всей свободной области, т.е. редко. А в случае сбоя просто актуальными окажутся предыдущие настройки. Конечно, в этом случае лучше создать кольцевой буфер из N записей. Каждая запись - полная конфигурационная структура. Весь буфер должен занимать как минимум 2 блока стирания. И стирать байты в предыдущей записи не нужно - кольцо надо поддерживать в таком состоянии, чтобы в нём был разрыв из N стёртых записей. При старте ПО должно находить место этой стёртой дырки, и последняя записанная запись перед этой дыркой - это последняя актуальная конфигурация. Если же её CRC не совпадает (процесс её записи был прерван), валидной считается предыдущая (если её CRC верный). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться