Задачка о счётчике

Тема в разделе "WASM.A&O", создана пользователем Black_mirror, 9 дек 2010.

  1. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Имеется энергонезависимая память длиной n бит(с побитовой перезаписью) в которой хранится счётчик. Изначально все биты имеют значение 0. На вход поступают некоторые импульсы, по каждому из которых необходимо увеличивать счётчик на 1.
    В каком виде хранить счётчик, чтобы минимизировать число перезаписываемых бит на один импульс?(лёгкий вопрос)
    Как уменьшить максимальное количество перезаписей отдельно взятого бита?
     
  2. Ravager

    Ravager New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    34
    Напрашивается третий вопрос: как минимизировать общее количество перезаписей бит на полный цикл счётчика?
     
  3. Ravager

    Ravager New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    34
    Впрочем, на него ответ тот же, что и на первый - код Грея.
     
  4. AlexCab

    AlexCab New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2008
    Сообщения:
    142
    Black_mirror

    Можно разделить счётчик на старшую чать(например размером в слово) и младшую(например размером в байт)
    когда младшая чать заполнятеся инк/декременитировать старшую.
    Выделить в энегргонезависемой памяти несколько байт в резерв под младшую часть,
    и после выработки ресурса одного байта начать использовать следующий и так далее.
    Чтоб распределить "нагрузку" на все биты младшей части можно с каждым импульсом устанавливать/сбрасывать
    по одному(единичная система исчисленияhttp://ru.wikipedia.org/wiki/Система_счисления).

    Но лучше подсчитывать в RAM и детектить пропадаение питания.
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Так понимаю, используем систему где при инкременте меняется только 1 или 2 бита? Типо меняем последовательно биты по порядку начиная с первого, затем со второго и т.д.

    Тут скорее всего просто не нужно его перезаписывать. ^) Уменьшить мощность типа.
     
  6. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Код Грея конечно хорош, но один из разрядов в нём перезаписывается намного чаще остальных, нужно придумать как уменьшить это количество с (2^n)/2 до (2^n)/n.
     
  7. ava

    ava New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2003
    Сообщения:
    169
    Нужно ли использовать все 2^n комбинаций битов? Если нет, то можно придумать что-нибудь наподобие кода Джонсона.
     
  8. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    ava
    Все использовать не обязательно, константное или сравнимое с n количество значений можно и выбросить, но будем считать, что должно использоваться не менее половины от 2^n комбинаций. А вот код Джонсона на мой взгляд сильно избыточный.
     
  9. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    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
     
  10. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    Или брутфорцом для малыхЪ n - пусть Машина думает :derisive: