Pull to refresh

Comments 3

Предлагаю способ избавления от статусных меток путем использования порядковых номеров записей. Нет, перезаписывать все записи не нужно.
Итак, будем считать, что блоков данных у нас N.
A mod B — остаток от деления;
A div B — неполное частное.
R_i — индекс записи в блоке с номером i, для которой сошлась контрольная сумма (индекс разумеется участвует в ее расчете).

Тогда индекс следующей записи рассчитывается по формуле (k+1) mod (N*2) (k- очевидно, индекс текущей записи).

Как узнать индекс актуальной записи? Положение бегуна на окружности определяется как остаток от деления пробега на длину окружности. Номер круга — это неполное частное. При пробегании полного круга мы полностью заполним его индексами, которые все либо меньше N, либо больше N.

Чтобы узнать, какой круг мы бежим, достаточно вычислить R_0 div N, а затем искать такой максимальный номер i, для которого R_i div N = R_0 div N — это и будет индекс актуальной записи.
Тут все проще — нам нужно выбрать одну актуальную область flash-памяти из 2-х. Так что номера нам просто не нужны, тем более что они занимали бы место в каждой записи.
Номер будет занимать максимум байт, зато при этом использоваться будет вся память контроллера, что уменьшит количество повторных перезаписей в среднем на ячейку.
При этом танцы с метками оказываются не нужны — мы просто дописываем нужные данные и все.
Более того, если память побилась, нетрудно будет отыскать «последнюю удачную конфигурацию».
Дальше можно изобрести чокнутый способ хранить данные, стирая их лишь на каждой восьмой перезаписи, ну это уже перебор.
Sign up to leave a comment.

Articles

Change theme settings