5.5.10 · HinglishEmbedded Systems & Real-Time Software

FreeRTOS — task creation, priorities, xTaskCreate

1,821 words8 min readRead in English

5.5.10 · Coding › Embedded Systems & Real-Time Software


WHAT hai ek task?

Ek task hamesha exactly ek state mein hota hai:

State Matlab
Running Abhi CPU use kar raha hai (single core par ek waqt mein sirf ek)
Ready Chalne ke liye taiyaar hai, CPU ka intezaar kar raha hai
Blocked Kisi event ka intezaar kar raha hai (delay, queue, semaphore) — koi CPU nahi lagta
Suspended Scheduling se hata diya gaya hai jab tak resume na ho
Figure — FreeRTOS — task creation, priorities, xTaskCreate

HOW karte hain task create: xTaskCreate


Priorities — scheduling ka dil


Worked Example 1 — do blinking LEDs

void vBlink(void *pvParameters) {
    int pin = (int)pvParameters;          // Why? pass which LED via param
    for (;;) {                            // Why? a task NEVER returns
        gpio_toggle(pin);
        vTaskDelay(pdMS_TO_TICKS(500));   // Why? Blocked → frees CPU for others
    }
}
 
void main(void) {
    xTaskCreate(vBlink, "L1", 128, (void*)13, 1, NULL);  // Why prio 1: above idle
    xTaskCreate(vBlink, "L2", 128, (void*)14, 1, NULL);  // Why same prio: fair share
    vTaskStartScheduler();   // Why? hands control to FreeRTOS; never returns
    for(;;);                 // Why? only reached if heap was too small
}

pdMS_TO_TICKS kyun? FreeRTOS time ko ticks mein count karta hai, ms mein nahi. Yeh macro configTICK_RATE_HZ use karke convert karta hai, code ko readable aur portable rakhta hai.

Worked Example 2 — priority preemption

void vHigh(void *p){ for(;;){ readSensor(); vTaskDelay(pdMS_TO_TICKS(10)); } }
void vLow (void *p){ for(;;){ heavyMath(); } }   // never blocks!
 
xTaskCreate(vLow,  "low",  256, NULL, 1, NULL);
xTaskCreate(vHigh, "high", 256, NULL, 3, NULL);   // Why prio 3 > 1: must preempt

Yeh kaam kyun karta hai? Har 10 ms mein vHigh Ready ho jaata hai. Kyunki 3 > 1 hai, scheduler vLow ko instantly preempt kar deta hai, sensor read chala deta hai, phir vHigh block ho jaata hai aur vLow apna math resume kar leta hai. Sensor ko deterministic timing milti hai chahe vLow CPU hoga kyu na kar raha ho.

Worked Example 3 — return value check karna

TaskHandle_t h;
if (xTaskCreate(vBlink, "L", 4096, NULL, 1, &h) != pdPASS) {
    // Why check? huge stack (4096 words = 16 KB) may exhaust the heap
    error_blink();   // fail loudly instead of silently not running
}
vTaskDelete(h);      // Why store handle? to delete/suspend this task later


Recall Feynman: ek 12-saal ke bachche ko samjhao

Socho ek cook (CPU) ek kitchen mein kai recipes (tasks) ke saath hai. Cook ek waqt mein sirf ek kaam kar sakta hai, lekin ek smart manager (scheduler) use itni tezi se switch karta hai ki lag ta hai sab dishes ek saath ban rahi hain. Har recipe ka ek urgency number hota hai — bada number = sab chhod do aur yeh pehle karo. xTaskCreate woh moment hai jab aap manager ko ek naya recipe card dete ho, use bata ke kitni counter space (stack) chahiye aur yeh kitna urgent hai. Ek achchi recipe kehti hai "ab 5 minute wait karo" (vTaskDelay) taaki cook doosron ki madad karne jaa sake bekar khade rehne ki jagah.


Flashcards

FreeRTOS mein, kya higher priority number zyada urgent hoti hai ya kam?
Zyada urgent — numerically sabse bada READY priority hamesha chalta hai.
xTaskCreate mein usStackDepth ka unit kya hai?
Words, bytes nahi (sizeof(StackType_t) se multiply karo, jaise Cortex-M par ×4).
xTaskCreate ke 6 parameters kya hain order mein?
Function, Name, StackDepth(words), Parameters(void*), Priority, &TaskHandle.
xTaskCreate success par kya return karta hai vs failure par?
Success par pdPASS; errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY agar heap mein stack+TCB fit na ho.
High-priority task ko block kyun karna chahiye (jaise vTaskDelay)?
Warna woh CPU kabhi yield nahi karta aur sabhi lower-priority tasks starve ho jaate hain.
Do READY tasks ki equal priority ho toh kya hota hai?
Round-robin time-slicing (agar configUSE_TIME_SLICING=1 ho) — CPU fairly share hota hai.
Char task states kya hain?
Running, Ready, Blocked, Suspended.
TCB kya hai?
Task Control Block — kernel struct jo task ki priority, state, stack pointer store karta hai; har task ke saath uske stack ke saath allocate hota hai.
tskIDLE_PRIORITY (0) par kya chalta hai?
Idle task — sabse low priority, tab chalta hai jab kuch aur ready nahi hota.
Task function kabhi return kyun nahi karna chahiye?
Return karna scheduler ko corrupt kar deta hai; for(;;) mein wrap karo ya cleanly bahar nikalne ke liye vTaskDelete(NULL) call karo.
pdMS_TO_TICKS kya karta hai aur kyun zaroori hai?
Milliseconds ko configTICK_RATE_HZ use karke kernel ticks mein convert karta hai; FreeRTOS time ko ticks mein count karta hai, ms mein nahi.
Default FreeRTOS scheduler mein preemption kya hai?
Ek higher-priority task ka READY hona ek running lower-priority task ko immediately interrupt kar deta hai.

Connections

  • FreeRTOS — vTaskDelay vs vTaskDelayUntil
  • FreeRTOS — Queues and inter-task communication
  • FreeRTOS — Semaphores and Mutexes
  • Priority Inversion and Priority Inheritance
  • Context Switching and the TCB
  • ISR-safe APIs (FromISR) and deferred interrupt handling
  • Heap memory management (heap_1..heap_5) in FreeRTOS
  • Round-robin vs Preemptive Scheduling

Concept Map

solved by

provides

contains

is

picks highest

created by

has

has

higher number = more urgent

lowest is 0

holds state in

allocates

allocates

is in one

Blocked uses

Many jobs one CPU core

FreeRTOS

Task = infinite loop

Scheduler

Preemptive priority-based

READY task runs

xTaskCreate

Own stack in words

Priority number

Idle task

TCB Task Control Block

State Running Ready Blocked Suspended

No CPU