Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Кольцевая организация памяти в DataFlash
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Tcom
День добрый!!
Нужно доработать свой прибор который считывает температуру и др. параметры, кольцевой(после полной записи памяти, запись начиналась сначала) памятью.
Вопрос в самой организации, где хранить указатель на последний записанный адрес, что нужно предусмотреть и так далее.
Кто делал расскажите или может есть пример в исходниках.
Спасибо.
aaarrr
Цитата(Tcom @ Feb 4 2010, 16:29) *
где хранить указатель на последний записанный адрес

Указатель нигде не хранить. Вместо этого лучше снабжать каждую запись порядковым номером, а при включении прибора просто находить конец по разрыву в нумерации.
rezident
Согласен с aaarrr. В базах данных используется уникальный идентификатор, который сопровождает любую запись. Используйте при записи в журнал какой-либо идентификатор записи. Вполне достаточно кольцевого счетчика записей с достаточно большим временем повторения. Для ускорения записи можно держать этот счетчик в ОЗУ, но при рестарте обязательно восстанавливать его значение поиском из журнала.
Tcom
Как то так и планировал, думал может есть какие нить изощрённые способы.
Спасибо за совет.
Dog Pawlowa
Цитата(Tcom @ Feb 4 2010, 17:16) *
думал может есть какие нить изощрённые способы.

Конечно, есть!

Код
void fLowPower(void)
{
  if (!Sensor(LowPower)) {Delay (1000);  NEWS(stRestart);}
  switch (event)
  {  case evNew:
    OffAll();
    OffPin(Backlight);
    if (!((state.old==stError)&&(other_error==erSetupChecksum)))
      {  if (GetFlag(eeprom_good_))
          { (void)StoreAreaError(STATISTIC,0);   // запись статистики, где среди прочих значений хранится указатель на последнюю запись
             (void)StoreAreaError(CONSUMPTION,0);
          }
}
aaarrr
Цитата(Dog Pawlowa @ Feb 4 2010, 18:31) *
Конечно, есть!

А если не успеет?
SasaVitebsk
Но ведь всё равно, кроме указателя, чаще всего есть и другие константы, требующие модификации по ходу работы.

Я выделяю первую страницу под это дело. Соответственно кольцо начинается с адреса, следующего за первой. Ну а остальное - аналогично. Если запись запорчена, перехожу на предыдущую.
aaarrr
Цитата(SasaVitebsk @ Feb 5 2010, 04:43) *
Но ведь всё равно, кроме указателя, чаще всего есть и другие константы, требующие модификации по ходу работы.

Для них отдельное кольцо.

Цитата(SasaVitebsk @ Feb 5 2010, 04:43) *
Я выделяю первую страницу под это дело.

Ресурса не жалко? 100K ведь всего гарантируется (а раньше даже писать стеснялись, т.к. было 10K, потом 50).
demiurg_spb
Есть такая штука как журнальная файловая система: jfs.
SasaVitebsk
Цитата(aaarrr @ Feb 5 2010, 13:20) *
Для них отдельное кольцо.

Вариант конечно.
Цитата
Ресурса не жалко? 100K ведь всего гарантируется (а раньше даже писать стеснялись, т.к. было 10K, потом 50).

Ну у меня очень редко изменяемая инфа. И объём "записи" настандартен и очень значителен. Несколько десятков кб. Истории мне достаточно только на предудущую.

Ну а если требуется что-то типа журнала, то необходимо применять стандартные подходы. Ну типа указатель на предыдущую и последующую. Всётаки здесь многое зависит от поставленной задачи.
AHTOXA
Цитата(demiurg_spb @ Feb 6 2010, 19:09) *
Есть такая штука как журнальная файловая система: jfs.


Для Dataflash? smile.gif
demiurg_spb
Цитата(AHTOXA @ Feb 6 2010, 18:40) *
Для Dataflash? smile.gif
Нет, но идею работы посмотреть можно.
AHTOXA
Цитата(demiurg_spb @ Feb 7 2010, 02:35) *
Нет, но идею работы посмотреть можно.


Смеётесь? smile.gif Прикиньте сами, кроме записи собственно данных, писать ещё и журнал? При ограниченном ресурсе записи? Это явно самоубийственное решение.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.