Всем привет. Подскажите простое решение как отлавливать пакеты. Скорость потока 38400. Пакеты идут короткие, примерно по 40 байт (около 1мс) с интервалом в 5 мс. Маркера начала-конца нет, данные - любые байты. Соответственно, конец пакета отлавливается по межпакетной паузе и затем из буфера вытягиваются данные. Так вот вопрос: как отловить межпакетную паузу? Плата BluePill STM32Duino.
По прерыванию на получение байта пишете его в буфер, и каждый раз перезапускаете таймер на 2 мс допустим. По срабатыванию таймера читаете пакет и очищаете буфер.
Так и планировал, кроме записи в буфер - Serial имеет свой буфер. Думал, может есть наследник сериала с уже готовым функционалом таймаута.
Буфер сериал как раз и заполняется по прерыванию. Если вы пишете свое прерывание, то придется и свой буфер иметь. Или скопировать код из сериала, по крайней мере.
Так вроде serialEvent это есть юзерское прерывание на принятый байт, которое не отменяет укладку этого байта в буфер сериала. Осталось в нем заводить таймер на таймаут.
Нет, это не прерывание. Это просто функция, которая вызывается после лупа, если буфер не пуст. А значит будет вызываться постоянно. В авр-ардуино так, по крайней мере.
О, таки да, посмотрел в исходниках. Ошибался, значит. Я думал, что ардуинщики сделали нормальный колбек по прерыванию приема байта. Получается, что я теперь должен задублировать функционал сериала. PS В стмках такого нет, только в аврках.