Odometr

и задачки для интервью.
Nasekomoe
Уже с Приветом
Posts: 263
Joined: 18 Nov 2004 21:08
Location: New York, NY

Odometr

Post by Nasekomoe »

Такая задачка.

Представим себе электронный 6-разрядный указатель пройденного пути в автомобиле (одометр). Этот прибор должен быть устойчив к отключению электропитания, то есть сохранять текущее значение в энергонезависимой памяти. Но эта память не способна выдержать неограниченное количество циклов записи (или, скажем, так: чем большее количество циклов записи она способна выдержать, тем дороже стоит). Вместе с тем можно считать, что энергозависимая память и ПЗУ (RОМ) практически бесплатны, как и микрокомпьютер, который отвечает за вывод показаний на дисплей.

Внимание - вопрос:

Как организовать хранение данных в одометре, чтобы минимизировать стоимость энергонезависимой памяти?

(Ясное дело, что в 6-разрядном одометре старший разряд "нагружен" слабее, чем остальные в смысле циклов перезаписи. Надо придумать способ "размазать" эту нагрузку как можно более равномерно).

Я понятно выражаюсь?

(Прошу не рассматривать эту задачку как инженерную, то есть не предлагать решения типа "пишем в NVRAM только непосредственно в момент отключениа электропитания, для чего одометр снабжаем маленьким конденсатором, способным питать компьютер в течение 0.5 сек. после пропажи напряжения в бортовой электросети")
User avatar
venco
Уже с Приветом
Posts: 2001
Joined: 10 Nov 2004 00:34
Location: MD

Post by venco »

Чтобы минимизировать цену, надо бы уточнить как она зависит от объёма памяти и количества циклов перезаписи.
Кроме того, обычно перезапись идёт блоками, т.е. записать 1 бит и 1КБ может стоить одинаково.
dB13
Уже с Приветом
Posts: 1494
Joined: 08 May 2001 09:01
Location: Silicon Valley

Re: Odometr

Post by dB13 »

Nasekomoe wrote:Ясное дело, что в 6-разрядном одометре старший разряд "нагружен" слабее, чем остальные в смысле циклов перезаписи. Надо придумать способ "размазать" эту нагрузку как можно более равномерно.


Написано белым, выделите, чтобы прочитать:
Grey code?
User avatar
KP580BE51
Уже с Приветом
Posts: 15007
Joined: 14 Jun 2005 11:50
Location: Ukraine

Re: Odometr

Post by KP580BE51 »

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. :)
User avatar
KP580BE51
Уже с Приветом
Posts: 15007
Joined: 14 Jun 2005 11:50
Location: Ukraine

Re: Odometr

Post by KP580BE51 »

dB13 wrote:Написано белым, выделите, чтобы прочитать:
Grey code?

Нет. Он ничего не даст.
User avatar
IvanGrozniy
Уже с Приветом
Posts: 10522
Joined: 04 Feb 2004 14:14
Location: Edgewater, NJ

Post by IvanGrozniy »

Как-то раз, давным-давно, во времена дефицитности электронных часов, была схема "псевдо электронных часов" в пиложении "Юный техник". Смысл тех электронных часов был в том, что на самом деле часы были мехынические, но к стрелкам тех часов были приделаты металлические кисточки, а циферблат был выполнен и нарисован на текстолитовой плате. Кисточки под напряжением скользили по текстолиту и простенькая электронная схема показывала циферки о времени на самопальном табло. То есть при отключении света механические часы продолжали ход и когда свет вновь включался, то табло продолжало показывать текущее время.
Также и здесь можно реализовать табло таким образом, чтобы оно считывало результат с механических шестеренок одометра. Пойдет такое решение?
Nasekomoe
Уже с Приветом
Posts: 263
Joined: 18 Nov 2004 21:08
Location: New York, NY

Post by Nasekomoe »

Эти решения не пойдут. Я подчеркнул, что не надо рассматривать задачу, как инженерную, а предложенные решения ее рассматривают именно таким образом.

Один из вариантов решения - не оптимальный, но демонстрирующий стиль искомого решения - такой:

Старший разряд - сотни тысяч километров - будет, помимо сотен тысяч, указывать, в каком качестве следует интерпретировать другие разряды. Например, если в старшем разряде сидят цифры 0 или 1, то 2-й разряд - десятки тысяч км, 3-й - тысячи, четвертый-сотни, пятый - десятки, шестой - единицы.
Если в старшем разряде - цифры 2 или 3, то 2-й разряд - десятки тысяч км, 3-й - тысячи, четвертый-сотни, пятый - единицы, а вот шестой - десятки.
Если в старшем разряде - цифры 4 или 5, .. Ну, в общем, принцип понятен, а?

В таком решении старший разряд по-прежнему недогружен, хотя остальные нагружены равномерно (или, по крайней мере, их МОЖНО нагрузить равномерно за счет более качественного выбора перестановок, так, чтобы каждая ячейка в какой-то период своей жизни отвечала за хранение нужного "порядка" километров.

Как бы еще и старший разряд задействовать в смысле увеличения нагрузки на него?
User avatar
venco
Уже с Приветом
Posts: 2001
Joined: 10 Nov 2004 00:34
Location: MD

Post by venco »

Т.е. строго задача формулируется так.

Каждый десятичный разряд записывается независимо. Надо придумать такую кодировку, чтобы при полном цикле (10^6) максимальное число перезаписей каждого разряда было минимально.
В идеале это число - 10^6/6 = 166667, всего в 6 раз меньше, чем получится при обычном кодировании. Стоит ли овчинка выделки?
Nasekomoe
Уже с Приветом
Posts: 263
Joined: 18 Nov 2004 21:08
Location: New York, NY

Post by Nasekomoe »

Не стоит, конечно - в инженерном смысле. Поэтому я как раз и предлагаю на эту задачу смотреть как на головоломку.

Return to “Головоломки”