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

 
 
> FreeRTOS + USB
Atlantis-
сообщение Aug 5 2014, 13:24
Сообщение #1


Местный
***

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



Здравствуйте!
Как правильней объединить USB (конкретно обработчик прерываний) и задачи по приему данных и обработке реквестов? надо ли всю обработку прерывания совать в задачу и потом семафором ее вызывать или можно вызывать задачу только когда пришли данные?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
uriy
сообщение Jun 10 2015, 08:29
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



На STM32F103 я использую семафоры:

Прерывание:
Код
void EP2_OUT_Callback(void)
{
    SetEPRxStatus(ENDP2, EP_RX_VALID);

    static portBASE_TYPE xHigherPriorityTaskWoken;
    xHigherPriorityTaskWoken = pdFALSE;
    xSemaphoreGiveFromISR(xSemaphoreUSB_EP2_OUT, &xHigherPriorityTaskWoken );
}


Задача:
Код
void prvUSB( void *pvParameters )
{
    uint8_t                answer[64];
    GPIO_InitTypeDef      GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    //Set PA11,12 as USB_DM,DP
    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11 | GPIO_Pin_12;        // set DAC1 pin as analog output
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    xSemaphoreUSB_EP2_OUT = xSemaphoreCreateBinary();

    USB_Disconnect_Config();
    Set_USBClock();
    USB_Interrupts_Config();
    USB_Init();

    while(1)
    {
        if(xSemaphoreUSB_EP2_OUT != NULL)
        {
            if( xSemaphoreTake( xSemaphoreUSB_EP2_OUT, portMAX_DELAY  ) == pdTRUE )
            {
                // в answer получаем данные с хоста
                USB_SIL_Read(EP2_OUT, answer);

                // отправляем данные на хост
                USB_SIL_Write(EP1_IN, answer, 64);
                SetEPTxValid(ENDP1);
            }
        }
    }
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Atlantis-   FreeRTOS + USB   Aug 5 2014, 13:24
- - den_po   Зачем семафором? Для этого очереди есть. А что в п...   Aug 5 2014, 13:49
|- - Atlantis-   Цитата(den_po @ Aug 5 2014, 17:49) Зачем ...   Aug 6 2014, 05:21
- - den_po   http://www.freertos.org/ -> download в дистрибу...   Aug 6 2014, 05:49
|- - Atlantis-   Цитата(den_po @ Aug 6 2014, 09:49) http:/...   Aug 6 2014, 06:03
- - gridinp   а что за процессор, что за USB контроллер, master ...   Aug 8 2014, 18:36
|- - Atlantis-   Цитата(gridinp @ Aug 8 2014, 22:36) а что...   Aug 13 2014, 06:07
- - Atlantis-   Еще вопрос: насколько правильно будет для обработк...   Jun 9 2015, 12:44
- - Atlantis-   а обработка USB-запросов аналогичным образом?   Jun 10 2015, 14:15
- - uriy   Нет. В задаче у меня обрабатывается только поступл...   Jun 11 2015, 08:12
|- - Atlantis-   Цитата(uriy @ Jun 11 2015, 11:12) Нет. В ...   Jun 11 2015, 11:21
- - uriy   Для коротких прерываний нет смысла создавать задач...   Jun 11 2015, 19:04
|- - Atlantis-   У меня много разных USB запросов и наверно было бы...   Jun 23 2015, 07:49
- - uriy   Так в примере который я приложил тоже отправляются...   Jun 23 2015, 08:39
- - Atlantis-   В STM-овских библиотеках сделано так: когда приход...   Jun 24 2015, 05:44


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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 00:02
Рейтинг@Mail.ru


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