Кольцевой буфер для выравнивания износа eeprom - поделитесь кодом
- Войдите на сайт для отправки комментариев
Втр, 13/05/2014 - 19:53
Мне нужно часто сохранять в eeprom значения с датчиков. Сохранять нужно именно в eeprom, при этом допустимо перезаписывать самые старые измерения.
Поделитесь простой и компактной реализацией кольцевого буфера.
Несколько ссылок по теме:
http://we.easyelectronics.ru/Soft/kolcevoy-bufer-na-s-dlya-mk.html
Библиотека кольцевого буфера должна быть ориентирована именно на выравнивание износа eeprom.
Тут я нашел хороший пример обычного кольцевого буфера:
http://forum.arduino.cc/index.php?PHPSESSID=grtlluormavgr3qa1smr0mhs90&topic=123739.msg930867#msg930867
А вот то, что мне было нужно EEPROMWearLeveler.cpp. Еще не успел проверить как оно работает.
Мегаобзор возможных реализаций, в том числе использование 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/
А можно еще подключить модуль часов, на котором, традиционно, идет более живучая микросхема памяти AT24C32...
Я использую AT24C64, AT24C128 и их живучесть вопросов не вызывает.
Дополню. Когда-то нужно было сделать подобное, вот ссылка на форум Амперки, где пользователь Unixon очень помог. Работает код превосходно, за что ему большое спасибо)
Вот ещё ссылка на ГитХаб с достаточно полноценной библиотекой EEPROMWearLevel для Arduino.
Дополню. Когда-то нужно было сделать подобное, вот ссылка на форум Амперки, где пользователь Unixon очень помог. Работает код превосходно, за что ему большое спасибо)
код, конечно, любопытный... только с ним износ ЕЕПРОМ увеличивается вдвое. Так что непонятно. за что боролись.
ЗЫ а чего вас вдруг потянуло обновить тему 5-летней давности ссылкой на тему амперки давностью 4 года? :)
Смотря что нужно писать. Если НЕ булевые то: пишете значение и признак конца. И так по кругу. При включении находите значение по признаку конца - 1. Это по простому.
Поделитесь простой и компактной реализацией кольцевого буфера.
делюсь.
EEPROM_Write(adr, val);adr++;
когда adr превысит размер памяти поедет запись с нулевого адреса. Надеюсь через 7 лет это выручит ТС )))
Надеюсь через 7 лет это выручит ТС )))
какое-то нашествие некрофилов :) в соседней ветке тоже человек выложил ссылку на ветку 2015года и утверждает, что там "сегодняшняя дата"
"Без прошлого нет будущего")))
Надеюсь через 7 лет это выручит ТС )))
какое-то нашествие некрофилов :) в соседней ветке тоже человек выложил ссылку на ветку 2015года и утверждает, что там "сегодняшняя дата"
Проблема не утратила актуальности.
Проблема не утратила актуальности.
какая? экономии ресурса ЕЕПРОМ? а как же FRAM?
С FRAM и дурак сможет.)
Проблема не утратила актуальности.
какая? экономии ресурса ЕЕПРОМ? а как же FRAM?
FRAM пока плохо. Дорого, подделок полно.
FRAM пока плохо. Дорого, подделок полно.
Смотря какие. 512 дороговато. 64 и 256 вполне доступно. Подделки (в смысле перемаркированные АТ24) пока не попадались. Их же в режиме записи сразу видно
А по теме ТС - если добавить к процедуре записи функцию верификации, то на буфер можно забить. Померла ячейка - пишем в следующую..
//сразу видно
В режиме записи денег на счет продавца невидно
Мне просто интересно, ТС, а эта "мегасложная" задача требует библиотеки ? Вы какой объем данных собираетесь записывать в eeprom ?