5.5.10 · D1 · HinglishEmbedded Systems & Real-Time Software

FoundationsFreeRTOS — task creation, priorities, xTaskCreate

2,252 words10 min read↑ Read in English

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.

Figure — FreeRTOS — task creation, priorities, xTaskCreate

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

Figure — FreeRTOS — task creation, priorities, xTaskCreate

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

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

One CPU core

Task = infinite loop

Four task states

Stack in words

TCB per task

Heap memory

Priority number

Scheduler picks highest ready

Ticks and tick rate

Blocked via vTaskDelay

void star parameter

xTaskCreate

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?
Exactly ek — baaki sab kuch tezi se switching se ek illusion create karta hai.
Ek task ke code ki shape kaisi hoti hai, aur yeh normal function se kaise alag hai?
Ek infinite loop (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 task ki private scratch memory (local vars + call history); bytes mein nahi, words mein measure kiya jaata hai.
Ek 32-bit Cortex-M par ek word mein kitne bytes hote hain?
4 bytes, isliye 128 words = 512 bytes.
FreeRTOS mein, bada priority number zyada urgent matlab hai ya kam urgent?
Zyada urgent — numerically sabse bada Ready task chalta hai.
Agar configMAX_PRIORITIES 5 ho toh sabse zyada legal priority value kya hai?
4, kyunki values 0..configMAX_PRIORITIES-1 tak chalti hain.
Charon task states ke naam batao.
Running, Ready, Blocked, Suspended.
Wait karte waqt kaun sa task state zero CPU use karta hai?
Blocked.
Scheduler kya karta hai?
Sabse zyada priority wala Ready task choose karta hai run karne ke liye, neeche waalon ko preempt karke.
TCB mein kya store hota hai?
Ek task ki priority, state, aur stack pointer (uska resume bookmark).
xTaskCreate fail kyun ho sakta hai?
Heap nayi stack + TCB fit nahi kar sakta; woh errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY return karta hai.
FreeRTOS time ko kis mein count karta hai, aur usse ms mein convert karne ke liye kya use karte hain?
Ticks; pdMS_TO_TICKS(ms) configTICK_RATE_HZ use karke.
pvParameters void * kyun hai?
Taaki ek task ko koi bhi ek argument diya ja sake chahe uska type kuch bhi ho.