Перейти к содержанию
    

RS-232 на скоростях 115200 и х2

Прошу дать совет и прокоментировать мои рассуждения.

Пишу ПО по для приема данных от МК на скорости 115200 по интерфейсу RS-232.

В качестве простейшего теста ставлю на ПК перемычку между Rx и Tx.

1 байт, 1 стоп, без четности и всего остального.

Если я правильно понимаю я должен увидеть скорость приема близкую к 7200 байт/с (115200/8/2).

Пишу ПО в Билдере, использую стандартный API функции, но скорость вижу от 200 до 400 байт /с.

Пробовал с выводом на график и с записью в фаил и просто из памяти в фаил, но больше чем 400 байт /с не получил.

Заметил особенность что на XP и 7ке разные скорости.

Подскажиет как быть?

Получу я свои 7200? ну хоть 5000 байт/с?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если я правильно понимаю я должен увидеть скорость приема близкую к 7200 байт/с (115200/8/2).

Нет.

Если правильно напишете, то получите скорость = 115200/10 Б/с

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

115200/9/2=6400

Скорость приема. Скорее такой параметр мне нужен. Поэтому делю на 2.

Подскажите как правильно написать?

Изменено пользователем rf_pcb

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу дать совет

Получу я свои 7200? ну хоть 5000 байт/с?

 

>>я должен увидеть скорость приема близкую к 7200 байт/с (115200/8/2).

Неправда. 115200/10=11,52 килобайт\сек. Это в идеале. Десять битов на посланный байт.

 

>>Пишу ПО в Билдере, использую стандартный API функции

Прочтите мой ответ "по буквам". А затем "слитно". Как быстрее? А почему? Правильно выбирайте функции.

 

Непременно получите. Удачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В программе использую поток - выставляю максимальный приоритет (в данном случае получаю приоритет - 15).

В XP получаю скорость данных в 1 сек. около 800 циклов обращений (1 цикл = 1 символ передачи и 1 символ приёма).

В W7 и в W8 циклов меньше в разы.

Начинаю отключать процессы в виндах - количество циклов возрастает, но не значительно...

Кроме того, в настройках таймаутах порта при потоке ставлю 0 для макс. скорости.

Возможно, что проблема в виндах. Какие процессы отключить, чтобы добиться требуемой теоретической скорости?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Отсылайте сразу килограмм символов, после чего принимайте этот килограмм обратно. Увеличение скорости затмит солнце.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...(1 цикл = 1 символ передачи и 1 символ приёма).В W7 и в W8 циклов меньше в разы....

 

Вы как-то быстро принимаете!!! Надо нододрыгом, софтверно и по-битно :) Но если серьёзно - Вам уже основные вектора сказали -

отдавать работу по приёму на нижний уровень. Чем больше - тем лучше. Если говорить применительно к форточкам - Вы забываете такие вещи как

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

привилегий. Вот Вам и накладные расходы. Если Вы посимвольно - то Вы как минимум всё суммируете по одному разу, а это тысячи и тысячи тактов.

 

Как принимать пачки - тут либо по времени резать(тайминг ожидания), либо строго длину пачки ожидать(но необходимо обязательно

предусмотреть самовыравнивание), либо опираться на управляющие доп. сигналы.

 

где-то так

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу меня услышать.

Я спросил, как мне передавая и принимая один байт, добиться скорости 115200 кб/с.

Для снятия всех вопросов с железом я установил перемычку на COM порт. Так можно? Можно.

Значит раз есть такая скорость, должны быть способы ее достижения.

Вопрос и звучит, как мн её добитьсься.

В решаемой задаче побайтный прием и передача. От этого и отталкиваюсь. Служебыне сигналы не использую.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В решаемой задаче побайтный прием и передача.

Меняйте условия задачи. Из приложения, да еще и на билдере, побайтно, да еще и через USB-COM (угадал?) добится 115200 нереально.

Так-что бросайте фантазии о такой скорости - собирайте пакеты ( по любому задержки получаете при проходе через операционку, API и драйвера ) и передавайте.

В таком случае ограничение 800 байт в секунду станет ограничением 800 пакетов в секунду и практически перестанет влиять.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

может и угадали))

Сейчас я тестирую с перемычкой на com порту. Результат 200-400 байт /с. Вы считаете это нормально?

В моем представлении - есть интерфейс - есть заявленная скорость. Значит должны быть способы реализации.

Откуда это информация про пакеты? про задержки в операционке?! Тактовая частота процессора 3 ГГц!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Откуда это информация про пакеты? про задержки в операционке?! Тактовая частота процессора 3 ГГц!

... поциент безнадёжен. в морг :twak:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемый rf_pcb, Вы попробуйте проделать один простой эксперимент: подключите осциллограф на сигнал порта, по которому бегут отправляемые вами данные. Увидите много чего интересного.

Вы наверное, предполагаете, что порт работающий на скорости 115200 будет отправлять 10- битные комбинации вплотную одна к другой, без пауз между ними? Придется разочароваться- между отправляемыми вами байтами будет пауза намного превышающая время передачи одного байта в формате 8N1. Из-за нее вы и не получаете желаемой скорости. После этого можно подумать, откуда берутся эти задержки и как влияет частота пироцессора на скорость передачи по com-порту. Правильный ответ - никак не влияет.

Возможно, что время на открыть и закрыть порт уходит в разы больше чем на передачу байта.

Что делать вам уже сказали : открыть порт, передать килограмм байт, закрыть порт.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... поциент безнадёжен. в морг :twak:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

может и угадали))

Сейчас я тестирую с перемычкой на com порту. Результат 200-400 байт /с. Вы считаете это нормально?

В моем представлении - есть интерфейс - есть заявленная скорость. Значит должны быть способы реализации.

Откуда это информация про пакеты? про задержки в операционке?! Тактовая частота процессора 3 ГГц!

Скорость 115200 бит в сек., показывает что время передачи одного бита будет равно 1/115200 = 8,7 мкс и только.

Чтобы передать все 115200 бит (или 11520 байт 8N1) за одну секунду нужно чтобы между стоп и старт битами каждого передаваемого байте не было вообще промежутков.

Для компьютера это не реально, абсолютно.

Даже если сформировать массив из 11520 байт и одной посылкой отправить с СОМ-порт, то все равно между передаваемыми байтами будут некоторые временные интервалы.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...