Easyelectronics.ru

Электроника для всех
Текущее время: 22 ноя 2017, 12:12

Часовой пояс: UTC + 5 часов



    • 10 шт. 2-слоя 100*100mm 2$. Быстрый заказ: JLCPCB.com
    • JLCPCB - это крупнейшая фабрика PCB прототипов в Китае.
    • Имеющий более 290,000 клиентов и выполняющий более 8,000 заказов в день.
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Задачи и задержки
СообщениеДобавлено: 02 май 2013, 23:03 
Старожил

Зарегистрирован: 13 фев 2012, 23:48
Сообщения: 714
Откуда: Украина, Харьков
Работаю с FreeRTOS и RTX. Возник вопрос. запускаются 2 задачи с одинаковым приоритетом. Обе запускаются одновременно. В одной стоит vTaskDelayUntil(1), а в другой vTaskDelayUntil(5), т.е. перередавать управление на задачи соответственно каждую 1 мс и 5 мс.
Запустятся ли обе задачи на 5 мс?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачи и задержки
СообщениеДобавлено: 02 май 2013, 23:20 
Старожил
Аватара пользователя

Зарегистрирован: 18 фев 2010, 14:42
Сообщения: 1153
Откуда: Лондон
Первой запустится та задача, которая была создана первой. Ну или которая в списке задач окажется ближе к началу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачи и задержки
СообщениеДобавлено: 02 май 2013, 23:26 
Старожил

Зарегистрирован: 13 фев 2012, 23:48
Сообщения: 714
Откуда: Украина, Харьков
cahbtexhuk писал(а):
Первой запустится та задача, которая была создана первой. Ну или которая в списке задач окажется ближе к началу.

Поставлю вопрос по другому. На пятом кванте (мс) запустятся обе задачи? Для первой задачи с vTaskDelayUntil(1) будет 5й запуск. А для второй с vTaskDelayUntil(5) будет 1й запуск. Верно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачи и задержки
СообщениеДобавлено: 03 май 2013, 13:11 
Старожил
Аватара пользователя

Зарегистрирован: 18 фев 2010, 14:42
Сообщения: 1153
Откуда: Лондон
Верно. Только будет второй запуск второй задачи. Отлично написал, да...
Допустим создаются задачи так - опустим полную инициализацию:
Код:
xTaskCreate(Task1ms);
xTaskCreate(Task5ms);

Они будут бегать так:
Код:
Task1ms
Task5ms
Task1ms
Task1ms
Task1ms
Task1ms
Task1ms
Task5ms

Так как многозадачности и дохуядерности, как таковой, нет - задачи будут выполнятся по очереди. С точки зрения пользователя на 5 милисекунде сработают обе задачи, с точки зрения ядра - на 5мс сработает первая задача, на 5.1 мс (приблизительно, хз, сколько у тебя там задача первая выполняется) сработает вторая. На 6 мс - первая итд. Если у тебя таск выполняется порядка 10 мс и приоритет одинаковый - вторая задача никогда не прервет первую во время выполнения.
Ну как-то так


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачи и задержки
СообщениеДобавлено: 03 май 2013, 15:57 
Старожил

Зарегистрирован: 13 фев 2012, 23:48
Сообщения: 714
Откуда: Украина, Харьков
cahbtexhuk писал(а):
...задачи будут выполнятся по очереди. С точки зрения пользователя на 5 милисекунде сработают обе задачи, с точки зрения ядра - на 5мс сработает первая задача, на 5.1 мс (приблизительно, хз, сколько у тебя там задача первая выполняется) сработает вторая. На 6 мс - первая итд. Если у тебя таск выполняется порядка 10 мс и приоритет одинаковый - вторая задача никогда не прервет первую во время выполнения.
Ну как-то так

Спасибо за развёрнутый ответ. За временем выполнения слежу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачи и задержки
СообщениеДобавлено: 15 дек 2014, 04:25 
Только пришел

