Имеется энергонезависимая память длиной n бит(с побитовой перезаписью) в которой хранится счётчик. Изначально все биты имеют значение 0. На вход поступают некоторые импульсы, по каждому из которых необходимо увеличивать счётчик на 1. В каком виде хранить счётчик, чтобы минимизировать число перезаписываемых бит на один импульс?(лёгкий вопрос) Как уменьшить максимальное количество перезаписей отдельно взятого бита?
Напрашивается третий вопрос: как минимизировать общее количество перезаписей бит на полный цикл счётчика?
Black_mirror Можно разделить счётчик на старшую чать(например размером в слово) и младшую(например размером в байт) когда младшая чать заполнятеся инк/декременитировать старшую. Выделить в энегргонезависемой памяти несколько байт в резерв под младшую часть, и после выработки ресурса одного байта начать использовать следующий и так далее. Чтоб распределить "нагрузку" на все биты младшей части можно с каждым импульсом устанавливать/сбрасывать по одному(единичная система исчисленияhttp://ru.wikipedia.org/wiki/Система_счисления). Но лучше подсчитывать в RAM и детектить пропадаение питания.
Так понимаю, используем систему где при инкременте меняется только 1 или 2 бита? Типо меняем последовательно биты по порядку начиная с первого, затем со второго и т.д. Тут скорее всего просто не нужно его перезаписывать. ^) Уменьшить мощность типа.
Код Грея конечно хорош, но один из разрядов в нём перезаписывается намного чаще остальных, нужно придумать как уменьшить это количество с (2^n)/2 до (2^n)/n.
Нужно ли использовать все 2^n комбинаций битов? Если нет, то можно придумать что-нибудь наподобие кода Джонсона.
ava Все использовать не обязательно, константное или сравнимое с n количество значений можно и выбросить, но будем считать, что должно использоваться не менее половины от 2^n комбинаций. А вот код Джонсона на мой взгляд сильно избыточный.
0000 0 ; 1 0001 1 0011 2 0111 3 1111 4 ; 2 1110 5 1100 6 1000 7 ; 3 0000->0100 8 0101 9 1101 A 1001 B 1011 C 1010 D 0010 E 0110 F