Jump to content

    

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

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

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

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

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

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

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

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

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

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

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

Share this post


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

Нет.

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

Share this post


Link to post
Share on other sites

115200/9/2=6400

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

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

Edited by rf_pcb

Share this post


Link to post
Share on other sites
Прошу дать совет

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

 

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

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

 

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

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

 

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

Share this post


Link to post
Share on other sites

Подскажите пожалуйста какие функции Вы используете? Может есть пример?

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


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

 

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

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

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

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

 

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

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

 

где-то так

 

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

 

Share this post


Link to post
Share on other sites
В решаемой задаче побайтный прием и передача.

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

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

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

 

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


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

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

Share this post


Link to post
Share on other sites
... поциент безнадёжен. в морг :twak:

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

Share this post


Link to post
Share on other sites
может и угадали))

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

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

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

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

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

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

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

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this