Зарегистрирован: 15 дек 2014, 01:18
Сообщения: 11
Добрый день у меня такой вопросик, в общем у меня плата STM32F4Discovery. Запустил FreeRTOS в оболочке IAR 6.5. Запускаю аудио чип CIRRUS CS43L22 который уже установлен на плату Discovery. Хочу сформировать меандр 500Гц. В итоге получил меандр, но каждые 100ms у меня провал получается как на графике, если в задаче vBlinkTask меняю vTaskDelay(50) скажем на vTaskDelay(100), то провал в выходном сигнале наблюдается каждые 200ms. Самое интересное проверял тактирование I2S: SCLK, SDIN, MCLK,LRCK, RESET и I2C SCK SDA - все тактируется. И еще самое интересное в этом же проекте, до запуска задач(Task) делаю тупой бесконечный цикл с задержками и в итоге имею чистый меандр на выходе CS43L22.
Вот не могу понять в чем может быть дело? Подскажите. Прилагаю осциллограмму нижний график это меандр на аналогом выходе CS43L22, верхний график это пачка которая приходит на SDIN.
И фрагмент кода.
Код:
xTaskCreate(vBlinkTask, "BlinkTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);
  xTaskCreate(vPlayAudio, "PlayAudio", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);
  xTaskCreate(vTickWave,  "TickWave",  configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);
  //Запускаем шедулер - диспетчер задач. Он будет следить за приоритетами, переключением задач, ошибками и прочим.
  vTaskStartScheduler();


Код:
/*****************************************************************************
Задание проиграть аудио через CS32L22
******************************************************************************/
void vPlayAudio(void *pvParameters)
{
  while(1)
    {
        // Если флаг выставлен, то можно передавать данные
   if((SPI3->SR & SPI_I2S_FLAG_TXE)) //(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE))
   {
       if (state == 0x00)

       {
              GPIOD->ODR ^= GPIO_Pin_12; 
              // Если переменная state = 0, то посылаем нули
      //SPI_I2S_SendData(SPI3, 0x0000);
              SPI3->DR = 0x0000;
       }
       else
       {
                // А если переменная state != 0, то посылаем
                // максимальное значение, в итоге получаем
                // прямоугольные импульсы
         //SPI_I2S_SendData(SPI3, 0x7FFF);
              SPI3->DR = 0x7FFF;
       }
   }         
    }
}


Код:
void vBlinkTask (void *pvParameters)
{
    while(1)
      {
       GPIOD->ODR ^= GPIO_Pin_13;
       vTaskDelay(50); //Только такие задержки можно использовать в FreeRTOS. Забудьте про обычные долгие пустые циклы!
      }
}
void vBlinkTask (void *pvParameters)
{
    while(1)
      {
       GPIOD->ODR ^= GPIO_Pin_13;
       vTaskDelay(50);
      }
}


void vTickWave (void *pvParameters)
{
    while(1)
      {
       //GPIOD->ODR ^= GPIO_Pin_12;
       state ^= 0x01;
       vTaskDelay(1); //Только такие задержки можно использовать в FreeRTOS. Забудьте про обычные долгие пустые циклы!
      }


}


Вложения:
WA000003.jpg
WA000003.jpg [ 41.28 Кб | Просмотров: 6642 ]
WA000002.jpg
WA000002.jpg [ 48.33 Кб | Просмотров: 6642 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Задачи и задержки
СообщениеДобавлено: 15 дек 2014, 05:21 
Старожил

Зарегистрирован: 13 фев 2012, 23:48
Сообщения: 714
Откуда: Украина, Харьков
Geryhold писал(а):
Добрый день у меня такой вопросик, в общем у меня плата STM32F4Discovery. Запустил FreeRTOS в оболочке IAR 6.5. Запускаю аудио чип CIRRUS CS43L22 который уже установлен на плату Discovery. Хочу сформировать меандр 500Гц. В итоге получил меандр, но каждые 100ms у меня провал получается как на графике, если в задаче vBlinkTask меняю vTaskDelay(50) скажем на vTaskDelay(100), то провал в выходном сигнале наблюдается каждые 200ms. Самое интересное проверял тактирование I2S: SCLK, SDIN, MCLK,LRCK, RESET и I2C SCK SDA - все тактируется. И еще самое интересное в этом же проекте, до запуска задач(Task) делаю тупой бесконечный цикл с задержками и в итоге имею чистый меандр на выходе CS43L22.
Вот не могу понять в чем может быть дело?

1. Совсем не понятно, почему вы меандр генерируете Аудио ЦАПом.
2. Скорее всего проблема с таймингами. Контроллер не успевает отправить данные в ЦАП. Посмотрите пример ЦАПа работающего на прерываниях http://mikrocontroller.bplaced.net/wordpress/?page_id=2180.
3. Нужно сгенерировать буфер аудиоданных и отправлять в ЦАП, не иначе.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB