Увеличение скорости передачи данных с помощью termios

Используя неканоническую обработку ввода, я читаю последовательные данные, отправляемые на Xbee S2B Pro (ZB) с использованием интерфейса Xbee XBIB-R-Dev с кабелем «DB9-to-USB». Я использую некоторые примеры кода из http://tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html. Проект, в котором я это делаю, - это строго код C, а не C++.

Читая информацию о termios.h на своем ноутбуке под управлением Ubuntu Linux 12.04 LTS (32-разрядная версия — последние обновления), я вижу, что только самая высокая доступная скорость составляет всего 38400 бод (постоянная B38400). Простая замена «#define BAUDRATE» B38400 на более высокую скорость B57600 или выше не будет работать, поскольку она не определена в файлах заголовков. Я получаю сообщение об ошибке, что B57600 не определен.

Мой вопрос в том, есть ли лучший способ или способ обойти это (используя termios), чтобы я мог считывать данные с более высокой скоростью, поскольку Xbee S2B Pro может увеличивать скорость последовательной передачи данных до 1 Мбит / с (спецификация указана на digi. сайт .com).

Спасибо за помощь.

Майк


person M B    schedule 26.12.2013    source источник


Ответы (1)


Не можете ли вы использовать следующее (используя struct termios newtio;, как в примере по вашей ссылке в вопросе)

 cfsetispeed(&newtio, B57600);
 cfsetospeed(&newtio, B57600);

или просто

  cfsetspeed(&options, B57600);

из справочных страниц termios это указывает, что параметр speed_t, передаваемый этим функциям, может принимать значения до B230400. Я также разрабатываю приложения для чтения последовательных портов в Ubuntu 12.04, и описанная выше функция отлично работает для меня.

person mathematician1975    schedule 26.12.2013
comment
На той же странице также цитируется speeds beyond those defined in POSIX.1 (57600 and above). Любая идея, являются ли эти расширенные скорости повсеместными или используются другие имена или числа в других реализациях POSIX? - person doynax; 27.12.2013
comment
@doynax Боюсь, я не знаю. Все, что я знаю, это то, что приведенный выше код отлично работает в моих приложениях, когда мне нужна скорость 57,6 кбит/с и выше. - person mathematician1975; 27.12.2013
comment
Я регулярно использую 115200 бит/с в последовательных приложениях на C. Я не видел ни одной последней версии Linux, которая бы не работала как минимум на 230400. В моем Ubuntu 12.04 (X86_64), B57600, B115200 и т. д. все определены в x86_64. -linux-gnu/bits/termios.h. Я понятия не имею, почему определения в вашей системе ограничены. - person DoxyLover; 27.12.2013
comment
Я неправильно смотрел заголовочные файлы. Я также смог установить скорость передачи данных на 230400 вручную, используя основные AT-команды, используя интерфейс Xbee. По умолчанию 115200 — это самая высокая скорость передачи данных в списке предустановок для Xbee, который я использовал, поэтому мне пришлось вручную определить пользовательскую скорость передачи данных. - person M B; 06.01.2014