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

STM32F4 Bulk+Interrupt

Добрый день!

Использую проект Virtual COM port сгенерированный в CubeMX для STM32F429. Немного преобразовал проект, у меня работает один Bulk-out endpoint и один Interrupt-in. Проблема в том, что если я периодически передаю сообщения по Interrupt, используя стандартную функцию

CDC_Transmit_HS(uint8_t* Buf, uint16_t Len)

и одновременно принимаю данные по Bulk

CDC_Receive_HS (uint8_t* Buf, uint32_t *Len)

, то иногда зависает посылка по Bulk.

Видимо проблема в том, что иногда я в основном цикле вызываю CDC_Transmit_HS и в это время в прерывании вызывается CDC_Receive_HS. Я засунул вызов CDC_Transmit_HS в прерывание USB SOF (по сути разделил эти две функции по времени) и зависания Bulk прекратились. Хотелось бы прояснить, почему так происходит?

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


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

Ну, скорее всего, идёт одновременное обращение к одному и тому же аппаратному регистру USB.

То есть в голове или задаче у вас читается регистр, и в это время поступает прерывание где этот регистр модифицируется. Далее идёт возврат в основную прогу (или задачу) которые начинают работу с неверным (изменённым) значением регистра.

Чтобы этого не происходило, необходимо работать с регистрами в одной задаче либо делать "захват ресурсов". Короче вы должны обеспечить монопольное использование ресурсов. Без коллизий.

Типичным примером является флэш память. Например необходимо писать туда сообщения из разных задач. Понятно, что до момента завершения текущей операции, она не должна быть прервана.

Осмыслите это и поймёте.

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


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

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

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

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

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

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

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

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

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

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