Вверх ↑
Разработчик
Ответов: 26315
Рейтинг: 2146
#1: 2010-01-15 14:16:31 ЛС | профиль | цитата
Dilma писал(а):
необходимо в своей схеме накапливать строку, после чего уже искать в ней последовательность длинною в 18 байт с началом 85, 252

Не надо у себя ничего накапливать, оно и так в буфере висит. Достаточно считать 18 байт до пустого символа, проверить ее на валидность и пропустить дальше или забраковать. У меня похожая система, и не на один канал, уже три года тарахтит и никаких рассинхронизаций я не наблюдал. С пакетами история похожая, надо считать все 5 пакетов, проверить валидность и дальше по теме. Сложность в данном случае, тут только в том, что если накапливать инфу в буфере FIFO, то нет никакой гарантии, что у нас не обрежется конец посылки, те, попадет нечетное количество кадров, тогда кусок последней посылки обратно уже в буфер не вернешь и его надо сохранять у себя, а к нему дальше уже приклеивать данные, это потребует усложненния контроля длины оставшегося массива после обработки кадра. Самое простое, это не допускать чтения в FIFO больше, чем длина кадра, тогда появиться гарантия, что следующий кадр не обрежется. В данном случае, делается, как описано ниже
------------ Дoбавленo в 14.22:
HikeR писал(а):
по таймеру раз в 50мс (точнее не нужно)

А вот с эти я не согласен, для нормальной синхронизации по пустому символу читать надо быстрее, нежели устройство подает свои данные, но медленне, чем сама посылка, тогда гарантировано будут пустые символы на выходе и ничего никуда не пропадет
------------ Дoбавленo в 14.26:
Если пытаться читать по 50 мсек, то получится, что за это время устройство выдаст 2,5 кадра информации (вот откуда и получается, что попадаем, где-то, в середину, и прет рассинхронизация)

HikeR, короче, тебе надо менять концепцию схемы, иначе -- ничего у тебя не получится
карма: 22

0