![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: -1 Всего: 3 |
Кто знает, как проинициализировать com порт на работу с нестандартной частотой? Не CBR_115200 а, например, 100000.
Делал через DCB dcb; dcb.BaudRate = 100000, но функция SetCommState(m_hComm, &dcb); возвращает 0, что говорит о том, что на такой скорости порт не проинициализирован. -------------------- я не гольфист - я хоккеист |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
Нестандартную скорость задать нельзя, т.к. она определяется целочисленным делителем.
нельзя разделить 115200 на целое число так, чтобы получилось 100000. |
|||
|
||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: -1 Всего: 3 |
очень это плохо. Это особенности WIndows?
-------------------- я не гольфист - я хоккеист |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
Насколько мне известно, это технологическая особенность COM порта.
То есть от операционной системы не зависит. |
|||
|
||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: -1 Всего: 3 |
а вот рядом со мной программируют самодельную плату в которую я буду посылать запросы, так вот там нет никакой разницы с какой скоростью вести передачу, так что это не оособенности порта, а что то другое... А ведь очень бы хотелось попробовать поработать с нестандартной скоростью
Добавлено @ 12:04 самодельную - неправильно выразился, собственной разработки. -------------------- я не гольфист - я хоккеист |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
я работал с несколькими процессорами, в том числе и нестандартными ни разу не встретил COM-порта, скорость которого не задавалась бы делителем какой-то внешней на самом деле, весь вопрос в том, какая частота подается COM-порт и используется для деления в стандартном варианте - 115200, насколько я члышал, только для совместимости в некоторых и до мегабитов бывает (кстати, был у нас переходничок один - USB-COM - полволял работать на мегабите) так вот... когда заказывается скорость для COM-порта, выбирается ближайший делитель чаще всего получается, что скорость отличается от той, которая нужна все зависит от этого отклонения если основная частота значительно больше, то скорость может быть задана довольно точно если нужная частота приближается к основной - начинаются проблемы например: заказано 100000, а основная - 115200 ближайший делитель 1, погрешность 15% - плохо а вот если заказать 10000 (в 10 раз меньше), ближайший делитель 12, погрешность 4% - уже лучше с другой стороны на основной частоте 1М оба варианта давали бы хороший результат небольшие отклонения частоты допустимы, но когда они првышают некоторый порог, просто нет смысла настраивать COM-порт на эту частоту - ничего работать не будет, поэтому, наверное, Windows и говорит, что нельзя... -------------------- qqq |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
Ей-то конечно все равно, не все равно ком-порту.
Его возможности ограничены делителем. Можно конечно попробовать применять какие-нить хитрые делители, но конечный набор все равно фиксирован. И это именно набор, а не произвольное число. Если предельная скорость для ком порта установлена в 921600, то конечный набор значительно больше.
Она всегда проверяет указанный бадрейт. Если никакой делитель не подходит, то ошибка. |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
о... кстати, нашел похожую темку...
http://forum.vingrad.ru/index.php?showtopic=35134&hl=com Добавлено @ 12:26
насколько мне известно, это - именно произволное число -------------------- qqq |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
Вобщем-то да. Просто число должно быть целым. Если в качестве предела считать 300 бод (хотя, насколько я помню, это даже не если), то в итоге получаем конечный набор допустимых делителей. Я это имел ввиду. Кроме того, набор все равно ограничен количеством бит в делителе |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
maxim1000 У меня со стопами не возникло проблем. Проблема в том, что порт не ХОЧЕТ инициализироваться на нестандартной частоте. SetCommState возвращает 0.
Snowy Очевидно, что у ком порта нет ограничения. Ограничен WINAPI!? Так и чего делать? сухари что-ли посушить? |
|||
|
||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: -1 Всего: 3 |
maxim1000 У меня со стопами не возникло проблем. Проблема в том, что порт не ХОЧЕТ инициализироваться на нестандартной частоте. SetCommState возвращает 0.
Snowy Очевидно, что у ком порта нет ограничения. Ограничен WINAPI!? Так и чего делать? сухари что-ли посушить? Добавлено @ 14:19 Кто то знает где и как задать вопрос в микрософт? -------------------- я не гольфист - я хоккеист |
|||
|
||||
| Snowy |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
Опять 25...
Ну-ну. Я съем свою шляпу, если ты выставишь ком порту 100000 не изобретая свою UART. В DOS тоже нельзя. А там это делается напрямую обращаясь к порту. По линуксам я не спец, но уверен, что и там та же картина. Добавлено @ 14:25
А ты денежки за винду заплатил? Или ты подписчик MSDN? Или оффициальный партнер M$? |
||||||
|
|||||||
| maxim1000 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
там дальше в теме тоже обсуждается процесс задания частоты для COM-порта и допустимые погрешности...
очевидные вещи - опасная штука а откуда это очевидно? Это сообщение отредактировал(а) maxim1000 - 9.9.2005, 14:30 -------------------- qqq |
||||
|
|||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
Не знаю как в винде, тут я использую стандартные скорости.
Но большей частью я как раз программирую микроконтроллеры, где скорость порта я задаю сам с помощью одного из таймеров. А число задаваемое в таймер, я считаю, исходя из частоты кварца. И получается как раз что мне надо в моем устройстве подстаиваться под стандартную скорость порта, ну никак не в винде под нестндартную. Почему бы вашим программистам вашей платы не сделать все так, как это принято, а не извращаться подобным образом? Для чего вам нестандартные скорости? Стоит ли это того? -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| takedo |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: -1 Всего: 3 |
Dreamer_0x01
А для того, чтобы защитить данные. Вообще - то разговор у нас такой: "А не ху..о было бы сделать на нестрадартной частоте", - "Да, было бы хорошо, если в Винде можно." Snowy
Да, а если было бы и нет, это поменяет адрес по которому нужно обратиться??? Добавлено @ 06:48 Snowy
А вот в дос то как-раз можно! Но скорее всего, что шляпу тебе есть не придется. Вот все-таки узнать бы куда же послать вопрос в микрософт... -------------------- я не гольфист - я хоккеист |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |