Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Циклический буфер переменной длины

Непрочитано 31.10.2010, 16:05  
RY723
Заблокирован
 
Регистрация: 08.08.2007
Сообщений: 2,820
Сказал спасибо: 375
Сказали Спасибо 1,364 раз(а) в 744 сообщении(ях)
RY723 на пути к лучшему
По умолчанию Re: Циклический буфер переменной длины

Извиняюсь. Я имел ввиду пост №8 и EEPROM соответственно. Речь-то шла про кольцевой буфер. А во FLASH это невозможно. Там запись производится страницами. "Кольцо" можно сделать только сегментированным.
Хотя я здесь и не прав. Взять для примера AT45DB161D. Стирание возможно постраничное, а вот про запись - не помню. Но в этом случае ресурс FLASH-памяти гораздо выше чем у EEPROM. И правило соблюдается - снаряд два раза в одно место не попадает. Ведь записи всякий раз другой длины? А если они одиноаковой длины, то можно рассчитать (добавив несколько пустых записей 0xFF), чтобы маркер постоянно смещался, не попадая в одно и тоже место. Емкость этой м/с - около 4000 страниц по 512/528(? не помню уже) байт.
Во всяком случае, там можно заносить данные сначала в буфер (буфера два), а лишь потом переписать во FLASH.
Реклама:
RY723 вне форума  
Непрочитано 31.10.2010, 16:22  
аtаs_stas
Заблокирован
 
Регистрация: 23.08.2010
Сообщений: 540
Сказал спасибо: 20
Сказали Спасибо 93 раз(а) в 78 сообщении(ях)
аtаs_stas на пути к лучшему
По умолчанию Re: Циклический буфер переменной длины

Сообщение от asket76 Посмотреть сообщение
Мне дали задание для микроконтроллера (не важен какой, главное, алгоритм) написать циклический буфер переменной длины, равномерно распределенный по всей памяти (NAND Flash или EEPROM), чтоб исключить перезапись в одну и ту же область памяти из за их ограничения числа записи-стирания.
Посмотрите апликуху от Микрочип "Использование FLASH памяти в качестве EEPROM".
аtаs_stas вне форума  
Непрочитано 31.10.2010, 16:26  
asket76
Частый гость
 
Регистрация: 06.08.2009
Сообщений: 13
Сказал спасибо: 25
Сказали Спасибо 1 раз в 1 сообщении
asket76 на пути к лучшему
По умолчанию Re: Циклический буфер переменной длины

Чтобы снаряд не попадал в одно и то же место, имеет смысл использовать не инвертированный маркер, а ID сообщений с одним маркером, ID двух соседних сообщений сравниваются, и если отличаются больше на единицу, принимаем решение, маркер c большим ID будет головным, а с меньшим ID - хвост, а тот блок, у которого нет маркера, пропускаем, ибо является продолжением предыдущего блока. Сейчас пока EEPROM, но планируется переход на Флеш, чтоб потом не переписывать, целесообразно выбрать грамотный алгоритм.
asket76 вне форума  
Непрочитано 31.10.2010, 19:45  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Циклический буфер переменной длины

Сообщение от RY723 Посмотреть сообщение
Это не совсем точно - наряд два раза в одно место не попадает.
Маркер переписывается ДВА РАЗА. 1 - актуально 2- неактуально. А данные только ОДИН РАЗ. А вот если следующее сообщение накладывать на маркер предыдущего...
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов

Последний раз редактировалось picavr; 31.10.2010 в 19:59.
picavr вне форума  
Непрочитано 31.10.2010, 19:57  
RY723
Заблокирован
 
Регистрация: 08.08.2007
Сообщений: 2,820
Сказал спасибо: 375
Сказали Спасибо 1,364 раз(а) в 744 сообщении(ях)
RY723 на пути к лучшему
По умолчанию Re: Циклический буфер переменной длины

Сообщение от picavr Посмотреть сообщение
Маркер переписывается ДВА РАЗА. 1 - актуально 2- неактуально. А данные только ОДИН РАЗ
Упустил.

Тогда надо иметь два маркера. Один маркер - маркер, второй маркер должен иметь значение 0xFF. Вместо переписывания первого маркера, переписывается маркер со значением 0xFF. Вот тогда рксурс точно не пострадает.
RY723 вне форума  
Непрочитано 31.10.2010, 22:40  
asket76
Частый гость
 
Регистрация: 06.08.2009
Сообщений: 13
Сказал спасибо: 25
Сказали Спасибо 1 раз в 1 сообщении
asket76 на пути к лучшему
По умолчанию Re: Циклический буфер переменной длины

Сообщение от RY723 Посмотреть сообщение
Тогда надо иметь два маркера. Один маркер - маркер, второй маркер должен иметь значение 0xFF. Вместо переписывания первого маркера, переписывается маркер со значением 0xFF. Вот тогда рксурс точно не пострадает.
Но тогда нет гарантии, что значение такого маркера не совпадет с мусором, задача такова, что нужно исключить или свести к минимуму вероятности совпадения маркера с мусором. Предполагается, что данная область памяти может использоваться для промежуточного хранения прошивки..
asket76 вне форума  
Непрочитано 31.10.2010, 22:49  
RY723
Заблокирован
 
Регистрация: 08.08.2007
Сообщений: 2,820
Сказал спасибо: 375
Сказали Спасибо 1,364 раз(а) в 744 сообщении(ях)
RY723 на пути к лучшему
По умолчанию Re: Циклический буфер переменной длины

Сообщение от asket76 Посмотреть сообщение
Но тогда нет гарантии, что значение такого маркера не совпадет с мусором, задача такова, что нужно исключить или свести к минимуму вероятности совпадения маркера с мусором. Предполагается, что данная область памяти может использоваться для промежуточного хранения прошивки..
Ну как нет? Делаете запись пакетом:

Маркер1, Место под маркер два (0xFF), Размер данных, CRC

Этих данных достаточно, чтобы отличить вашу запись от мусора.
При расчёте CRC, заменяйте Маркер2 на 0xFF.

Даже если совпадёт мусор с маркерами, остаются данные по длине и CRC.

Это позволит однозначно идентифицировать данные. А маркеры можете сделать и длиннее. Не обязательно по одному байту. Так от случайного совпадения маркеров с мусором, защита будет ещё сильнее.

Обязательно сделайте так, чтобы исключить возможность попадания нового пакета на старое место. Т.е. количество записей в кольце не должно быть целым, тогда новая запись будет надёжно затирать старую. FLASH перед записью должна стираться. Если затирать не одну страницу перед записью, а допустим, две-три, тогда у вас вообще проблем не будет с поиском. Ищите чистое место и начинаете с "хвоста" искать маркер с проверкой условий целостности данных.

Последний раз редактировалось RY723; 31.10.2010 в 22:59. Причина: Уточнение
RY723 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой длины взять провод-антенну digitest Электроника - это просто 7 12.02.2010 23:03


Часовой пояс GMT +4, время: 12:15.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.