Устанавливается программно при открытии порта, максимальную логично смотреть в даташите на микруху драйвера ибо я чот не помню чтоб она ее сообщала системе
От железа зависит, смотри какая микросхема последовательного порта, вот интернет говорит для компа это Intel 16450, 16550, 16550A, не помню уже, сам проверяй. В микроконтроллере зависит от тактового сигнала. В линуксе только константы, не факт что сработают ибо общие для всего железа.
Никак. В идеале драйвер и железка должны поддерживать все скорости. На практике нужно сверяться с даташитом. Можно даже выставить какую-то скорость, а на практике будет другая, ибо конфигурацией тактовых генераторов именно эта не поддерживается. Лучше осциллографом перепроверить.
Я же не знаю какая железка будет стоять, как пишут универсальный код? И если драйвер не умеет, то внешняя утилита как в Windows скорей всего тоже не поможет.
А если драйвер не принимает константу к примеру B4000000? Как включить скорость 4mb/cek?
почти все стандартные микрухи поддерживают стандартные кратные скорости от 9600 до 115200 - собсно хочешь универсально ограничься этим диапазоном, расширение до 1200-230400 то-же не проблема в большинстве случаев.
если нужны 4 мегабита то 485 неудачный выбор изначально (но работает агада)
никак. универсального кода не существует :) это фикция.
есть код поддерживающий набор некоторого железа, компиляторов, среды и т.д, заложенного при разработке или вкостыленного потом.
пишешь что-то работающее на чем-то (обычно то, что есть под руками), обязательно уведомляешь работодателя об этом, а лучше вписываешь в ТЗ.
апосля, как все заработает, представляешь господину своему на усмотрение.
и только потом перепиливаешь под его нужды светоносных умов сверху. а то так сразу может лопнуть чегонить еще от напруги.
По теме: ядро поддерживает все скорости. Дальше зависит от того с чего и к чему ты обращаешься. Универсального способа нет. Может зависит как от аппаратных возможностей, так и программных (например, частота твоего железа просто не может физически обеспечить нужную скорость обработав при этом очередь других заданий). Смотреть даташит, как минимум, обязательно.
т.е. если в QSerialPort например выставить 4 мегабита ровно, то оно не выдаст ошибку что скорость не может быть установлена?
Однако я видел случаи когда 230400 или 250000 успешно ставилось, а по факту не работало с данной скоростью - это еще одна подляна, которая ждет ТС и пользователей его замечательного ПО. Тут замечу что драйвер и чип поддерживали данные скорости совершенно точно и осцилл подтверждал скорость потока
то оно не выдаст ошибку что скорость не может быть установлена?
Нет, в этом случае оно может вернуть ошибку, если скорость не поддерживается. Но в этом случае придется перебирать все «стандартные» скорости от 300 бод до 4000000 бод (что долго открыть - закрыть). Да и никто не гарантирует результата все-равно.
А ведь существует еще возможность задавать и «нестандартные» скорости, используя кастомный делитель (но оно поддерживается тоже от железки к железке).
Я имел ввиду, что нет какого-то такого АПИ чтобы можно было запросить информацию у порта о поддерживаемых скоростях..
Вот например в винде вроде есть такое АПИ, там скорости битовыми масками кодируются.. Но, это в том случае, если производитель драйвера/железки реализовал эти фичи (вроде как).. Обычно же там идут биты с поддержкой обычных «стандартных» скоростей, типа 9600, 115200 и тп., что по сути ни о чем не говорит.
Однако я видел случаи когда 230400 или 250000 успешно ставилось
Дада, именно! Все зависит от драйвера и железяки.. Т.к. в большинстве случаев никто не заморачивается с обработкой в дровах всех скоростей.. А просто ставят заглушку типа все ОК. Хотя, должны возвращать ошибку. Также, существует же дохрена разных модификаций одних и тех же железяк. Взять тот же Prolific, у них железяка может одной буковкой различаться, а функционал уже другой.. И я без понятия как это в дровах обрабатывается (никак наверно).