rf_pcb 0 30 июня, 2015 Опубликовано 30 июня, 2015 · Жалоба Прошу дать совет и прокоментировать мои рассуждения. Пишу ПО по для приема данных от МК на скорости 115200 по интерфейсу RS-232. В качестве простейшего теста ставлю на ПК перемычку между Rx и Tx. 1 байт, 1 стоп, без четности и всего остального. Если я правильно понимаю я должен увидеть скорость приема близкую к 7200 байт/с (115200/8/2). Пишу ПО в Билдере, использую стандартный API функции, но скорость вижу от 200 до 400 байт /с. Пробовал с выводом на график и с записью в фаил и просто из памяти в фаил, но больше чем 400 байт /с не получил. Заметил особенность что на XP и 7ке разные скорости. Подскажиет как быть? Получу я свои 7200? ну хоть 5000 байт/с? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 30 июня, 2015 Опубликовано 30 июня, 2015 · Жалоба Если я правильно понимаю я должен увидеть скорость приема близкую к 7200 байт/с (115200/8/2). Нет. Если правильно напишете, то получите скорость = 115200/10 Б/с Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rf_pcb 0 30 июня, 2015 Опубликовано 30 июня, 2015 (изменено) · Жалоба 115200/9/2=6400 Скорость приема. Скорее такой параметр мне нужен. Поэтому делю на 2. Подскажите как правильно написать? Изменено 30 июня, 2015 пользователем rf_pcb Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gorby 6 30 июня, 2015 Опубликовано 30 июня, 2015 · Жалоба Прошу дать совет Получу я свои 7200? ну хоть 5000 байт/с? >>я должен увидеть скорость приема близкую к 7200 байт/с (115200/8/2). Неправда. 115200/10=11,52 килобайт\сек. Это в идеале. Десять битов на посланный байт. >>Пишу ПО в Билдере, использую стандартный API функции Прочтите мой ответ "по буквам". А затем "слитно". Как быстрее? А почему? Правильно выбирайте функции. Непременно получите. Удачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rf_pcb 0 30 июня, 2015 Опубликовано 30 июня, 2015 · Жалоба Подскажите пожалуйста какие функции Вы используете? Может есть пример? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rf_pcb 0 30 июня, 2015 Опубликовано 30 июня, 2015 · Жалоба В программе использую поток - выставляю максимальный приоритет (в данном случае получаю приоритет - 15). В XP получаю скорость данных в 1 сек. около 800 циклов обращений (1 цикл = 1 символ передачи и 1 символ приёма). В W7 и в W8 циклов меньше в разы. Начинаю отключать процессы в виндах - количество циклов возрастает, но не значительно... Кроме того, в настройках таймаутах порта при потоке ставлю 0 для макс. скорости. Возможно, что проблема в виндах. Какие процессы отключить, чтобы добиться требуемой теоретической скорости? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 1 июля, 2015 Опубликовано 1 июля, 2015 · Жалоба Отсылайте сразу килограмм символов, после чего принимайте этот килограмм обратно. Увеличение скорости затмит солнце. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 1 июля, 2015 Опубликовано 1 июля, 2015 · Жалоба ...(1 цикл = 1 символ передачи и 1 символ приёма).В W7 и в W8 циклов меньше в разы.... Вы как-то быстро принимаете!!! Надо нододрыгом, софтверно и по-битно :) Но если серьёзно - Вам уже основные вектора сказали - отдавать работу по приёму на нижний уровень. Чем больше - тем лучше. Если говорить применительно к форточкам - Вы забываете такие вещи как переключение потоков и межпроцессную передачу данных и управления. Ведь порты обслуживают драйвера - а это не пользовательское кольцо привилегий. Вот Вам и накладные расходы. Если Вы посимвольно - то Вы как минимум всё суммируете по одному разу, а это тысячи и тысячи тактов. Как принимать пачки - тут либо по времени резать(тайминг ожидания), либо строго длину пачки ожидать(но необходимо обязательно предусмотреть самовыравнивание), либо опираться на управляющие доп. сигналы. где-то так Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rf_pcb 0 1 июля, 2015 Опубликовано 1 июля, 2015 · Жалоба Прошу меня услышать. Я спросил, как мне передавая и принимая один байт, добиться скорости 115200 кб/с. Для снятия всех вопросов с железом я установил перемычку на COM порт. Так можно? Можно. Значит раз есть такая скорость, должны быть способы ее достижения. Вопрос и звучит, как мн её добитьсься. В решаемой задаче побайтный прием и передача. От этого и отталкиваюсь. Служебыне сигналы не использую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 1 июля, 2015 Опубликовано 1 июля, 2015 · Жалоба В решаемой задаче побайтный прием и передача. Меняйте условия задачи. Из приложения, да еще и на билдере, побайтно, да еще и через USB-COM (угадал?) добится 115200 нереально. Так-что бросайте фантазии о такой скорости - собирайте пакеты ( по любому задержки получаете при проходе через операционку, API и драйвера ) и передавайте. В таком случае ограничение 800 байт в секунду станет ограничением 800 пакетов в секунду и практически перестанет влиять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rf_pcb 0 1 июля, 2015 Опубликовано 1 июля, 2015 · Жалоба может и угадали)) Сейчас я тестирую с перемычкой на com порту. Результат 200-400 байт /с. Вы считаете это нормально? В моем представлении - есть интерфейс - есть заявленная скорость. Значит должны быть способы реализации. Откуда это информация про пакеты? про задержки в операционке?! Тактовая частота процессора 3 ГГц! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 1 июля, 2015 Опубликовано 1 июля, 2015 · Жалоба Откуда это информация про пакеты? про задержки в операционке?! Тактовая частота процессора 3 ГГц! ... поциент безнадёжен. в морг :twak: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
soldat_shveyk 3 1 июля, 2015 Опубликовано 1 июля, 2015 · Жалоба Уважаемый rf_pcb, Вы попробуйте проделать один простой эксперимент: подключите осциллограф на сигнал порта, по которому бегут отправляемые вами данные. Увидите много чего интересного. Вы наверное, предполагаете, что порт работающий на скорости 115200 будет отправлять 10- битные комбинации вплотную одна к другой, без пауз между ними? Придется разочароваться- между отправляемыми вами байтами будет пауза намного превышающая время передачи одного байта в формате 8N1. Из-за нее вы и не получаете желаемой скорости. После этого можно подумать, откуда берутся эти задержки и как влияет частота пироцессора на скорость передачи по com-порту. Правильный ответ - никак не влияет. Возможно, что время на открыть и закрыть порт уходит в разы больше чем на передачу байта. Что делать вам уже сказали : открыть порт, передать килограмм байт, закрыть порт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 2 июля, 2015 Опубликовано 2 июля, 2015 · Жалоба ... поциент безнадёжен. в морг :twak: Ну не факт. Просто первое столкновение паскалевского-виндозного программиста с реальным миром железа о котором он до сих пор знал только про гигагерцы процессора. Постепенно, при желании, сможет осознать, что такое операционная система, что такое операционная система реального времени и почему WIN ей не является, что такое шедулер и как он задачи переключает, что его супер-пупер программа только одна из задач запускаемая периодически, что потом еще в системе куча кода, который распределяет доступ к аппаратным ресурсам типа того-же USB, что USB это ни разу ни байтовый интерфейс, что потом в конце есть еще драйвера. Хотя про драйвера он явно слышал, хотя явно только в контексте типа "скачать свежие" :(. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Abrams 0 3 июля, 2015 Опубликовано 3 июля, 2015 · Жалоба может и угадали)) Сейчас я тестирую с перемычкой на com порту. Результат 200-400 байт /с. Вы считаете это нормально? В моем представлении - есть интерфейс - есть заявленная скорость. Значит должны быть способы реализации. Откуда это информация про пакеты? про задержки в операционке?! Тактовая частота процессора 3 ГГц! Скорость 115200 бит в сек., показывает что время передачи одного бита будет равно 1/115200 = 8,7 мкс и только. Чтобы передать все 115200 бит (или 11520 байт 8N1) за одну секунду нужно чтобы между стоп и старт битами каждого передаваемого байте не было вообще промежутков. Для компьютера это не реально, абсолютно. Даже если сформировать массив из 11520 байт и одной посылкой отправить с СОМ-порт, то все равно между передаваемыми байтами будут некоторые временные интервалы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться