Цитата(barabek @ Oct 19 2010, 04:12)

На ум приходит только что-то типа связанного списка. Т.е. каждое сообщение имеет структуру: 1. длина. 2. идентификационный номер (ID).3. само сообщение.
Прошивки должны записываться также как и обычное сообщение. Если в сообщении имеется время то ID не нужен, если же нет, то нужен и максимальный ID должен быть как минимум на 1 больше чем максимально возможное количество сообщений, хранящихся в памяти при их минимальной длине. Иначе с поиском будут проблемы.
Обязательно предусмотреть, чтобы при следующей "прокрутке" в нулевой ячейке было начало структуры сообщения. Пусть в этом случае лучше в конце будет не занятое пространство.
Обязательно предусмотреть корректирующий код, иначе можно весь рулон потерять.
Для пущей надежность можно и маркеры использовать. В этом случае уже не так страшны ошибки в чтении. Но с ними предусмотреть соответствующий алгоритм. Где-то видел такой. Принцип следующий. Возьмем за маркер, например, 0x00. Тогда если в сообщении в двоичных полях встречается такое же значение 0x00 заменяем его на какую-либо последовательность, например, 0x00 0xff. Соответственно, при чтении от добавочный 0xff избавляемся. Где-то так.
PS. Кажется, лучше в качестве маркера использовать двухбайтовое значение. Допустим 0x00 0x55
Насчет маркера то, что вы предлагаете, это что-то вроде SLIP-протокола для модема, там как раз используется метод замены одного ключевого символа(то ли стопового, то ли стартового, я не помню) двумя, я уже рассматривал этот вариант, невыгодно с точки зрения экономии памяти. А вот идентификационный номер (ID) тоже неоднозначно, допустим, однобайтовый текущий номер 0xFF, а следующий будет 0, какой последний пакет, а какой первый? Тем более допускается, что при заполнении буфера новые сообщения записываются поверх самых старых, то есть могут наехать на старые, оставив ему маркер. Время используется в формате NTP, как счетчик, при этом вероятность совпадения маркера с меткой времени должна быть ближе к нулю. Должны ведь готовые решения, неужели их нет?