FreeRTOS голодание и нарезка времени - PullRequest
0 голосов
/ 02 июня 2019

У меня проблема с запуском FreeRTOS на процессоре cortex m4.У меня есть 3 задачи: периодическая и 2 непрерывных.

static const char text1[] = "Periodic task\r\n";
static const char text2[] = "Continous Task\r\n";
static const char text3[] = "Continous Task 2\r\n";

void periodicTask(void *pvParameter)
{
    TickType_t prevCount;
    char *printText = (char*)pvParameter;

    prevCount= xTaskGetTickCount();

    for(;;)
    {
        printf(printText);

        vTaskDelayUntil(&prevCount,pdMS_TO_TICKS(5));
    }
}

void continousTask(void *pvParameter)
{
    char *printText = (char*)pvParameter;

    for(;;)
    {
        printf(printText);
        vTaskDelay(1);
    }
}

int main(void) 
{

    xTaskCreate(periodicTask,"periodic task",200,(void*)text1,3,NULL);
    xTaskCreate(continousTask,"continous task 1",200,(void*)text2,0,NULL);
    //xTaskCreate(continousTask,"continous task 2",200,(void*)text3,0,NULL);


    vTaskStartScheduler();

    while(1)
    {

    }
    return 0 ;
}

Выше код выполняется просто отлично, но только если я получил vTaskDelay(1) в continousTask, если я удалю его, моя непрерывная задача 2 и периодическая задача будут голодать (илизапустить не в нужный период), который не должен выполняться, потому что периодическая задача имеет более высокий приоритет.Непрерывное задание 2 также не должно голодать, потому что я определил configUSE_TIME_SLICING 1.

1 Ответ

1 голос
/ 02 июня 2019

Скорее всего, причиной будут операторы печати.Как они реализованы?Если они используют полухостинг, то планировщик не будет работать должным образом, поскольку возникнут аппаратные конфликты.Если они не используют полухостинг, убедитесь, что они блокируют записи (я имею в виду, что задача, выполняющая запись, переходит в заблокированное состояние, поэтому не использует никакого времени процессора и позволяет запускать другую задачу, пока фактически выполняется IO).В бесплатной книге (https://www.freertos.org/Documentation/RTOS_book.html) больше опасностей использования printf ().

...