Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2016.02.28;
Скачать: CL | DM;

Вниз

Функция для продления жизни EEPROM   Найти похожие ветки 

 
Дмитрий С ©   (2015-06-11 17:14) [0]

Есть устройство, в нем EEPROM память.
При каждом запуске устройство должно выбирать некое уникальное значение (4 ячейки - 32 бита). Уникальность в рамках этого устройства.

Можно при каждом запуске увеличивать предыдущее значение на 1: (next(x) = x + 1)
В этом случае износ ячеек будет очень сильно неравномерным. Да и износ всей группы ячеек будет ограничен износом последней.

Задача: придумать такую функцию (хотя возможно она уже есть) next(x), чтобы удовлетворяла условию уникальности, и чтобы износ ячеек был (более) равномерным и минимальным.
Минимальным он будет, если каждое следующее значение отличается от предыдущего минимальным количеством байт (бит).


 
MBo ©   (2015-06-11 17:26) [1]

про износ всей группы не понял  - почему?

Уникальное, отличающееся от предыдущего минимальным количеством байт - например, x+p, где p - взаимно простое с общим количеством ячеек, большее указанного минимума


 
Romkin ©   (2015-06-11 17:36) [2]

Мне чудится что тут речь о коде Грея


 
Дмитрий С ©   (2015-06-11 19:40) [3]


> про износ всей группы не понял  - почему?

Если износится последняя (младшая) ячейка, то можно считать изношенной всю группу. Грубо говоря счетчик нужно будет перенести в другую область памяти, либо заменить память.


> x+p

Мне представляется, что очередные результаты сложения рано или поздно будут "налегать" на один и тот же байт.


> Мне чудится что тут речь о коде Грея

Почитал - интересно. Если двигаться в этом направление, остается подобрать такой код Грея, чтобы износ был не только минимальным, но и равномерным.


 
MBo ©   (2015-06-11 19:49) [4]

>Мне представляется, что очередные результаты сложения рано или поздно будут "налегать" на один и тот же байт.
Будут. Через MemSize итераций.


 
Дмитрий С ©   (2015-06-11 20:12) [5]


> MBo ©   (11.06.15 19:49) [4]

Не могу сообразить. Можно небольшой пример?

У меня родилась следующая идея. Вариант не идеальный, но лучше чем сложение:
Все как в x+1, только каждые, например, 255, итераций число записывается циклически сдвинутым на 1 байт.
Таким образом следующие 255 значений лягут на плечи следующей ячейки.
Придется только хранить длину сдвига где-то в другом месте.
Получаем навскидку, примерно, 260 записей в каждый байт на 1024 значения функции. Ресурс увеличивается почти в четыре раза (кстати, почти идеально).


 
MBo ©   (2015-06-11 20:31) [6]

M=8, p=5
0 5 2 7 4 1 6 3 0


 
Sha ©   (2015-06-11 21:10) [7]

> Дмитрий С

Нельзя ли четко сформулировать условия задачи?
С объяснением всех используемых обозначений.
Что нужно сделать? Без всяких, что можно.
Если хочешь привести пример, приведи его полностью и отдельно от условия.


 
Дмитрий С ©   (2015-06-11 21:23) [8]


> Sha ©   (11.06.15 21:10) [7]

Цель простая, каждый запуск устройства иметь уникальное 32х-битное значение в рамках этого устройства.
Что либо хранить устройство может только в EEPROM памяти, которая достаточно быстро изнашивается.

Задача: сделать так чтобы устройство пережило как можно большее количество запусков.


> MBo ©   (11.06.15 20:31) [6]

Я так понял, у меня в задаче:
M = 2^32, p = 3^20 (например).
Написал программу для проверки: существует байт, который перезаписывается каждую итерацию.

Затем написал программу для 2х байт (т.к. с 4 долго проверять). Где перебрал все значения "p". Во всех случаях существует байт, который перезаписывается каждую итерацию.


 
Inovet ©   (2015-06-11 21:43) [9]

> [8] Дмитрий С ©   (11.06.15 21:23)
> Задача: сделать так чтобы устройство пережило как можно большее количество запусков.

Больше чем
объём_EEPROM * ресурс_по_количеству_циклов_записи / объём_минимального_блока / количество_запусков
не получишь.

Устройства, навроде телевизоров, работают по 20 лет, и это при том, что 20 лет назад были EEPROM с худшими характеристиками.


 
Sha ©   (2015-06-11 21:43) [10]

> Дмитрий С ©   (11.06.15 21:23) [8]

Где тут что дано, что найти?


 
Inovet ©   (2015-06-11 21:53) [11]

> [10] Sha ©   (11.06.15 21:43)
> Где тут что дано, что найти?

Надо чтобы весило мало, а объём был большой. Найти силу Архимеда.


 
Sha ©   (2015-06-11 21:58) [12]

> Inovet ©   (11.06.15 21:43) [9]
> Больше чем ... не получишь.

Скорее всего это так, но не факт.
Задача автором совсем не формализована.
Возможных решений для возможных условий вагон и маленькая тележка.

