#Eugene 0 5 мая, 2019 Опубликовано 5 мая, 2019 (изменено) · Жалоба Привет! Использую USB OTG на плате F4-Discovery в режиме виртуального COM порта ( https://stm32f4-discovery.net/2014/08/library-24-virtual-com-port-vcp-stm32f4xx/ ) Если попытаться что-то передать в сторону ПК, когда COM порт закрыт - программа зависает на записи в буфер. Вопрос: есть ли варианты убрать эту блокировку? Или только на RTOS переходить? Изменено 5 мая, 2019 пользователем #Eugene Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 5 мая, 2019 Опубликовано 5 мая, 2019 · Жалоба 1 час назад, #Eugene сказал: Привет! Использую USB OTG на плате F4-Discovery в режиме виртуального COM порта ( https://stm32f4-discovery.net/2014/08/library-24-virtual-com-port-vcp-stm32f4xx/ ) Если попытаться что-то передать в сторону ПК, когда COM порт закрыт - программа зависает на записи в буфер. Вопрос: есть ли варианты убрать эту блокировку? Или только на RTOS переходить? Вариант только один: изучать те исходники организующие этот USB-CDC, которые вы где-то нарыли. Как видно - вы совсем не понимаете их работы... И какой смысл что-то передавать в закрытый COM-порт??? Это то же самое, что пытаться звонить и что-то говорить на выключенный телефон. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
#Eugene 0 6 мая, 2019 Опубликовано 6 мая, 2019 (изменено) · Жалоба jcxz, Что значит зачем? Это нормальная ситуация, которая встречается на практике и этот случай нужно правильно обработать. В библиотеке от ST эта ситуация приводит к блокировке на записи в буфер. Вопрос в том - как именно поступить в этом случае. Изменено 6 мая, 2019 пользователем #Eugene Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Segment 3 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба Так по той же ссылке указан TM_USB_VCP_GetStatus который может использоваться для определения подключения к компьютеру. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 8 minutes ago, Segment said: Так по той же ссылке указан TM_USB_VCP_GetStatus который может использоваться для определения подключения к компьютеру. Подключение к компьютеру и открытый порт эт разные вещи. Реально неожиданное закрытие порта вызывает некоторые неудобства приводящие к необходимости переинициализации всего стека USB или как минимум очередей сообщений. Для асинхронной ловли событий закрытия порта надо следить за сообщением SET_CONTROL_LINE_STATE а в том сообщении за флагом DTE_PRESENCE_CHECK. Правда не во всех обстоятельствах он покажет открытие порта. Но тут можно ориентироваться по факту прихода данных. И естественно нужна RTOS чтобы сообщение SET_CONTROL_LINE_STATE ловилось в самом приоритетном потоке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
#Eugene 0 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 57 minutes ago, AlexandrY said: Подключение к компьютеру и открытый порт эт разные вещи. Реально неожиданное закрытие порта вызывает некоторые неудобства приводящие к необходимости переинициализации всего стека USB или как минимум очередей сообщений. Для асинхронной ловли событий закрытия порта надо следить за сообщением SET_CONTROL_LINE_STATE а в том сообщении за флагом DTE_PRESENCE_CHECK. Правда не во всех обстоятельствах он покажет открытие порта. Но тут можно ориентироваться по факту прихода данных. И естественно нужна RTOS чтобы сообщение SET_CONTROL_LINE_STATE ловилось в самом приоритетном потоке. Понял, спасибо! Неожиданная особенность. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 3 часа назад, #Eugene сказал: jcxz, Что значит зачем? Это нормальная ситуация, которая встречается на практике и этот случай нужно правильно обработать. В библиотеке от ST эта ситуация приводит к блокировке на записи в буфер. Нормальная ситуация - это точно писать о том, что вопрос касается использования какой-то библиотеки. В USB-CDC нет никаких проблем обработать передачу в любой порт, хоть открытый хоть закрытый, потому что такие передачи выполняются только по запросу от хоста. И если запрос есть - данные однозначно можно передать. А всякие буфера - это уже программная надстройка стека. И проблемы их использования - это проблемы данной реализации стека, а не USB-CDC. PS: Такие "нормальные ситуации" нормальны только для кубокодерства.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
#Eugene 0 6 мая, 2019 Опубликовано 6 мая, 2019 (изменено) · Жалоба 1 hour ago, jcxz said: Нормальная ситуация - это точно писать о том, что вопрос касается использования какой-то библиотеки. В USB-CDC нет никаких проблем обработать передачу в любой порт, хоть открытый хоть закрытый, потому что такие передачи выполняются только по запросу от хоста. И если запрос есть - данные однозначно можно передать. А всякие буфера - это уже программная надстройка стека. И проблемы их использования - это проблемы данной реализации стека, а не USB-CDC. PS: Такие "нормальные ситуации" нормальны только для кубокодерства.... Товарищ, вы не в первый раз даёте бестолковые ответы. Сейчас зачем-то про кубодерство упомянули, хотя CubeMX я никогда не использовал. Впрочем - можно и кубом пользоваться, но проблем там придется решать гораздо больше. Конечно, при работе с вашим устройством не возникнет ситуации, когда пользователь закроет COM порт во время передачи данных от устройства на ПК (это сарказм, если не догадались). Кстати вариант USB VCP по приведенной в первом посте ссылке - вполне стабильно работает "из коробки", чего не скажешь про CubeMX и версию библиотеки от 2018 года с сайта ST. Изменено 6 мая, 2019 пользователем #Eugene Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 1 hour ago, #Eugene said: Кстати вариант USB VCP по приведенной в первом посте ссылке - вполне стабильно работает "из коробки", чего не скажешь про CubeMX и версию библиотеки от 2018 года с сайта ST. Очень хороший стек USB у ThreadX. Там есть специальный callback , вызываемый при изменении состояния порта. Причем на каждый интерфейс в композитном дивайсе свой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 17 minutes ago, AlexandrY said: Очень хороший стек USB у ThreadX. А ThreadX у Renesas, да живет он вечно! У Kinetis раньше был хороший стек, но теперь испортился Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 2 часа назад, #Eugene сказал: Товарищ, вы не в первый раз даёте бестолковые ответы. Товарищ, может вы просто бестолково их понимаете? Цитата Сейчас зачем-то про кубодерство упомянули, хотя CubeMX я никогда не использовал. Впрочем - можно и кубом пользоваться, но проблем там придется решать гораздо больше. Кубокодерство - это когда берут содранный где-то чужой код (даже от производителя) и даже не разбираясь в его работе (и в работе той периферии, что он обслуживает), просто понатыкав каких-нить галочек пытаются как-то пристроить себе. И это, имхо, ваш случай. Цитата Конечно, при работе с вашим устройством не возникнет ситуации, когда пользователь закроет COM порт во время передачи данных от устройства на ПК (это сарказм, если не догадались). При работе с моим устройством, если пользователь закроет COM-порт хоть во время передачи хоть нет - USB-хост перестанет выполнять OUT- и IN-транзакции по USB-шине в ответ на которые USB-стек на устройстве должен выдавать или принимать данные. Именно, что только в ответ на которые. Потому что USB-девайс сам по своей инициативе ничего на шину передавать не может. Закрыт или открыт COM-порт на хосте - USB-device должно быть вообще фиолетово. Есть транзакция - он должен на неё ответить. А уж записи в какие-то буфера - вообще дело чисто программное внутри вашего устройства и никак не касающееся работы USB. Можно и без всяких буферов вообще работать. Цитата Кстати вариант USB VCP по приведенной в первом посте ссылке - вполне стабильно работает "из коробки", чего не скажешь про CubeMX и версию библиотеки от 2018 года с сайта ST. Вот-вот. Это и есть "кубокодерство". А описание протокола USB наверняка даже не открывали, также как и мануал с описанием USB-периферии своего МК.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 1 час назад, AlexandrY сказал: Там есть специальный callback , вызываемый при изменении состояния порта. Причем на каждый интерфейс в композитном дивайсе свой. Если работа стека построена на callback-ах (в том числе и передача/приём данных), то вообще не должно происходить переполнений буферов ни в каких случаях. 1 час назад, aaarrr сказал: У Kinetis раньше был хороший стек, но теперь испортился NXP это вроде теперь тоже Кинетис? Так у LPC17xx в примерах IAR стек остался тот же самый. И он - хороший. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 17 minutes ago, jcxz said: NXP это вроде теперь тоже Кинетис? Так у LPC17xx в примерах IAR стек остался тот же самый. И он - хороший. То был злой сарказмъ. NXP - это не Кинетис, совсем даже наоборот. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 1 hour ago, aaarrr said: А ThreadX у Renesas, да живет он вечно! Да верно. Только надо уточнять всегда - Renesas Synergy или просто Synergy. Synergy поддерживает 10 пайпов в отличие от ST у которых только 9. Поэтому на Synergy можно сделать 3! полнофункциональных VCOM на одном USB интерфейсе. А ThreadX идет с конфигуратором где любую комбинацию интерфейсов можно назначить на USB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 1 minute ago, AlexandrY said: Только надо уточнять всегда - Renesas Synergy или просто Synergy. Я ошибся в Имени 4 minutes ago, AlexandrY said: А ThreadX идет с конфигуратором где любую комбинацию интерфейсов можно назначить на USB Вот ведь как - даже гифку не лень нарезать. Чувствую, забористый струмент. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться