Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2016.02.28;
Скачать: [xml.tar.bz2];

Вниз

Функция для продления жизни 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.002 c
15-1424691616
KSergey
2015-02-23 14:40
2016.02.28
Как избавиться от ленности в мозгах?


2-1408433089
Друг
2014-08-19 11:24
2016.02.28
Дифайны и пути для проекта - настройка IDE


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


3-1307102463
Geo
2011-06-03 16:01
2016.02.28
Ошибка при сохранении в blob


2-1407505445
С-К
2014-08-08 17:44
2016.02.28
Вывести пустой TDateTimePicker





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский