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

 
 
> USB HOST MSC на FreeTROS на STM32, Странности фирменной реализации
Мусатов Констант...
сообщение Feb 3 2017, 11:23
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



Есть проект на FreeRTOS 9.0.0 на чипе STM32F745. Заготовка проекта собрана с помощью Куба, после чего в нем заменены ОС на версию 9 и fatfs на версию 12.
В принципе, работает. Небольшие файлы на флешке обслуживает нормально. Но вот с большими стал выскакивать hard_fault. Стал разбираться с реализацией и несколько подивился.
С одной стороны разработчики постарались использовать ОС для управления ожиданием USB HOST и перевели его работу на очередь. Однако, запрашивающий процесс (задача) обращается к USB через USBH_MSC_SCSI_Read
, после чего попадает в цикл ожидания
Код
  while (USBH_MSC_RdWrProcess(phost, lun) == USBH_BUSY)
  {
    if(((phost->Timer - timeout) > (10000 * length)) || (phost->device.is_connected == 0))
    {
      MSC_Handle->state = MSC_IDLE;
      return USBH_FAIL;
    }
  }

Это функция по циклу сверяет статусы и считает время. Вопрос: а почему бы тут не поставить семафор. Иначе получается, пока ждем коммуникацию по USB другим задачам время не достается. Поскольку запрашивающая данные задача имеет высокий приоритет (ну так надо), а данных запрошено достаточно много, то и ступор в работе ОС оказывается весьма заметным. Может кто сталкивался с таким вопросом и знает почему так сделано или уже перерабатывал этот механизм?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 06:22
Рейтинг@Mail.ru


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