Я говорю с виртуальным последовательным портом (чип FTDI), используя библиотеку Boost asio :: serial_port. Я хотел бы использовать аппаратное управление потоком (то есть RTS / CTS), но я не могу найти много документации о том, как использовать его с Boost. У меня есть код:
serialPort.set_option(boost::asio::serial_port::
flow_control(boost::asio::serial_port::flow_control::hardware));
С этой линией программа не запустится. Это говорит:
libc++abi.dylib: terminate called throwing an exception
Abort trap: 6
Если я изменю ...flow_control::hardware
в ...flow_control::software
или же ...flow_control::none
Последовательный порт работает нормально (но без аппаратного управления потоком, очевидно). Я потратил немало времени на поиск какой-либо документации по этому вопросу, но не нашел ее. Кто-нибудь знает, как использовать управление потоком с Boost, или знает, где это задокументировано? Я использую Boost от Fink на Mac OS 10.8.2. Спасибо!
Это старая ссылка, но, учитывая, что это был самый популярный поисковый элемент в Google для двух разных поисков серийных данных, я чувствовал, что нужен ответ.
Сама линия не проблема. Возможно, проблема вызвана исключением из-за неправильного вызова функции.
Верьте или нет, вам нужно сначала открыть порт, а затем установить управление потоком. Вышеуказанные строки не дают полной картины того, когда эти строки вызываются относительно других строк. Поместите setoption на after, когда порт открыт, и он должен работать.
Существует также версия set_option, которая принимает boost :: system_error в качестве параметра. Эта версия вернет ошибку, если она не работает по какой-либо причине. Если вы не используете версию с параметром system_error, то вам следует обернуть функцию, которая может и будет генерировать исключения в блоке try / catch.
Кроме того, завершение происходит из-за необработанного исключения (проблема кодирования), поэтому загадочное исключение при завершении. Если вы обрабатываете исключение, само исключение будет указывать на проблему с последовательной конфигурацией (проблему во время выполнения), которая может быть из-за отсутствия разрешения на его установку или из-за того, что порт не открыт, поэтому проверка доступности RTS не удалась и т. Д.
Других решений пока нет …