Easyelectronics.ru

Электроника для всех
Текущее время: 06 дек 2019, 03:29

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



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

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

Зарегистрирован: 11 апр 2014, 13:25
Сообщения: 794
Откуда: 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
Сообщения: 4128
Откуда: КЧР, поселок Нижний Архыз
Если выкинуть кал и выкинуть ненужные задержки, все будет хорошо.
Можно, кстати, прямо в прерывании конечной точки искать '\n' в потоке и менять буферы с выставлением флага, тогда система будет более устойчива к потокам данных на большой скорости.


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

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


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

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

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


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

Зарегистрирован: 02 май 2017, 18:54
Сообщения: 200
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
Сообщения: 794
Откуда: 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 часов


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

Сейчас этот форум просматривают: Google [Bot]


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

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

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