Обработка потока по УАРТ

Тема в разделе "Проводная и беспроводная связь", создана пользователем sslobodyan, 12 май 2017.

  1. sslobodyan

    sslobodyan Гик

    Всем привет.
    Подскажите простое решение как отлавливать пакеты. Скорость потока 38400. Пакеты идут короткие, примерно по 40 байт (около 1мс) с интервалом в 5 мс. Маркера начала-конца нет, данные - любые байты. Соответственно, конец пакета отлавливается по межпакетной паузе и затем из буфера вытягиваются данные.
    Так вот вопрос: как отловить межпакетную паузу? Плата BluePill STM32Duino.
     
  2. rkit

    rkit Гуру

    По прерыванию на получение байта пишете его в буфер, и каждый раз перезапускаете таймер на 2 мс допустим. По срабатыванию таймера читаете пакет и очищаете буфер.
     
    sslobodyan нравится это.
  3. sslobodyan

    sslobodyan Гик

    Так и планировал, кроме записи в буфер - Serial имеет свой буфер. Думал, может есть наследник сериала с уже готовым функционалом таймаута.
     
  4. rkit

    rkit Гуру

    Буфер сериал как раз и заполняется по прерыванию. Если вы пишете свое прерывание, то придется и свой буфер иметь. Или скопировать код из сериала, по крайней мере.
     
  5. issaom

    issaom Гуру

    А длинна пакетов каждый раз разная ?
     
  6. sslobodyan

    sslobodyan Гик

    Так вроде serialEvent это есть юзерское прерывание на принятый байт, которое не отменяет укладку этого байта в буфер сериала. Осталось в нем заводить таймер на таймаут.
     
  7. sslobodyan

    sslobodyan Гик

    Разная и без заголовка
     
  8. rkit

    rkit Гуру

    Нет, это не прерывание. Это просто функция, которая вызывается после лупа, если буфер не пуст. А значит будет вызываться постоянно. В авр-ардуино так, по крайней мере.
     
    sslobodyan нравится это.
  9. sslobodyan

    sslobodyan Гик

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

    PS В стмках такого нет, только в аврках.
     
  10. sslobodyan

    sslobodyan Гик

    Придется править ядро для стмок. Иначе юзерское прерывание не получить.