Перейти к содержанию
    

проблема с VCP CDC от "куба"

Программа зачата "Кубом", работает с интрфейсами USАRT и USB -устройством (виртуальным СОМ-портом)

под FreeRtos ,соответственно работа с интерфейсами вынесена в задачи, основное тело -Superloop, вертится в фоне..

Обмен по системе запрос-ответ, кол-во байт не больше десятка,частота запросов 10Гц

и тут интересное, если обмен по USАRT не вызывает никаких нареканий, и спокойно пропускает и 100Гц и пол-кило..

то тот-же обмен , только по VCP -глючит..

Каждый новый запрос вызывает подвисание системы, и на 10Гц при мизерных количиствах принятых-переданых данных

фоновая программа практически еле шевелется!.. соответственно, при прикращении подачи запросов программа отмерзает..

Естесственно возникает два вопроса:

первый, как заставить USB stаste maschne шевелиться быстрее? (предполагаю, что она какие-то mallос-и делает..)

и второй, как противостоять "флуду" , т.е. блокировать прием запросов по vcp таймаутом? СDC LL_suspend\resumuе,start\stop отваливают СОМ-порт

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

Изменено пользователем dimone

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

основное тело -Superloop, вертится в фоне..

Бороться следует не с симптомами (как принято в современной "медицине"), а искать конкретно виновника "болезни".

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

 

В данном случае нужно сначала разобраться с неким "Superloop", которого не должно быть в принципе в системе с RTOS.

Иначе, зачем тут вообще RTOS??

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

 

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

Скорее всего загрузка CPU у вас достигает 100%, как в винде ))

В этом случае ваша система реально времени перестает быть таковой!

Кстати, есть у вас логи по степени загрузки всего ядра? Или хотя бы максимально зафиксированное значение?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё оказалось прозаично.

Как в одном из законов программизма сказано, величина мистичиских действий программы пропорциональна сделанной программистом глупости..

В коде USB задачи была вставлена систмная задержка, которая заставляла всё ползать и лагать..

А некий Superloop, это основное тело сорокакилобайлной программы, до этого существовавшей на 649Меге..

и перенесенная\портрованная в песочницу на STМ под Rtos..

с передефайном даже имен портов, настолко срaочно было нужно..

С прикрученными после свистелками

 

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

-Большое спасибо за посильную помощь.

Изменено пользователем dimone

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

систмная задержка

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

 

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

Я раньше тоже так относился к проектам, но жисть напрочь отучила так делать ...

Видать, это нужно прочувствовать на собственной шкуре. Имхо, лучше рано, чем поздно ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...