FreeRTOS — task creation, priorities, xTaskCreate
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 |

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 preemptYeh 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 laterRecall 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?
xTaskCreate mein usStackDepth ka unit kya hai?
xTaskCreate ke 6 parameters kya hain order mein?
xTaskCreate success par kya return karta hai vs failure par?
High-priority task ko block kyun karna chahiye (jaise vTaskDelay)?
Do READY tasks ki equal priority ho toh kya hota hai?
Char task states kya hain?
TCB kya hai?
tskIDLE_PRIORITY (0) par kya chalta hai?
Task function kabhi return kyun nahi karna chahiye?
for(;;) mein wrap karo ya cleanly bahar nikalne ke liye vTaskDelete(NULL) call karo.pdMS_TO_TICKS kya karta hai aur kyun zaroori hai?
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?
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