Не совсем понятна физика процесса.
Вот берем мы две ячейки ОЗУ. После включения они с точностью до 6-7 бит стремятся к одному значению. Теперь начинаем одной переменной давать сильное воздействие посредством инвертирования битов, а вторую не трогаем. Чем больше бит совпало в той что "теребили" тем дольше было выключено питание. А вот зачем в процессе участвует ConstR ? Ведь у неё ожидается достаточно стабильное значение ConstN?
Вот берем мы две ячейки ОЗУ. После включения они с точностью до 6-7 бит стремятся к одному значению. Теперь начинаем одной переменной давать сильное воздействие посредством инвертирования битов, а вторую не трогаем. Чем больше бит совпало в той что "теребили" тем дольше было выключено питание. А вот зачем в процессе участвует ConstR ? Ведь у неё ожидается достаточно стабильное значение ConstN?
ConstN это база. У разных микросхем, и при разных включениях одной микросхемы, число "плавающих" бит может существенно различатся. Исходим из предположения, что на биты, из которых состоят, ConstR и VarR эти факторы влияют одинаково.
Вам же не хочется для каждого фонарика ставить эксперименты с определением именно его значения ConstN. И изменять это число в программе. Вот для самонастройки на конкретный образец и используется ConstR.
Алгоритм я несколько упростил. Реально у меня ConstR и VarR являлись разными битами одного байта. Т.е. это были 2 битовые строки, в перемешанном виде размещённые в ОЗУ. Наверно непонятно. Объясню на примере. Если представить ОЗУ как битовую строку, то биты относящиеся к ConstR и VarR размещались случайным (заданным 1 раз при написании программы) образом, например, так:
ccvcvvcc cvvvccvc vccvvvcv cvcvccvv и т.д
где "c" биты, относящиеся к ConstR, а "v" биты, относящиеся к VarR.
Подредактировал из-за описок.