Easyelectronics.ru

Электроника для всех
Текущее время: 22 авг 2019, 08:04

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Прием нескольких пакетов по USB VCP
СообщениеДобавлено: 21 июл 2019, 11:27 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2014, 13:25
Сообщения: 644
Откуда: Earth
Доброго времени суток.
Пытаюсь освоить работу с USB VCP.
С отправкой вроде проблем нет.
Callback приема после генерации кубом выглядел вот так:
Show

Я переделал его следующим образом:
Show

Функция "приема/обработки" выглядит вот так:
Show

В основноим цикле анализирую, if (vcp_num_of_rx_bytes != 0), и вызываю функцию приема для обработки, и посылаю назад то, что принял.

При приеме одиночных пакетов все ок, а вот когда добавляю задержку (банальную HAL_Delay(10000);) и в течении нее присылаю несколько пакетов, то выводится последний пакет, а дальше мусор (но если последний пакет меньше предыдущего, то видно и незатертую часть предпоследнего пакта), но общее количество принятых байт соответсвует количеству переданных байт.

В чем мой косяк ?


Последний раз редактировалось Gnusmas 21 июл 2019, 11:32, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием нескольких пакетов по USB VCP
СообщениеДобавлено: 21 июл 2019, 11:30 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 3872
Откуда: КЧР, поселок Нижний Архыз
Если выкинуть кал и выкинуть ненужные задержки, все будет хорошо.
Можно, кстати, прямо в прерывании конечной точки искать '\n' в потоке и менять буферы с выставлением флага, тогда система будет более устойчива к потокам данных на большой скорости.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием нескольких пакетов по USB VCP
СообщениеДобавлено: 21 июл 2019, 16:03 
Заглядывает иногда

Зарегистрирован: 02 май 2017, 18:54
Сообщения: 173
Камень то какой?
Например реализация 103 и 303 как бэ отличается. Учитывается размер буфера USB? Анализируется на предмет буфер пуст?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием нескольких пакетов по USB VCP
СообщениеДобавлено: 21 июл 2019, 17:13 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2014, 13:25
Сообщения: 644
Откуда: Earth
leocat3 писал(а):
Камень то какой? ... Учитывается размер буфера USB? Анализируется на предмет буфер пуст?

Камень F103C8T6. Размер буфера дефолтный, 1000 байт, пакеты по пару байт. Анализируется только "было принято n байт", значит будем доставать n байт. Указатель обнуляется после завершения обработки всех принятых байт, а не после приёма каждого пакета (ну, или это я так думаю).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием нескольких пакетов по USB VCP
СообщениеДобавлено: 21 июл 2019, 21:04 
Заглядывает иногда

Зарегистрирован: 02 май 2017, 18:54
Сообщения: 173
Gnusmas писал(а):
leocat3 писал(а):
Камень то какой? ... Учитывается размер буфера USB? Анализируется на предмет буфер пуст?

Камень F103C8T6. Размер буфера дефолтный, 1000 байт, пакеты по пару байт. Анализируется только "было принято n байт", значит будем доставать n байт. Указатель обнуляется после завершения обработки всех принятых байт, а не после приёма каждого пакета (ну, или это я так думаю).

1к буфер на 103-м, да ещё и дефолтный, это как?!
Вааще то размеры буферов интерфейса Tx и Rx на 103 по умолчанию 64 байта... Это и есть размер пакета.
Вся системная память USB или CAN - 512 байт. Причем одновременно использовать оба интерфейса - никак.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием нескольких пакетов по USB VCP
СообщениеДобавлено: 22 июл 2019, 03:23 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2014, 13:25
Сообщения: 644
Откуда: Earth
leocat3 писал(а):
1к буфер на 103-м, да ещё и дефолтный, это как?!
Вааще то размеры буферов интерфейса Tx и Rx на 103 по умолчанию 64 байта... Это и есть размер пакета.
Вся системная память USB или CAN - 512 байт. Причем одновременно использовать оба интерфейса - никак.

Когда создавал проект в Кубе - ничего не менял. Отсюда и выражение "дефолтный".
Куб мне создал "вот такой строчка":
/* USER CODE BEGIN PRIVATE_DEFINES */
/* Define size for the receive and transmit buffer over CDC */
/* It's up to user to redefine and/or remove those define */
#define APP_RX_DATA_SIZE 1000
#define APP_TX_DATA_SIZE 1000
/* USER CODE END PRIVATE_DEFINES */

Какое число увидел - такое и написал сюда.

Насчет невозможности одновременно использования USB или CAN - при генерации проекта видел желтые восклицательные знаки с предупреждениями в Кубе, но так как CAN не использую - не беспокоился по этому поводу.

Пока что проблема решилась при помощи введения дополнительной промужуточной сущности в виде кольцевого буфера.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB