Fondamenti · Lezione 8 di 11 · circa 15 min

RTOS: tanti lavori su un solo chip

Task, priorità e code

Un dispositivo può dover leggere un sensore ogni 10 ms, aggiornare uno schermo lento e inviare dati, tutto insieme. In un semplice ciclo, un lavoro lento fa ritardare gli altri. Un sistema operativo real-time (RTOS) risolve il problema.

void SensorTask(void *p) {
    for (;;) {
        float t = read_temperature();
        xQueueSend(tempQueue, &t, 0);          // hand the value to the display task
        vTaskDelay(pdMS_TO_TICKS(10));         // sleep 10 ms, the CPU is free
    }
}

xTaskCreate(SensorTask,  "sensor",  256, NULL, 3, NULL);   // high priority
xTaskCreate(DisplayTask, "display", 256, NULL, 1, NULL);   // low priority
vTaskStartScheduler();                                      // never returns

Real-time non significa veloce. Significa prevedibile: il task importante viene sempre eseguito entro un tempo noto. Lo scheduler stesso è guidato da un interrupt del timer.

Domande da colloquio

  1. Che cos’è l’inversione di priorità e come si risolve?
  2. Coda o variabile globale: come devono condividere i dati due task?
  3. Quando un semplice ciclo è meglio di un RTOS?

Qui non ci sono le risposte, apposta: prova prima a rispondere ad alta voce. Nell’app BoardPilot l’allenatore per i colloqui legge la tua risposta e ti dice cosa era giusto, cosa manca e cosa chiederebbe dopo un intervistatore senior (usa il fornitore di IA che scegli nell’app). Domande da colloquio sui sistemi embedded →

Parole chiave

Nell’app le lezioni prendono vita

Nell’app le lezioni hanno demo interattive ed esercitazioni pratiche verificate sulla tua scheda. Queste pagine sono la versione da leggere: le demo sono descritte a parole e le esercitazioni richiedono l’app.

Scarica BoardPilot Prova le lezioni nel browser