#c #linux #serial-port #centos #baud-rate
#c #linux #последовательный порт #centos #скорость передачи данных в бодах #c
Вопрос:
Я пытаюсь настроить последовательный порт на centos, но не могу заставить его работать. это код, с которым у меня возникли проблемы.
tcgetattr(idComDev[i], amp;options); // get current settings
printw("default baudrate is %d ", cfgetispeed(amp;options));
cfsetispeed(amp;options, B115200); // set baud rate
cfsetospeed(amp;options, B115200); // set baud rate
tcsetattr(idComDev[i], TCSANOW, amp;options);// save the settings
printw("Seg %d = COM%hd at %d Baudrate",i,CommNo[i], cfgetispeed(amp;options));
Вывод из этого таков: Default baud rate is 4098 Seg0 = COM1 at 4098 Baudrate
.
Почему он находится на отметке 4098? Я нигде не могу найти этот показатель бодрствования.
Если я установлю скорость передачи в бодах на 1800, он скажет, что она равна 10. Если я установлю его на 9600, он скажет, что он равен 13.
Я провел некоторые исследования и обнаружил, что, к сожалению, аппаратное обеспечение не может поддерживать такую высокую скорость передачи данных, но у меня есть Java-программа на том же компьютере, которая коммутирует с тем же устройством, к которому я пытаюсь подключиться. Поэтому я знаю, что этого не может быть.
Кто-нибудь знает, что происходит и как это исправить?
Комментарии:
1. @phresnel это скорость передачи данных в бодах, если вы посмотрите здесь easysw.com /~mike/serial/serial.html затем вы увидите, что при использовании termios всем байдратам предшествует буква B
2. Понятно, у меня было опасение, что вы, возможно, используете расширение компилятора, которое допускает двоичные литералы.
Ответ №1:
B115200
является макросом и расширяется до 0x1002
. Это комбинация двух битов: 0x1000 сигнализирует о том, что это нестандартная скорость (как вы обнаружили), а 0x2 — вторая нестандартная скорость ( B57600
то есть 0x1001
первая нестандартная скорость).
Комментарии:
1. извините, но я не совсем понимаю, как это отвечает на вопрос?
2. О, 0x1002 — это 4098 — это B115200. Вы установили для своего последовательного порта значение B115200. Просто нет проблем, которые нужно исправить.