Здравствуйте. Организую прием данных с устройства. Устройство отправляет данные, упакованные в виде:
0xff - заголовок
0x00 - идентификатор устройства
0x06 - длина сообщения
0x00 - дата0
0x00 - дата1
0x00 - дата2
0x00 - дата3
0x00 - дата4
0x?? - контрольная сумма
Принимаю на компьютер под windows. Данные приходят с частотой 100 Гц.
Сейчас сделано так:
1. Циклический буфер наполняется данными с UART
2. Раз в 5мс если в буфере есть новые данные, они отправляются на расшифровку.
3. Там находится по очереди ff, 00, и т.д.
4. Проверяется crc
5. Если неуспешно, то машина сбрасывается до пункта 3
результат: 80% времени сумма не совпадает, потому что сообщения накладываются друг на друга. Как это побороть?
Пакетное общение по UART
- Реклама
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: Пакетное общение по UART
Данные выгребать почаще и побыстреее
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Re: Пакетное общение по UART
[uquote="Goodefine",url="/forum/viewtopic.php?p=3341648#p3341648"]Данные выгребать почаще и побыстреее[/uquote]
Данные выгребаются быстро.
Более 11 байт в буфере не лежит
Данные выгребаются быстро.
Более 11 байт в буфере не лежит
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: Пакетное общение по UART
[uquote="FireProoF",url="/forum/viewtopic.php?p=3341656#p3341656"]Данные выгребаются быстро.[/uquote]
А как насчет второго условия? Тогда гребите почаще, или передавайте пореже
А как насчет второго условия? Тогда гребите почаще, или передавайте пореже
10мсДанные приходят с частотой 100 Гц.
Это у вас таймер тикает 5мс, винда ни разу не система реального времени, почитайте какие лаги могут быть. Да и хоть якобы в два раза быстрее при асинхронном опросе - это на грани фола, в итоге имеете что имеете - результат закономерен2. Раз в 5мс если в буфере есть новые данные, они отправляются на расшифровку.
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Re: Пакетное общение по UART
Сейчас мне подсказали вот такую схему расшифровки данных.
Смысл в том, что есть заголовок 0xFF, который может встретится среди пакета как данные. Отсюда и отказы моей машины состояний.
Смысл её в том, что находится пакет не побайтно, а целиком. При этом данные, не прошедшие проверку, не стираются.
Может кто что сказать за эту схему?
Смысл в том, что есть заголовок 0xFF, который может встретится среди пакета как данные. Отсюда и отказы моей машины состояний.
Смысл её в том, что находится пакет не побайтно, а целиком. При этом данные, не прошедшие проверку, не стираются.
Может кто что сказать за эту схему?
- Реклама
Re: Пакетное общение по UART
Буфер заведомо побольше для начала, чтобы убедиться что индексы головы и хвоста нормально с приёмом обработкой синхронизируются. Перед добавлением данных в буффер проверять не догнала-ли голова хвост. Иметь ввиду, что буффер после первого оборота заполнен уже обработанными данными - и не высовываться при разборе ненароком за пределы голова-хвост. Может эти 80% и являются франкенштейнами, собранными из кусков разных фреймов.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: Пакетное общение по UART
[uquote="FireProoF",url="/forum/viewtopic.php?p=3342067#p3342067"]Смысл в том, что есть заголовок 0xFF, который может встретится среди пакета как данные. Отсюда и отказы моей машины состояний.[/uquote]
Чтобы не придумывать очередной велосипед, почитайте про байт-стаффинг, например, здесь хорошо описан. Да и сам протокол вполне себе юзабельный.
Чтобы не придумывать очередной велосипед, почитайте про байт-стаффинг, например, здесь хорошо описан. Да и сам протокол вполне себе юзабельный.
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Re: Пакетное общение по UART
Дело в том что протокол уже поменять нельзя (


