реклама на сайте
подробности

 
 
> Хранение указателя на конец данных в AT45xx DataFlash, Как лучше организовать?
Baser
сообщение Jan 20 2008, 19:22
Сообщение #1


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Прибор должен сохранять лог измеряемых данных в DataFlash 32Мбит в худшем случае каждые 3 секунды по одной или несколько строк из 16 байт. Работа прибора непрерывная с непредсказуемыми перерывами (может вкл./выкл. в любое время с любой частотой). Батарейного питания на плате нет. Срок жизни прибора лет 10 (может и больше smile.gif ).
Где лучше хранить указатель на конец данных и как это все получше организовать?

Посколько DataFlash не позволяет писать меньше страницы в 512 байт, то планирую кешировать данные в буфере. При кешировании указатель будет в ОЗУ. При сохранении страницы во флеш и при вкл/выкл прибора действия могут быть разными. Придумал два варианта:

1. Сохранять указатель в одной ячейке EEPROM AVR только при выкл. прибора, а при вкл. грузить его в ОЗУ и с ним работать.
+ простота алгоритма
- проблема в случае сбоя записи при выкл.: нужно искать конец данных в 32Мбит DataFlash

2. Сохранять указатель в циклическом буфере ячеек EEPROM не только при выкл. прибора, но и при записи страницы во флеш.
Циклический буфер указателей нужен из-за малого ресурса перезаписи у EEPROM.
- сложности с организацией циклического буфера указателей
+ всегда можно будет найти предыдущий указатель и конец данных.

Какие есть еще варианты и соображения?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Baser
сообщение Jan 20 2008, 22:02
Сообщение #2


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(Alex B._ @ Jan 20 2008, 23:18) *
...(не допускать, чтобы середина записи попадала на границу страницы) - а это потерянный объем...

Второй момент - если уже пошло кольцо ...

У меня строки по 16 байт, кратно размеру страницы, проблем тут не вижу.
Реализация кольцевого буфера тоже не вызывает вопросов, такое делал, ничего сложного - два указателя, один догоняет другого smile.gif
Вопрос не в этом, а в том, где и как сохранять эти указатели при вкл/выкл прибора и нужно ли их вообще сохранять - может быть проще каждый раз искать границы данных "роясь" во флешке.

Цитата(singlskv @ Jan 20 2008, 23:24) *
Скорость поиска в 32Мбит всего лишь в 4 раза дольше чем в 2Мбит флешке...
Тока при производстве нужно стирать всю флешку...

Я понимаю, что можно искать, например, методом "деления отрезка пополам" и кол-во шагов при этом будет не очень большим. НО: это все же ВНЕШНЯЯ SPI флешка, доступ к ней довольно длительный sad.gif
Go to the top of the page
 
+Quote Post
Alex B._
сообщение Jan 21 2008, 08:02
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



Цитата(Baser @ Jan 21 2008, 01:02) *
У меня строки по 16 байт, кратно размеру страницы, проблем тут не вижу.
Реализация кольцевого буфера тоже не вызывает вопросов, такое делал, ничего сложного - два указателя, один догоняет другого smile.gif
Вопрос не в этом, а в том, где и как сохранять эти указатели при вкл/выкл прибора и нужно ли их вообще сохранять

вы знаете, что такое связанный список? в каждой записи хранится указатель на предыдущую и указатель на последующую запись. У головы списка указатель на предыдущую равен 0, у хвоста - указатель на следующую равен 0. Таким образом перебором всех записей можно найти первую и последнюю. НО! для реализации лога во флешке такой вариант не надежен - если самые старые записи начали затираться новыми, при сохранении последней записи нужно модифицировать следующую (которая станет головой списка). Если вы при этом рубанется питание, а голова находится в следующем секторе и вы не успели его модифицировать, гарантированное начало списка вы скорей всего не найдете.
Поэтому лучше каждой записи присваивать порядковый номер, на единицу больший предыдущей. Диапазон должен быть больше максимального количества записей, чтобы не было двойного переполнения.
В этом случае всегда можно найти начало и конец списка при любых конфликтах. Естественно, если требуется удалять записи в середине списка такой метод не прокатит. Опять же, сложно будет организовать чтение произвольной записи, но для лога этого обычно не нужно.
Хранить указатели на начало и конец где-то в другом месте не разумно. А поиск действительно делается в течении ~1-2 секунд при включении устройства. У меня еще каждая запись имеет CRC, поэтому чуть дольше. И не стоит закладываться на фиксированный размер записи, сделайте универсальное решение.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Baser   Хранение указателя на конец данных в AT45xx DataFlash   Jan 20 2008, 19:22
- - Aesthete Animus   2Baser Первый вариант я бы рассматривать не стал,...   Jan 20 2008, 20:06
- - Rst7   Давно использую в приборе для архива 45DB021. Тоже...   Jan 20 2008, 20:06
- - Baser   Цитата(Aesthete Animus @ Jan 20 2008, 22...   Jan 20 2008, 20:59
|- - Alex B._   со связанным списком сложно получится - нужно буде...   Jan 20 2008, 21:18
|- - singlskv   Цитата(Baser @ Jan 20 2008, 23:59) Объемы...   Jan 20 2008, 21:24
|- - DenisN   Цитата(Baser @ Jan 20 2008, 22:59) Это я ...   Jan 21 2008, 18:18
- - defunct   Можно поставить рядышком NVRAM (с RTC) и хранить в...   Jan 21 2008, 00:29
- - Rst7   ЦитатаОбъемы флешки у вас не те. В 2Мбитах можно и...   Jan 21 2008, 06:25
- - proba   32Mb состоит из 4096 секторов, следовательно для п...   Jan 21 2008, 08:55
- - Baser   Цитата(defunct @ Jan 21 2008, 02:29) NVR...   Jan 21 2008, 09:25
|- - Alex B._   Цитата(Baser @ Jan 21 2008, 12:25) А чем ...   Jan 21 2008, 11:01
|- - defunct   Цитата(Baser @ Jan 21 2008, 12:25) А чем ...   Jan 21 2008, 11:20
- - Rst7   Цитатадля поиска свободного сектора требуется чтен...   Jan 21 2008, 09:31
- - Rst7   ЦитатаВариант с пустым сектором как маркером конца...   Jan 21 2008, 11:21
|- - alcosar   Цитата(Rst7 @ Jan 21 2008, 15:21) Вы види...   Jan 21 2008, 11:46
- - Rst7   ЦитатаА что будет, если ErasePage из-за пропадания...   Jan 21 2008, 11:56
- - Baser   Цитата(Alex B._ @ Jan 21 2008, 13:01) С и...   Jan 21 2008, 12:03
|- - defunct   Цитата(Baser @ Jan 21 2008, 15:03) Вашу м...   Jan 21 2008, 12:37
- - Rst7   ЦитатаВ EEPROM никто эти указатели не сохраняет? ...   Jan 21 2008, 12:16
- - GDI   А я в свое время хранил адрес следующей записи(или...   Jan 21 2008, 13:08
- - Rst7   ЦитатаА я в свое время Вот и у меня так было (тол...   Jan 21 2008, 13:49
- - Baser   to defunct: все понял, спасибо. Наконец-то до мен...   Jan 21 2008, 20:32


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 08:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01558 секунд с 7
ELECTRONIX ©2004-2016