реклама на сайте
подробности

 
 
> Задержка при работе с RS232, Виртуальным из среды Матлаб
Muscat
сообщение Jan 17 2011, 14:21
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 277
Регистрация: 8-04-09
Из: Москва
Пользователь №: 47 382



Добрый день.
Попробую еще раз задать вопрос на форуме, хотя уже и без особой надежды на ответ.

Есть задача - научиться подавать в ПЛИС длинные последовательности бит (от 10^6 байт по 6 бит).
Имеется отладочная плата Actel, на которой установлена микросхема USB->RS232, а на PC установлен виртуальным COM-порт. Таким образом физически RS232 нигде не существует, однако для всех приложений существует COM-порт, в который я могу писать данные, а для ПЛИС существует 2 контакта RX и ТХ для передачи данных.

Теперь собственно к проблеме.
Поскольку физические ограничения на скорость существует только по USB, я пишу данные со скорость 1.5МБит секунду.

В среде Матлаб это выглядит так
Код
s = serial('COM2');
s.BaudRate=1.5*10^6;
fopen(s);
fwrite(s,'!&!');
fclose(s);

Данные пишутся как надо, на осциллографе я вижу требуемые сигналы, длительной одного байта - 4.8 мкс.
Пакеты данных так же передаются как надо, без трудностей,байт за байтом
Код
fwrite(s,'ABCDEFGHIJKLM');


Далее, задача состоит в том, чтобы организовать обмен данными между ПЛИС и PC
Прием->Передача->Прием->Передача
Для чистоты опыта задача прием пока выключен, то есть я пробую выполнить 2 команды передачи последовательно
Код
fwrite(s,'A');
fwrite(s,'B');
И вот тут случается странное. Длительность байт не меняется, однако между самими байтами возникает интервал в 80мс. То есть 4мкс порт занят передачей, потом 80мс ждет, потом передает следующий байт.


Откуда возникает эта задержка и как с ней бороться? Одно из временных решений - увеличить размер входного буфера до 1024 бит, и тогда передача будет идти не 4 мкс, а 4 мс, пауза сохранится прежней 80мс. Но КПД по прежнему просто несерьезный.

Где узкое место и чего дожидается система?



--------------------
Because it's there
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
Чиповод
сообщение Feb 8 2011, 14:26
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 11-01-11
Из: Москва
Пользователь №: 62 160



то есть задержка 80-100мс между fwrite(s,'A'); и fwrite(s,'B'); ?? Ну это все же не ассемблерные команды процессора под чистым ДОСом, странно что только 80мс, я думал Матлаб тормознее выводит.

А что мешает использовать fwrite(s,'AB')??
Go to the top of the page
 
+Quote Post
remote_job
сообщение Feb 10 2011, 11:02
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 14-03-08
Пользователь №: 35 915



Никакого риал тайма с Windows+USB<->UART + МАТЛАБ вы не добьетесь. Вы не сможете запретить ОС как минимум переключить задачи между вашими двумя посылками. Снизить вероятность задержки может и можно буферами всякими, но никаких гарантий. А рекомендация правильная, вы как минимум в рамках одной операции fwrite уж постарайтесь данные отправлять, и то повторюсь формальной гарантии не будет.
Go to the top of the page
 
+Quote Post
Чиповод
сообщение Feb 10 2011, 14:54
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 11-01-11
Из: Москва
Пользователь №: 62 160



Оценил, насколько, у меня система реального времени. Компьютер - десктоп Core2Duo E8400 3.0ГГц, Com-port аппаратный, WinXP. Написал матлаб-код и загнал команды fwrite в цикл то есть
Код
while(1)
   fwrite(s,'A');
   fwrite(s,'A');
end;

Смотрел осциллографом на то, что ко мне приходит. Означенные выше байты доставлены были доставлены ровными импульсами, уровнями от -12 до +12В. Расстояние между двумя байтами составило 300-400 мкс и колебалось по неведомому закону. Нагрузил процессор до зела, поставив Quartus раскладывать тяжелый проект. И только, когда загрузка обеих ядер ПК стала 99% (Fitter Quarus'a так может), второй импульс стал улетать с экрана осциллографа, подрегулировав развертку я определил, что задержка увеличилась до 700-800мкс.

Но 300-800мкс, это все же не 80-100мс, как в Вашем случае, так, что в узком горлышке можно заподозрить переходник USB->RS232 и всю его инфраструктуру с драйверами, пакетами и т.д.

P.S. кстати команда
fwrite(s,'AB');
выдает байты на осциллограф без задержек, совсем без задержек.

Сообщение отредактировал Чиповод - Feb 10 2011, 14:56
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 23:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.05384 секунд с 7
ELECTRONIX ©2004-2016