Foundations — FreeRTOS — task creation, priorities, xTaskCreate
5.5.10 · D1· Coding › Embedded Systems & Real-Time Software › FreeRTOS — task creation, priorities, xTaskCreate
Yeh page kuch bhi assume nahi karta. Pehle aap parent note ko touch karo, usse pehle aapko us mein use hone wale har symbol ko padhna aana chahiye. Isliye hum unhe ek-ek karke banate hain, har ek ko ek picture se anchor karke.
0. "CPU core" kya hota hai, aur ek hi kyun problem hai?
Socho ek akela cook ek stove par khada hai. Woh is waqt sirf ek pot stirr kar sakta hai. Yahi poori mushkil hai: aapke paas bahut saare pots hain (LED blink karo, sensor read karo, UART bytes bhejo) lekin haath ek hi joda hai.

1. Ek while(1) loop — ek "job" ki shape
for (;;) { // read: "forever, do..."
toggle_led();
wait_a_bit();
}Socho railway track ka ek loop: train (code mein CPU ki position) baar baar ghoomti rehti hai aur kabhi kisi aise station par nahi pahunchti jahan woh ruk jaaye.
Topic ko yeh kyun chahiye: FreeRTOS mein ek task exactly inhi loops mein se ek hota hai. Ek normal C function ek seedhi sadak hoti hai jo return ke saath khatam hoti hai; ek task ek circle hai jo kabhi khatam nahi hota. (Parent ki mistake #4 — "task ko return karne dena" — precisely isi circle ko todna hai.)
2. Stack — ek running loop ka scratch paper

Kyunki hamara ek cook recipes ke beech switch kar raha hai, har recipe ko apna private notepad chahiye taaki unki writings mix na ho jaayein. Woh notepad hi stack hai. Har task ko apna ek milta hai.
Ise aise padho: reserved bytes = aapne jitne words maange × ek word mein kitne bytes hain. Cortex-M par, sizeof(StackType_t) 4 hai, isliye 128 words → 512 bytes.
3. Priority — ek number jo urgency rank karta hai
Socho recipe cards ki ek line, har ek par corner mein ek number stamp kiya hua. Manager hamesha sabse zyada number wala card pehle uthata hai.
Valid range hai 0 .. (configMAX_PRIORITIES - 1). -1 sirf isliye hai kyunki hum 0 se count karte hain: agar aap 5 levels allow karte ho (configMAX_PRIORITIES = 5), toh legal numbers hain 0,1,2,3,4 — paanch values, sabse upar wala hai 4.
4. Chaar task states — ek job "kahan" ho sakti hai

| State | Simple words | CPU use karta hai? |
|---|---|---|
| Running | abhi CPU par actively hai | haan (ek waqt mein sirf ek) |
| Ready | chalne ke liye ready hai, bas apni baari ka wait kar raha hai | nahi, lekin chahta hai |
| Blocked | kisi event tak so raha hai (delay khatam hogi, data aayega) | nahi — kuch bhi cost nahi |
| Suspended | manually shelf par rakha gaya hai jab tak koi resume kare | nahi |
5. Scheduler — woh manager jo switch karta hai
Socho manager har waqt recipe cards scan kar raha hai: "Kya cook jo abhi kar raha hai usse zyada urgent kuch hai? Agar haan — turant switch karo."
Ek task ke registers ko save karne aur doosre ke load karne ki actual act ko context switch kehte hain; saved bundle ek TCB mein rehta hai (agla section). Deep dive: Context Switching and the TCB.
6. TCB — task ka identity card
Socho ek index card jise manager har recipe ke liye rakhta hai: naam, urgency number, aur ek bookmark jo kehta hai "cook is recipe ke step 7 par tha." Jab manager kisi task par wapas aata hai, woh bookmark padhta hai aur wahin se resume karta hai.
Topic ko yeh kyun chahiye: ek task create karne mein stack + ek TCB ka memory lagta hai. Isliye xTaskCreate fail ho sakta hai agar heap zyada chhoti ho.
7. Heap, pdPASS, aur return codes
BaseType_t aur UBaseType_t simply FreeRTOS ke naam hain "CPU ke natural signed / unsigned integer type" ke liye — inhe plain int-jaisi whole numbers ki tarah use karo.
8. Ticks — FreeRTOS time kaise count karta hai
9. Pointers aur void * — ek job ko uski ingredients dena
Parent ke Example 1 mein, (void*)13 pin number 13 ko is pointer ke zariye andar le jaata hai, aur (int)pvParameters ise wapas integer mein unpack karta hai. Prefixes pv, pc, ux, px sirf Hungarian hints hain: pv=pointer-to-void, pc=pointer-to-char, ux=unsigned, px=pointer.
Prerequisite map
Har foundation xTaskCreate ko feed karta hai: aap ise ek loop, ek stack size (words mein, heap se draw karke ek TCB banane ke liye), ek priority, aur ek parameter dete ho — phir scheduler ise states ke beech chalaata hai, ticks use karke uski neend time karta hai.
Equipment checklist
Khud test karo — sirf bol ke jawab dene ke baad reveal karo.
Ek CPU core ek hi waqt mein kitni cheezein execute kar sakta hai?
Ek task ke code ki shape kaisi hoti hai, aur yeh normal function se kaise alag hai?
for(;;)) jo kabhi return nahi karta; ek normal function return ke saath khatam hota hai.Stack kya hota hai, aur usStackDepth kaun si unit use karta hai?
Ek 32-bit Cortex-M par ek word mein kitne bytes hote hain?
FreeRTOS mein, bada priority number zyada urgent matlab hai ya kam urgent?
Agar configMAX_PRIORITIES 5 ho toh sabse zyada legal priority value kya hai?
0..configMAX_PRIORITIES-1 tak chalti hain.Charon task states ke naam batao.
Wait karte waqt kaun sa task state zero CPU use karta hai?
Scheduler kya karta hai?
TCB mein kya store hota hai?
xTaskCreate fail kyun ho sakta hai?
FreeRTOS time ko kis mein count karta hai, aur usse ms mein convert karne ke liye kya use karte hain?
pdMS_TO_TICKS(ms) configTICK_RATE_HZ use karke.