Такая задачка.
Представим себе электронный 6-разрядный указатель пройденного пути в автомобиле (одометр). Этот прибор должен быть устойчив к отключению электропитания, то есть сохранять текущее значение в энергонезависимой памяти. Но эта память не способна выдержать неограниченное количество циклов записи (или, скажем, так: чем большее количество циклов записи она способна выдержать, тем дороже стоит). Вместе с тем можно считать, что энергозависимая память и ПЗУ (RОМ) практически бесплатны, как и микрокомпьютер, который отвечает за вывод показаний на дисплей.
Внимание - вопрос:
Как организовать хранение данных в одометре, чтобы минимизировать стоимость энергонезависимой памяти?
(Ясное дело, что в 6-разрядном одометре старший разряд "нагружен" слабее, чем остальные в смысле циклов перезаписи. Надо придумать способ "размазать" эту нагрузку как можно более равномерно).
Я понятно выражаюсь?
(Прошу не рассматривать эту задачку как инженерную, то есть не предлагать решения типа "пишем в NVRAM только непосредственно в момент отключениа электропитания, для чего одометр снабжаем маленьким конденсатором, способным питать компьютер в течение 0.5 сек. после пропажи напряжения в бортовой электросети")
Odometr
-
- Уже с Приветом
- Posts: 2001
- Joined: 10 Nov 2004 00:34
- Location: MD
-
- Уже с Приветом
- Posts: 1494
- Joined: 08 May 2001 09:01
- Location: Silicon Valley
Re: Odometr
Nasekomoe wrote:Ясное дело, что в 6-разрядном одометре старший разряд "нагружен" слабее, чем остальные в смысле циклов перезаписи. Надо придумать способ "размазать" эту нагрузку как можно более равномерно.
Написано белым, выделите, чтобы прочитать:
Grey code?
-
- Уже с Приветом
- Posts: 15007
- Joined: 14 Jun 2005 11:50
- Location: Ukraine
Re: Odometr
Nasekomoe wrote:Как организовать хранение данных в одометре, чтобы минимизировать стоимость энергонезависимой памяти?
(Ясное дело, что в 6-разрядном одометре старший разряд "нагружен" слабее, чем остальные в смысле циклов перезаписи. Надо придумать способ "размазать" эту нагрузку как можно более равномерно).
Я понятно выражаюсь?
1. Писать не раз в секунду а раз в к примеру километр (машина -то большую часть времени стоит)
2. Сделать несколько счетчиков типа
unsigned char km[SIZE_EEPROM];
тогда общее кол-во милей будет
for(i=0,kmAll=0;i<SIZE_EEPROM;i++) kmAll += km[i];
а запись значения будет просто как инкрементация самого меньшего значения в буфере.
(Прошу не рассматривать эту задачку как инженерную, то есть не предлагать решения типа "пишем в NVRAM только непосредственно в момент отключениа электропитания, для чего одометр снабжаем маленьким конденсатором, способным питать компьютер в течение 0.5 сек. после пропажи напряжения в бортовой электросети")
Есть еще FRAM.
-
- Уже с Приветом
- Posts: 15007
- Joined: 14 Jun 2005 11:50
- Location: Ukraine
Re: Odometr
dB13 wrote:Написано белым, выделите, чтобы прочитать:
Grey code?
Нет. Он ничего не даст.
-
- Уже с Приветом
- Posts: 10399
- Joined: 04 Feb 2004 14:14
- Location: Edgewater, NJ
Как-то раз, давным-давно, во времена дефицитности электронных часов, была схема "псевдо электронных часов" в пиложении "Юный техник". Смысл тех электронных часов был в том, что на самом деле часы были мехынические, но к стрелкам тех часов были приделаты металлические кисточки, а циферблат был выполнен и нарисован на текстолитовой плате. Кисточки под напряжением скользили по текстолиту и простенькая электронная схема показывала циферки о времени на самопальном табло. То есть при отключении света механические часы продолжали ход и когда свет вновь включался, то табло продолжало показывать текущее время.
Также и здесь можно реализовать табло таким образом, чтобы оно считывало результат с механических шестеренок одометра. Пойдет такое решение?
Также и здесь можно реализовать табло таким образом, чтобы оно считывало результат с механических шестеренок одометра. Пойдет такое решение?
-
- Уже с Приветом
- Posts: 263
- Joined: 18 Nov 2004 21:08
- Location: New York, NY
Эти решения не пойдут. Я подчеркнул, что не надо рассматривать задачу, как инженерную, а предложенные решения ее рассматривают именно таким образом.
Один из вариантов решения - не оптимальный, но демонстрирующий стиль искомого решения - такой:
Старший разряд - сотни тысяч километров - будет, помимо сотен тысяч, указывать, в каком качестве следует интерпретировать другие разряды. Например, если в старшем разряде сидят цифры 0 или 1, то 2-й разряд - десятки тысяч км, 3-й - тысячи, четвертый-сотни, пятый - десятки, шестой - единицы.
Если в старшем разряде - цифры 2 или 3, то 2-й разряд - десятки тысяч км, 3-й - тысячи, четвертый-сотни, пятый - единицы, а вот шестой - десятки.
Если в старшем разряде - цифры 4 или 5, .. Ну, в общем, принцип понятен, а?
В таком решении старший разряд по-прежнему недогружен, хотя остальные нагружены равномерно (или, по крайней мере, их МОЖНО нагрузить равномерно за счет более качественного выбора перестановок, так, чтобы каждая ячейка в какой-то период своей жизни отвечала за хранение нужного "порядка" километров.
Как бы еще и старший разряд задействовать в смысле увеличения нагрузки на него?
Один из вариантов решения - не оптимальный, но демонстрирующий стиль искомого решения - такой:
Старший разряд - сотни тысяч километров - будет, помимо сотен тысяч, указывать, в каком качестве следует интерпретировать другие разряды. Например, если в старшем разряде сидят цифры 0 или 1, то 2-й разряд - десятки тысяч км, 3-й - тысячи, четвертый-сотни, пятый - десятки, шестой - единицы.
Если в старшем разряде - цифры 2 или 3, то 2-й разряд - десятки тысяч км, 3-й - тысячи, четвертый-сотни, пятый - единицы, а вот шестой - десятки.
Если в старшем разряде - цифры 4 или 5, .. Ну, в общем, принцип понятен, а?
В таком решении старший разряд по-прежнему недогружен, хотя остальные нагружены равномерно (или, по крайней мере, их МОЖНО нагрузить равномерно за счет более качественного выбора перестановок, так, чтобы каждая ячейка в какой-то период своей жизни отвечала за хранение нужного "порядка" километров.
Как бы еще и старший разряд задействовать в смысле увеличения нагрузки на него?
-
- Уже с Приветом
- Posts: 2001
- Joined: 10 Nov 2004 00:34
- Location: MD
Т.е. строго задача формулируется так.
Каждый десятичный разряд записывается независимо. Надо придумать такую кодировку, чтобы при полном цикле (10^6) максимальное число перезаписей каждого разряда было минимально.
В идеале это число - 10^6/6 = 166667, всего в 6 раз меньше, чем получится при обычном кодировании. Стоит ли овчинка выделки?
Каждый десятичный разряд записывается независимо. Надо придумать такую кодировку, чтобы при полном цикле (10^6) максимальное число перезаписей каждого разряда было минимально.
В идеале это число - 10^6/6 = 166667, всего в 6 раз меньше, чем получится при обычном кодировании. Стоит ли овчинка выделки?
-
- Уже с Приветом
- Posts: 263
- Joined: 18 Nov 2004 21:08
- Location: New York, NY