Юрий48 0 5 июня, 2023 Опубликовано 5 июня, 2023 (изменено) · Жалоба Вопрос казалось бы простой: как программно закрыть, освободить usb virtual com port, созданный программой при её запуске. Изменено 6 июня, 2023 пользователем haker_fox Совершенно непонятно причём здесь раздел STM, перенёс тему Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndyBig 8 5 июня, 2023 Опубликовано 5 июня, 2023 · Жалоба Со стороны контроллера - просто отключить USB (отключить подтяжку 1.5 кОм). Со стороны хоста - закрыть открытый ранее файл/хэндл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Юрий48 0 5 июня, 2023 Опубликовано 5 июня, 2023 · Жалоба В 05.06.2023 в 22:10, AndyBig сказал: Со стороны контроллера - просто отключить USB (отключить подтяжку 1.5 кОм). Со стороны хоста - закрыть открытый ранее файл/хэндл. Надо, что бы именно контроллер освободил порт. Со стороны хоста сброс хендела не даёт результатов. А вообще производиться программная перестартовка контроллера, которая инициализируется с ПК. И после перестартовки программа на ПК не может вновь получить хендел, хотя в этом случае предварительно производиться сброс предыдущего. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 5 июня, 2023 Опубликовано 5 июня, 2023 · Жалоба 17 минут назад, Юрий48 сказал: И после перестартовки программа на ПК не может вновь получить хендел, хотя в этом случае предварительно производиться сброс предыдущего. Включаю режим телепатии: Для того, чтобы USB-CDC был доступен программам под Win после сброса USB-device, необходимо чтобы все дескрипторы COM-порта были освобождены до начала повторной энумерации USB-device. PS: Совет - в следующий раз постарайтесь вменяемо задавать вопросы. И располагать их в соответствующей ветке форума. Если конечно хотите вменяемых ответов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndyBig 8 5 июня, 2023 Опубликовано 5 июня, 2023 · Жалоба 56 minutes ago, Юрий48 said: И после перестартовки программа на ПК не может вновь получить хендел Значит хэндл не освобождается на ПК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Юрий48 0 5 июня, 2023 Опубликовано 5 июня, 2023 · Жалоба В 05.06.2023 в 22:38, jcxz сказал: Для того, чтобы USB-CDC был доступен программам под Win после сброса USB-device, необходимо чтобы все дескрипторы COM-порта были освобождены до начала повторной энумерации USB-device. Все эти действия были сделаны. В 05.06.2023 в 22:38, jcxz сказал: PS: Совет - в следующий раз постарайтесь вменяемо задавать вопросы. И располагать их в соответствующей ветке форума. Если конечно хотите вменяемых ответов. Это совершенно справедливо. Покажите, пожалуйста, чем не понятен изначальный вопрос. Я очень сожалею, что стал распростроняться по древу - считайте, что я не писал второго своего поста. В 05.06.2023 в 23:18, AndyBig сказал: Значит не освобождается на ПК. Все функции для предварительного освобождения хэндла на ПК использованы, пользуюсь ими давно и они меня никогда не подводили. Ещё раз повторюсь, что сожалею о втором посте, забудьте о нём. Если изначальная формулировка темы понятна, то хотябы ответьте возможно такое для МП. А, если ещё и покажеете как это сделать , то это верх блаженства. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndyBig 8 5 июня, 2023 Опубликовано 5 июня, 2023 · Жалоба 1 hour ago, Юрий48 said: возможно такое для МП Конечно. Отключаете подтяжку к питанию линии D+ и ПК считает устройство отключенным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 7 6 июня, 2023 Опубликовано 6 июня, 2023 · Жалоба 9 часов назад, Юрий48 сказал: Все функции для предварительного освобождения хэндла на ПК использованы, пользуюсь ими давно и они меня никогда не подводили. Вы непонятно описываете последовательность освобождения ресурсов. Нужно так: в ПК прекращаете использовать хэндл, закрываете порт. Потом МК может имитировать извлечение устройства (например как выше написал AndyBig). Возможно понадобится задержка между этими этапами. Если сначала извлекать устройство и только потом пытаться освобождать ресурсы в ПК - больше вы компортом пользоваться не сможете. Это происходит из-за того что после извлечения хэндл сразу становится невалидным и освободить ресурсы уже не получится. И повторно оно тоже не заработает потому что ресурс остался заблокированным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 6 июня, 2023 Опубликовано 6 июня, 2023 · Жалоба 9 часов назад, Юрий48 сказал: Покажите, пожалуйста, чем не понятен изначальный вопрос. Не понятно практически ничего из написанного. Сплошная галиматья.... Читаем: 11 часов назад, Юрий48 сказал: как программно закрыть, освободить Закрыть/освободить где? На ПК? Какая ОС - win, linux, etc.? Или где? 11 часов назад, Юрий48 сказал: usb virtual com port, Что такое "usb virtual com port"? Я знаю что такое "USB-CDC", также примерно понимаю, что обычно подразумевается под "virtual COM-порт" под Win-ОС. Но что такое "usb virtual com port"??? 11 часов назад, Юрий48 сказал: созданный программой при её запуске. Здесь ещё хуже.... Какой "программой"? У вас какая-то программа под Win создаёт виртуальный COM-порт? Тогда при чём тут USB? А если всё-таки имеется в виду USB-CDC, то раскажите пожалуйста - что за программа создаёт его на ПК??? Вроде как USB-CDC-COM-порты создаются системным USB-драйвером ОС (win/linux), а не как не какими-то "программами". Или "программа" создаёт не на ПК, а где...? Дальше ещё хуже: 11 часов назад, Юрий48 сказал: Надо, что бы именно контроллер освободил порт. Что за "контроллер"? Микроконтроллер, который работает как USB-device и на котором реализован USB-CDC? Но какое он имеет отношение к закрытию некоего "хендела" на каким-то ПК? Такой микроконтроллер понятия не имеет ни о каких "хенделах" на ПК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 6 июня, 2023 Опубликовано 6 июня, 2023 · Жалоба Я делал так: пишу/читаю COM-порт; в какой-то момент USB-COM-порт извлекают; в софт приходит ошибка; в обработчике ошибки сразу же закрываю порт; затем периодически пытаюсь открыть порт. Работало надежно, но это было лет 10 назад на Windows XP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 6 июня, 2023 Опубликовано 6 июня, 2023 · Жалоба 2 минуты назад, adnega сказал: в какой-то момент USB-COM-порт извлекают; в софт приходит ошибка; в обработчике ошибки сразу же закрываю порт; Только у ТС не "извлекают", а вроде какое-то устройство с USB-CDC пересбрасывается. И значит новая энумерация может успеть пройти ещё до вашего закрытия порта. И тогда сколько "периодически" не открывай COM-порт - больше он не откроется. Извлечь-вставить в USB-разъём быстро - всё-таки очень трудно, не то что перегрузить МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 6 июня, 2023 Опубликовано 6 июня, 2023 · Жалоба В 06.06.2023 в 09:41, jcxz сказал: Только у ТС не "извлекают", а вроде какое-то устройство с USB-CDC пересбрасывается. И значит новая энумерация может успеть пройти ещё до вашего закрытия порта. И тогда сколько "периодически" не открывай COM-порт - больше он не откроется. Извлечь-вставить в USB-разъём быстро - всё-таки очень трудно, не то что перегрузить МК. Думаю, ничего не изменится, если "извлекают" == "энумерация". Важно по ошибке порт закрыть, а затем открыть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 136 6 июня, 2023 Опубликовано 6 июня, 2023 · Жалоба 12 минут назад, adnega сказал: Важно по ошибке порт закрыть, а затем открыть. Важно успеть это сделать до того момента, как устройство определится снова. В противном случае (если память не изменяет) ему будет присвоен другой номер COM-порта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 6 июня, 2023 Опубликовано 6 июня, 2023 · Жалоба 19 минут назад, adnega сказал: Думаю, ничего не изменится, если "извлекают" == "энумерация". Важно по ошибке порт закрыть, а затем открыть. Открыть то вы его откроете, но работать он уже не будет. Если до момента энумерации закрыть не успели. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 6 июня, 2023 Опубликовано 6 июня, 2023 · Жалоба 1 час назад, adnega сказал: Работало надежно, но это было лет 10 назад на Windows XP. На Win10 такое не прокатывает. Сам столкнулся с проблемой, как у ТС: сильная электрическая помеха кратковременно наводила на линиях D+ D- сигнал, аналогичный - "нет устройства". И - всё... Никакие танцы с бубном не помогают. "Пропадание" устройства - кратковременное, Win не успевает сообщить пользователю о том, что устройство вынули и вставили снова, устройство ОС определяет как тот же СОМ-порт, но обмен информацией восстановить не получилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться