Кольцевой буфер для выравнивания износа eeprom - поделитесь кодом

Immortal
Offline
Зарегистрирован: 28.12.2013

Мне нужно часто сохранять в eeprom значения с датчиков. Сохранять нужно именно в eeprom, при этом допустимо перезаписывать самые старые измерения.

Поделитесь простой и компактной реализацией кольцевого буфера.

Несколько ссылок по теме:

ru.wikipedia.org

http://we.easyelectronics.ru/Soft/kolcevoy-bufer-na-s-dlya-mk.html

 

Immortal
Offline
Зарегистрирован: 28.12.2013

Библиотека кольцевого буфера должна быть ориентирована именно на выравнивание износа eeprom.

Тут я нашел хороший пример обычного кольцевого буфера:

http://forum.arduino.cc/index.php?PHPSESSID=grtlluormavgr3qa1smr0mhs90&topic=123739.msg930867#msg930867

А вот то, что мне было нужно EEPROMWearLeveler.cpp. Еще не успел проверить как оно работает.

Immortal
Offline
Зарегистрирован: 28.12.2013

Мегаобзор возможных реализаций, в том числе использование Flash в качестве EEPROM: http://ithare.com/journaled-flash-storage-emulating-eeprom-over-flash-acid-transactions-and-more-part-ii-existing-implementations-by-atmel-silabs-ti-stm-and-microchip/

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

А можно еще подключить модуль часов, на котором, традиционно, идет более живучая микросхема памяти AT24C32...

– Endurance: 1 Million Write Cycles
– Data Retention: 100 Years
Immortal
Offline
Зарегистрирован: 28.12.2013

Я использую AT24C64, AT24C128 и их живучесть вопросов не вызывает.

Otto
Offline
Зарегистрирован: 26.06.2016

Дополню. Когда-то нужно было сделать подобное, вот ссылка на форум Амперки, где пользователь Unixon очень помог. Работает код превосходно, за что ему большое спасибо)

Otto
Offline
Зарегистрирован: 26.06.2016

Вот ещё ссылка на ГитХаб с достаточно полноценной библиотекой EEPROMWearLevel для Arduino.

b707
Offline
Зарегистрирован: 26.05.2017

Otto пишет:

Дополню. Когда-то нужно было сделать подобное, вот ссылка на форум Амперки, где пользователь Unixon очень помог. Работает код превосходно, за что ему большое спасибо)

код, конечно, любопытный... только с ним износ ЕЕПРОМ увеличивается вдвое. Так что непонятно. за что боролись.

 

ЗЫ а чего вас вдруг потянуло обновить тему 5-летней давности ссылкой на тему амперки давностью 4 года? :)

Green
Offline
Зарегистрирован: 01.10.2015

Смотря что нужно писать. Если НЕ булевые то: пишете значение и признак конца. И так по кругу. При включении находите значение по признаку конца - 1. Это по простому.

Logik
Offline
Зарегистрирован: 05.08.2014

Immortal пишет:

Поделитесь простой и компактной реализацией кольцевого буфера.

 

делюсь.

EEPROM_Write(adr, val);adr++; 

когда adr превысит размер памяти поедет запись с нулевого адреса. Надеюсь через 7 лет это выручит ТС )))

b707
Offline
Зарегистрирован: 26.05.2017

Logik пишет:

Надеюсь через 7 лет это выручит ТС )))

какое-то нашествие некрофилов :) в соседней ветке тоже человек выложил ссылку на ветку 2015года и утверждает, что там "сегодняшняя дата"

Green
Offline
Зарегистрирован: 01.10.2015

"Без прошлого нет будущего")))

Logik
Offline
Зарегистрирован: 05.08.2014

b707 пишет:

Logik пишет:

Надеюсь через 7 лет это выручит ТС )))

какое-то нашествие некрофилов :) в соседней ветке тоже человек выложил ссылку на ветку 2015года и утверждает, что там "сегодняшняя дата"

Проблема не утратила актуальности.

b707
Offline
Зарегистрирован: 26.05.2017

Logik пишет:

Проблема не утратила актуальности.

какая? экономии ресурса ЕЕПРОМ? а как же FRAM?

Green
Offline
Зарегистрирован: 01.10.2015

С FRAM и дурак сможет.)

Logik
Offline
Зарегистрирован: 05.08.2014

b707 пишет:

Logik пишет:

Проблема не утратила актуальности.

какая? экономии ресурса ЕЕПРОМ? а как же FRAM?

FRAM пока плохо. Дорого, подделок полно.

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Logik пишет:

FRAM пока плохо. Дорого, подделок полно.

Смотря какие. 512 дороговато. 64 и 256 вполне доступно. Подделки (в смысле перемаркированные АТ24) пока не попадались. Их же в режиме записи сразу видно

А по теме ТС - если добавить к процедуре записи функцию верификации, то на буфер можно забить. Померла ячейка - пишем в следующую..

Logik
Offline
Зарегистрирован: 05.08.2014

//сразу видно

В режиме записи денег на счет продавца невидно

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Мне просто интересно, ТС, а эта "мегасложная" задача требует библиотеки ? Вы какой объем данных собираетесь записывать в eeprom ?