V tomto článku se budeme zabývat plánováním úloh. Zjistíme jak funguje plánovač v operačním systému FreeRTOS.

FreeRTOS implicitní plánovač

  • Pevná priorita  — plánovač neustále nemění prioritu úloh

  • Preemptivní

  • Round-robin

  • Time sliced

Stavy úlohy

task states

Priority úloh

  • Priority může být mezi 0 až configMAX_PRIORITIES

  • Nižší číslo znamená nižší prioritu

  • Plánovač FreeRTOS vždy zajistí, že úlohy s vyšší prioritou dosáhnou stavu ze stavu ready do stavu running

  • Úlohy se stejnou prioritou budou planovány stylem round-robin

Příklad

CMakeLists.txt
add_executable(blink
        main.c
)

pico_enable_stdio_usb(blink 1)
pico_enable_stdio_uart(blink 0)

target_link_libraries(blink pico_stdlib freertos)
pico_add_extra_outputs(blink)
main.c
#include <FreeRTOS.h>
#include <task.h>
#include <stdio.h>
#include "pico/stdlib.h"


void task1(void *pvParameters)
{
    while (true) {
        printf("Task 1 is currently running\n");
        for(int i = 0; i<20000000; i++){};
        //vTaskDelay(100);
    }
}

void task2(void *pvParameters)
{
    while (true) {
        printf("Task 2 is currently running\n");
        for(int i = 0; i<20000000; i++){};
        //vTaskDelay(100);
    }
}

int main()
{
    stdio_init_all();

    xTaskCreate(task1, "Task 1", 256, NULL, 1, NULL);
    xTaskCreate(task2, "Task 2", 256, NULL, 2, NULL);
    vTaskStartScheduler();

    while(1){};
}

Zdroje a odkazy