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

 
 
> помогите разобраться с проектом
asket
сообщение Oct 18 2010, 17:23
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 24-08-06
Из: Москва
Пользователь №: 19 809



Мне дали задание написать для МК (микроконтроллера) циклический буфер для log-сообщений переменной длины (туда входят как двоичная так и текстовая информация), которые будут записываться последовательно во внешнюю память EEPROM или в худшем случае FLASH-память, и при этом после включения питания МК должен восстановить указатели на сообщения, но ту же область памяти можно использовать как для промежуточного хранения прошивки, а после перепрошивки МК должен правильно распознать, что там лежит мусор и переинициализировать указатели. Как это лучше сделать? Есть варианты: 1. использовать ячейки постоянной длины типа массива ссобщений фиксированной длины, невыгодно, так как длина сообщений может варьироваться в больших пределах, да и неэкономно на флешке маленького объема. 2. использование маркера тоже не понятно, как различить где начало и конец, а где наехало новое сообщение. Вообщем то, нужно чтоб на одну и ту же область памяти не записывалось много раз, а равномерно распределялось по всей области памяти. Нужен совет, или ссылочку на какое-нибудь готовое решение. Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
barabek
сообщение Oct 19 2010, 00:12
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



 На ум приходит только что-то типа связанного списка. Т.е. каждое сообщение имеет структуру: 1. длина. 2. идентификационный номер (ID).3. само сообщение. 

Прошивки должны записываться также как и обычное сообщение. Если в сообщении имеется время то ID не нужен, если же нет, то нужен и максимальный ID должен быть как минимум на 1 больше чем максимально возможное количество сообщений, хранящихся в памяти при их минимальной длине. Иначе с поиском будут проблемы.

Обязательно предусмотреть, чтобы при следующей "прокрутке" в нулевой ячейке было начало структуры сообщения. Пусть в этом случае лучше в конце будет не занятое пространство. 

Обязательно предусмотреть корректирующий код, иначе можно весь рулон потерять.

Для пущей надежность можно и маркеры использовать.  В этом случае уже не так страшны ошибки в чтении. Но с ними предусмотреть соответствующий алгоритм. Где-то видел такой. Принцип следующий. Возьмем за маркер, например, 0x00. Тогда если в сообщении в двоичных полях встречается такое же значение 0x00 заменяем его на какую-либо последовательность, например, 0x00 0xff. Соответственно, при чтении от добавочный 0xff избавляемся. Где-то так.

PS. Кажется, лучше в качестве маркера использовать двухбайтовое значение. Допустим 0x00 0x55
Go to the top of the page
 
+Quote Post



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

 


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


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