Свежие обсуждения
Микроконтроллеры

А кто как организует в своих программах контроль завершённости

1 7

А по русски написать можно ?

Если касаемо детектирования того, что посреди программы питание сняли - дык я внешнюю FRAM I2C ППЗУшку аж на 256 байт применял (оны нынче зело подешевели) - периодически в ячейку пишу номер шага программы и контрольную сумму этого намера + номер записи по очереди - и так в режиме "кольца". По включению питания смотрим - ага - что-то во FRAM записано и это ЖЖЖ не с проста. Начинаем читать и ищем запись с максимальным номером - проверяем контрольную сумму - если не совпала - значит питание во время записи рубанули и данные неликвидны откатываемся на 1 записи назад и восстанавливаем состояние программы. (в данном случае инкрементный энкодер прикидывается абсолютным) - уже года 2 работает. Некручение энкодера по откл питания - вопрос самотормозящегося червячного редуктора.

 

Дык.. дон, про КОНТРОЛЬ начал. И сразу переехал на ВОССТАНОВЛЕНИЕ.....мысль держи, не упускай...

 

Дон Амброзио: нужно хранить каждую запись в 4-х экземплярах
А если питание отключается между окончанием записи 2й копии и началом записи 3й? Ничья будет.

 

1. Во флэшке выделяется байт управления транзакцией.
2. Перед записью данных в байт управления транзакцией заносится код "начало транзакции"
3. Производится запись данных.
4. После полной записи данных в байт управления транзакцией заносится код "транзакция завершена"
Дальнейшее очевидно - если в байте управления НЕ "транзакция завершена" - пользоваться данными нельзя. Вопрос решен десятилетия назад, между прочим.

 

chav1961: 1. Во флэшке выделяется байт управления транзакцией.
Либо CRC в конце данных. Логика та же.

 

С CRC крайне редко, но могут возникать ошибки. К примеру, новая информация образована от старой перестановкой четных и нечетных байт. В этом случае при прерывании записи после четного байта "старая" контрольная сумма оказывается верной. Просто CRC описывает свойства данных, а не состояние операции как таковой. Впрочем, если не выделываться, тогда и CRC подойдет

 

По-моему, CRC меняется при перестановке байт. Может быть, вы спутали понятия "контрольная сумма" и "циклическая контрольная сумма"?

Тема мне напомнила похожие процессы, которые приходилось делать при чтении-модификации-записи большого файла ХХХ. Там часть файла читалась в озу, правилась, затем создавался новый файл под именем YYY, модифицированный файл переписывался в него покластерно, старый файл переименовывался в ZZZ, после этого файл YYY переименовывался в ХХХ. В любом случае, при любом сбое или ошибке записи, на диске оставалась неповреждённая копия старого и/или модифицированного файла.

 

Если CRC - "Cyclic Redundancy Code" - тогда спутал.

 

CRC великое множество. Я вот такой бибилотекой пользуюсь

142332.rar

 

chav1961: Вопрос решен десятилетия назад, между прочим.
Разумеется. Виндовоз при обновлении делает точно так-же: Новые данные (не важно какие) пишутся в отдельный буфер, затем проверяется достоверность данных в этом буфере и если все ОК, то быстро перезаписывается на штатное место... Тема сформулирована некорректно, а плодовитый дон уже в новом топике вопросы выдает....