реклама на сайте
подробности

 
 
> STM32F4 Bulk+Interrupt, CubeF4
Atlantis-
сообщение Apr 13 2017, 09:24
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Добрый день!
Использую проект 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 прекратились. Хотелось бы прояснить, почему так происходит?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Apr 13 2017, 13:39
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Ну, скорее всего, идёт одновременное обращение к одному и тому же аппаратному регистру USB.
То есть в голове или задаче у вас читается регистр, и в это время поступает прерывание где этот регистр модифицируется. Далее идёт возврат в основную прогу (или задачу) которые начинают работу с неверным (изменённым) значением регистра.
Чтобы этого не происходило, необходимо работать с регистрами в одной задаче либо делать "захват ресурсов". Короче вы должны обеспечить монопольное использование ресурсов. Без коллизий.
Типичным примером является флэш память. Например необходимо писать туда сообщения из разных задач. Понятно, что до момента завершения текущей операции, она не должна быть прервана.
Осмыслите это и поймёте.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th August 2025 - 09:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01291 секунд с 7
ELECTRONIX ©2004-2016