Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: проблема с VCP CDC от "куба"
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
dimone
Программа зачата "Кубом", работает с интрфейсами USАRT и USB -устройством (виртуальным СОМ-портом)
под FreeRtos ,соответственно работа с интерфейсами вынесена в задачи, основное тело -Superloop, вертится в фоне..
Обмен по системе запрос-ответ, кол-во байт не больше десятка,частота запросов 10Гц
и тут интересное, если обмен по USАRT не вызывает никаких нареканий, и спокойно пропускает и 100Гц и пол-кило..
то тот-же обмен , только по VCP -глючит..
Каждый новый запрос вызывает подвисание системы, и на 10Гц при мизерных количиствах принятых-переданых данных
фоновая программа практически еле шевелется!.. соответственно, при прикращении подачи запросов программа отмерзает..
Естесственно возникает два вопроса:
первый, как заставить USB stаste maschne шевелиться быстрее? (предполагаю, что она какие-то mallос-и делает..)
и второй, как противостоять "флуду" , т.е. блокировать прием запросов по vcp таймаутом? СDC LL_suspend\resumuе,start\stop отваливают СОМ-порт
- попытки отобрать приоритет у USB приводят нарушению работы..
Forger
Цитата(dimone @ Oct 18 2017, 09:50) *
основное тело -Superloop, вертится в фоне..

Бороться следует не с симптомами (как принято в современной "медицине"), а искать конкретно виновника "болезни".
В противном случае это только усугубит ситуацию и впоследствии "лечение" будет уже по-просту невозможным.

В данном случае нужно сначала разобраться с неким "Superloop", которого не должно быть в принципе в системе с RTOS.
Иначе, зачем тут вообще RTOS??
Потом нужно отключать разные части проекта, создавая соотв. тестовые "заглушки", чтобы локализовать виновника и лечить его, а не весь проект, как вы щас пытаетесь wink.gif

Цитата
- попытки отобрать приоритет у USB приводят нарушению работы..

Скорее всего загрузка CPU у вас достигает 100%, как в винде ))
В этом случае ваша система реально времени перестает быть таковой!
Кстати, есть у вас логи по степени загрузки всего ядра? Или хотя бы максимально зафиксированное значение?
dimone
Всё оказалось прозаично.
Как в одном из законов программизма сказано, величина мистичиских действий программы пропорциональна сделанной программистом глупости..
В коде USB задачи была вставлена систмная задержка, которая заставляла всё ползать и лагать..
А некий Superloop, это основное тело сорокакилобайлной программы, до этого существовавшей на 649Меге..
и перенесенная\портрованная в песочницу на STМ под Rtos..
с передефайном даже имен портов, настолко срaочно было нужно..
С прикрученными после свистелками

..главное, что всё заработалo.
-Большое спасибо за посильную помощь.
Forger
Цитата(dimone @ Oct 31 2017, 10:23) *
систмная задержка

А покажите код этой задержки

Цитата
..главное, что всё заработалo.

Я раньше тоже так относился к проектам, но жисть напрочь отучила так делать ...
Видать, это нужно прочувствовать на собственной шкуре. Имхо, лучше рано, чем поздно wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.