LINUX.ORG.RU

Устанавливается программно при открытии порта, максимальную логично смотреть в даташите на микруху драйвера ибо я чот не помню чтоб она ее сообщала системе

rukez ★★★★
()

От железа зависит, смотри какая микросхема последовательного порта, вот интернет говорит для компа это Intel 16450, 16550, 16550A, не помню уже, сам проверяй. В микроконтроллере зависит от тактового сигнала. В линуксе только константы, не факт что сработают ибо общие для всего железа.

ilovewindows ★★★★★
()

А как пишут код, который должен работать на множестве микросхем? Хотя бы название микросхемы драйвер может сообщить через fctl?

Djanik
() автор топика

Никак. В идеале драйвер и железка должны поддерживать все скорости. На практике нужно сверяться с даташитом. Можно даже выставить какую-то скорость, а на практике будет другая, ибо конфигурацией тактовых генераторов именно эта не поддерживается. Лучше осциллографом перепроверить.

Harald ★★★★★
()
Ответ на: комментарий от Harald

Я же не знаю какая железка будет стоять, как пишут универсальный код? И если драйвер не умеет, то внешняя утилита как в Windows скорей всего тоже не поможет. А если драйвер не принимает константу к примеру B4000000? Как включить скорость 4mb/cek?

Djanik
() автор топика
Ответ на: комментарий от Djanik

почти все стандартные микрухи поддерживают стандартные кратные скорости от 9600 до 115200 - собсно хочешь универсально ограничься этим диапазоном, расширение до 1200-230400 то-же не проблема в большинстве случаев.
если нужны 4 мегабита то 485 неудачный выбор изначально (но работает агада)

rukez ★★★★
()
Ответ на: комментарий от Djanik

выставляй требования к железу тогда для своего софта, должно поддерживать такую-то скорость

Harald ★★★★★
()
Ответ на: комментарий от Djanik

Универсальный код выглядит безобразно, например так

#ifdef __CYGWIN__
	newtio.c_cflag = 0x830;
#else  
	newtio.c_cflag = BAUDRATE |  CS8 | CLOCAL | CREAD;
#endif

Это классическая фиксированная скорость в 9600 в которую не менее классический cygwin не может без бубна.

ilovewindows ★★★★★
()
Ответ на: комментарий от Djanik

никак. универсального кода не существует :) это фикция.
есть код поддерживающий набор некоторого железа, компиляторов, среды и т.д, заложенного при разработке или вкостыленного потом.
пишешь что-то работающее на чем-то (обычно то, что есть под руками), обязательно уведомляешь работодателя об этом, а лучше вписываешь в ТЗ.
апосля, как все заработает, представляешь господину своему на усмотрение.
и только потом перепиливаешь под его нужды светоносных умов сверху. а то так сразу может лопнуть чегонить еще от напруги.

pfg ★★★★★
()

По теме: ядро поддерживает все скорости. Дальше зависит от того с чего и к чему ты обращаешься. Универсального способа нет. Может зависит как от аппаратных возможностей, так и программных (например, частота твоего железа просто не может физически обеспечить нужную скорость обработав при этом очередь других заданий). Смотреть даташит, как минимум, обязательно.

anonymous
()
Ответ на: комментарий от kuzulis

т.е. если в QSerialPort например выставить 4 мегабита ровно, то оно не выдаст ошибку что скорость не может быть установлена?

Однако я видел случаи когда 230400 или 250000 успешно ставилось, а по факту не работало с данной скоростью - это еще одна подляна, которая ждет ТС и пользователей его замечательного ПО. Тут замечу что драйвер и чип поддерживали данные скорости совершенно точно и осцилл подтверждал скорость потока

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 2)
Ответ на: комментарий от I-Love-Microsoft

то оно не выдаст ошибку что скорость не может быть установлена?

Нет, в этом случае оно может вернуть ошибку, если скорость не поддерживается. Но в этом случае придется перебирать все «стандартные» скорости от 300 бод до 4000000 бод (что долго открыть - закрыть). Да и никто не гарантирует результата все-равно.

А ведь существует еще возможность задавать и «нестандартные» скорости, используя кастомный делитель (но оно поддерживается тоже от железки к железке).

Я имел ввиду, что нет какого-то такого АПИ чтобы можно было запросить информацию у порта о поддерживаемых скоростях..

Вот например в винде вроде есть такое АПИ, там скорости битовыми масками кодируются.. Но, это в том случае, если производитель драйвера/железки реализовал эти фичи (вроде как).. Обычно же там идут биты с поддержкой обычных «стандартных» скоростей, типа 9600, 115200 и тп., что по сути ни о чем не говорит.

Однако я видел случаи когда 230400 или 250000 успешно ставилось

Дада, именно! Все зависит от драйвера и железяки.. Т.к. в большинстве случаев никто не заморачивается с обработкой в дровах всех скоростей.. А просто ставят заглушку типа все ОК. Хотя, должны возвращать ошибку. Также, существует же дохрена разных модификаций одних и тех же железяк. Взять тот же Prolific, у них железяка может одной буковкой различаться, а функционал уже другой.. И я без понятия как это в дровах обрабатывается (никак наверно).

kuzulis ★★
()
Последнее исправление: kuzulis (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.