Распознавание POSIX-прочитанных пауз в диапазоне микросекунд - PullRequest
2 голосов
/ 06 октября 2011

Мне нужно реализовать протокол J1708 в C ++ / Linux. Я хочу реализовать это полностью в пользовательском пространстве, но я не знаю, возможно ли это.

Проблема в том, что сообщения разделяются только по битам. Битовое время соответствует скорости передачи: 1/baudrate и находится на J1708 со скоростью передачи 9600 бит / с примерно 104,17 микросекунд. Каждое сообщение в этом протоколе состоит из символов, которые разделены 2 битами (208,34us) - так называемое «межсимвольное битовое время». Сообщение состоит из неопределенного количества символов и перезаписывается / завершается, если есть пауза в 10 битов (1041,7us).

Моя идея - читать через интерфейс терминала POSIX в байтах режима блокировки и считать время между распознаванием конца сообщения. Есть ли шанс реализовать это с моим подходом или у кого-нибудь есть идея получше?

SAE J1708 ссылка: http://read.pudn.com/downloads133/ebook/567787/saej1708v002.pdf

1 Ответ

2 голосов
/ 06 октября 2011

Это очень зависит от оборудования!Можете ли вы гарантировать, что:

  • ваш UART не находится в режиме FIFO.Если это так, то несколько символов будут буферизироваться аппаратными средствами, так что вы можете попрощаться с вашим предположением о времени.

  • Никакая другая задача (пользовательское пространство или ядро) не прервет ваше чтение и последнийболее 1 мс?

  • Каждый символ приведет к другому событию чтения?Это похоже на первое предположение (без аппаратного FIFO), но на стороне водителя.

Учитывая медленную скорость передачи данных, возможно, вы можете достичь 1 и 3.

Iдумаю, что реализовать это с ОС, такой как linux, невозможно или очень неэффективно (т. е. вы тратите все свое время на обработку аппаратного обеспечения).

Этот тип «протокола» лучше обрабатывается ПЛИС или микроконтроллером.То есть с помощью демонстрационной платы pic, декодируйте ваши сообщения на плате PIC и отправляйте их на ваш процессор linux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...