|
RS-232 на скоростях 115200 и х2 |
|
|
|
 |
Ответов
(15 - 29)
|
Jul 3 2015, 06:43
|
Местный
  
Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315

|
Цитата Даже если сформировать массив из 11520 байт и одной посылкой отправить с СОМ-порт, то все равно между передаваемыми байтами будут некоторые временные интервалы. В зависимости от железа может составлять от 1 до 4-х битовых интервалов, без учета прочих временных задержек.
--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
|
|
|
|
|
Jul 3 2015, 07:32
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Abrams @ Jul 3 2015, 12:38)  Даже если сформировать массив из 11520 байт и одной посылкой отправить с СОМ-порт, то все равно между передаваемыми байтами будут некоторые временные интервалы. Ню-ню... с чего бы это? Сказки рассказываете. Интересно почему это у меня тогда получается между моим виндовым приложением и устройством получать 11520 б/сек?  Осциллограф развеет Ваши заблуждения. Цитата(редактор @ Jul 3 2015, 12:43)  В зависимости от железа может составлять от 1 до 4-х битовых интервалов, без учета прочих временных задержек. А ещё - в зависимости от фаз луны. А скорее - кривости рук кодера.
|
|
|
|
|
Jul 5 2015, 13:56
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 16-02-11
Пользователь №: 63 037

|
Жаль что никто не может внятно ответить кто виноват и как быть. Какая же все таки скорость возможна при описанных условиях? 400 байт/с это же явно очень мало.
|
|
|
|
|
Jul 5 2015, 14:27
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 16-02-11
Пользователь №: 63 037

|
Zltio, ну вот вы скажите, сколько реально получить скорость при описанной ситуации?
|
|
|
|
|
Jul 5 2015, 15:06
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(rf_pcb @ Jul 5 2015, 17:27)  Zltio, ну вот вы скажите, сколько реально получить скорость при описанной ситуации? Неизвестны условия работы, так что неизвестен результат. Если пользоваться на незагруженной машине и компилировать с помощью граммотно написанных примочек (напроимер, для C++Билдера встроенные либы не годятся, нужно внешние подключать) - то при передаче пакета увидете 115200. Да и то, все может упереться в размер аппаратного буфера порта. При передаче отдельных байт- скорее всего, увиденные Вами 200-400 байт в секунду и будут пределом, зависит от сотни причин.
|
|
|
|
|
Jul 5 2015, 18:30
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 16-02-11
Пользователь №: 63 037

|
Ситуация понятна. Изначально я ориентировался на опубликованные скорости, считая, что могу получить через порт требуемое количество ОБРАЩЕНИЙ (запись-чтение) за секунду с помощью программы, скомпилированной в Builder C++. Задача именно в этом и состоит - получить максимально возможное количество ОБРАЩЕНИЙ за секунду через порт посредством программных средств верхнего уровня. Понятно, что драйвера и система Windows съели ресурс времени, потому я получаю с помощью своей программы совершенно смешное количество обращений через порт. Я не такой специалист по железу, как некоторые местные гуру-пупки, программирую в Builder, потому не знаю многих тонкостей железа. Ясно одно - реально расчёт количества ОБРАЩЕНИЙ за секунду через порт нельзя вести по стандартной формуле, которая дана в популярной литературе. И для достижения заявленных характеристик порта для программы из Builder требуется "чистый", не загруженный Windows, и ещё чёрт знает чего... Интересно, а в Линуксе такая же песня, как и в Windows, по моей задаче?
|
|
|
|
|
Jul 6 2015, 05:07
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Ruslan1 @ Jul 5 2015, 21:06)  передаче пакета[/b] увидете 115200. Да и то, все может упереться в размер аппаратного буфера порта. Никуда не упрётся. Поднимаете хоть до 921600 бод - при грамотной работе через WinAPI без всяких левых библиотек запросто получается скорость 92160 б/сек. Обмен с функциями WinAPI конечно в отдельном треде (даже - 3-х отдельных тредах: отдельный для RX, для TX и для обработки событий порта WaitCommEvent()), а не в main-треде приложения. Цитата(rf_pcb @ Jul 6 2015, 00:30)  Я не такой специалист по железу, как некоторые местные гуру-пупки, программирую в Builder, потому не знаю многих тонкостей железа. Вы неспециалист не по железу, а неспециалист в программировании под винду. Тут уже раз сто популярно разжевали. Цитата(rf_pcb @ Jul 6 2015, 00:30)  Интересно, а в Линуксе такая же песня, как и в Windows, по моей задаче? И в линухе и где угодно у Вас будут те же самые проблемы
|
|
|
|
|
Jul 6 2015, 08:01
|
Местный
  
Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315

|
Цитата И в линухе и где угодно у Вас будут те же самые проблемы В DOS возможно их не будет, если через прерывание и FIFO работать.
--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
|
|
|
|
|
Jul 6 2015, 13:38
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 16-02-11
Пользователь №: 63 037

|
Цитата(jcxz @ Jul 6 2015, 09:07)  Вы неспециалист не по железу, а неспециалист в программировании под винду. Тут уже раз сто популярно разжевали. Что посоветуете, как специалисты, почитать из книг по виндам относительно моей задачи?
|
|
|
|
|
Jul 7 2015, 06:19
|
Местный
  
Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315

|
Цитата Задача именно в этом и состоит - получить максимально возможное количество ОБРАЩЕНИЙ за секунду Почитайте про мультимедиа таймеры - разрешение до 1 мс обеспечивают. Если этого мало - Thread и PerformanceCounter может быть выжмут больше
--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
|
|
|
|
|
Aug 16 2015, 16:15
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(rf_pcb @ Jul 6 2015, 16:38)  Что посоветуете, как специалисты, почитать из книг по виндам относительно моей задачи? Тут уже и намекали и впрямую советовали обратить внимание что пишите под виндой, а драйверы винды созданы с учетом пакетной работы устройств ввода-вывода, к коим относится и ком-порт, вы же пытаетесь размер пакета ужать до 1 символа, соотв. крайне нерационально используете данные вам методы. Если так уж прижало обмениваться по 1 байту, что считаю полным бредом, пишите свой драйвер под DDK или под досом, тогда получите прямой доступ к УАРТу и получите свои заветные скорости, даже на 1 байте... Данный вопрос так же не актуален при программировании на микроконтроллерах...
|
|
|
|
|
Nov 22 2016, 17:05
|
Местный
  
Группа: Участник
Сообщений: 211
Регистрация: 25-10-09
Пользователь №: 53 195

|
Цитата(jcxz @ Jul 6 2015, 09:07)  Обмен с функциями WinAPI конечно в отдельном треде (даже - 3-х отдельных тредах: отдельный для RX, для TX и для обработки событий порта WaitCommEvent()), а не в main-треде приложения. Интересно, почему простой синхронный обмен в потоке основной программы не годится? Если нет необходимости выполнять какие-либо операции в процессе ожидания получения данных, то какой смысл создавать новый поток? Почему просто не подождать, пока ReadFile не вернет управление основной программе?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|