> Дмитрий С ©   (11.06.15 21:23) [8]
> Задача: сделать так чтобы устройство пережило как можно большее количество запусков.

Что тут надо найти-то?


 
KilkennyCat ©   (2015-06-11 22:11) [13]

Чтение не ушатывает еепром. В остальном: задача действительно не формализована и даже вопрос "как запуздырить туда где часики.." более профессионален.


 
Дмитрий С ©   (2015-06-11 22:39) [14]

Пусть есть некое начальное x и искомая f(x) (оба uint32).
Тогда ряд X = (x, f(x), f^2(x), ..., f^N(x)); где N = 2^32 - 1.
Разложим каждое значение X[i] на биты. Будем считать изменением бита j для значения X[i], если ((X[i-1] and 1) shl j) <> ((X[i] and 1) shl j).
Тогда функция S(j, n) - возвращает количество изменений бита j, для значений (X[0],  ..., X[n]).
Тогда функция M(n) = MAX(S(j, n)), j=0..31
Необходимо найти такую f(x), чтобы M(n) была минимально возможной для любого n начиная с некоторого значения.


 
Дмитрий С ©   (2015-06-11 22:44) [15]


> KilkennyCat

При каждом запуске необходимо записать очередное значение иначе как гарантировать его уникальность.

Я не знаю как проще объяснить. Попробую так:
Каждый запуск устройства нужно иметь уникальное 32х битное значение в рамках устройства. Хранить между запусками устройство что-либо может в изнашиваемом при записи ПЗУ.
Необходимо найти такой способ генерации этих значений, чтобы как можно меньше износить ПЗУ.


 
Дмитрий С ©   (2015-06-11 22:45) [16]

В [14] не там скобки поставил.
Вместо
((X[i-1] and 1) shl j) <> ((X[i] and 1) shl j)
нужно
(X[i-1] and (1 shl j)) <> (X[i] and (1 shl j))


 
Германн ©   (2015-06-12 01:28) [17]


> Дмитрий С ©   (11.06.15 21:23) [8]
>
>
> > Sha ©   (11.06.15 21:10) [7]
>
> Цель простая, каждый запуск устройства иметь уникальное
> 32х-битное значение в рамках этого устройства.
> Что либо хранить устройство может только в EEPROM памяти,
>  которая достаточно быстро изнашивается.

Не секрет сказать что за устройство? Ибо нынешние EEPROM "изнашиваются" довольно таки не быстро.


 
Sha ©   (2015-06-12 01:54) [18]

balanced gray code


 
Дмитрий С ©   (2015-06-12 02:00) [19]


> Не секрет

Не секрет. ATMega2560


 
Германн ©   (2015-06-12 02:08) [20]


> Дмитрий С ©   (12.06.15 02:00) [19]
>
>
> > Не секрет
>
> Не секрет. ATMega2560
>

Не тем заботишься. Скорее всего внешние ресурсы устройства на базе этой ATMeg"и закончатся раньше чем внутренние ресурсы сего процессора.


 
kilkennycat ©   (2015-06-12 07:39) [21]

У меня в пике 100 тыщ циклов гарантированных перезаписей еепром. Что означает, что скорее всего, полмиллиона выдержит. Если вкл-выкл делать 100 раз в день или около 8 раз в час, то хватит на десяток лет.
Так в чем там вопрос-то был? :)


 
Sha ©   (2015-06-12 09:38) [22]

> kilkennycat ©   (12.06.15 07:39) [21]
> Так в чем там вопрос-то был? :)

На самом деле задача генерирования BGC-последовательности довольно интересна.
Пятница же)


 
Дмитрий С ©   (2015-06-12 21:07) [23]


> Так в чем там вопрос-то был? :)

Все забил:) Теперь задача сугубо теоретическая.


> На самом деле задача генерирования BGC-последовательности
> довольно интересна.

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


 
Дмитрий С ©   (2015-06-12 21:08) [24]

Спасибо всем. Каждым своим ответом или критикой вы делаете меня лучше! Спасибо!


 
Sha ©   (2015-06-12 21:41) [25]

> Дмитрий С ©   (12.06.15 21:07) [23]
> На первый взгляд показалось,
> что в английской википедии есть даже формулы.

Теория и формулы в томе 4а Кнута, п. 7.2.1.1, теорема D.

Можно попробовать самостоятельно поискать алгоритм.
Если не ошибаюсь, мне удалось найти новый алгоритм для BitCount=1,2,4,8,16,32... )



Страницы: 1 вся ветка

Текущий архив: 2016.02.28;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.007 c
15-1433885401
Юрий
2015-06-10 00:30
2016.02.28
С днем рождения ! 10 июня 2015 среда


2-1408606960
lewka_s
2014-08-21 11:42
2016.02.28
Авторизация ВКонтакте


15-1433936637
brother
2015-06-10 14:43
2016.02.28
Помогите просчитать значение формулы


15-1433937698
Kerk
2015-06-10 15:01
2016.02.28
Чтение RFID-карт


15-1434490201
Юрий
2015-06-17 00:30
2016.02.28
С днем рождения ! 17 июня 2015 среда