Isliye _estack linker dwara highest RAM address + 1 (the end) set kiya jaata hai. Reset par MSP mein load hone ke baad, pehla push uske just below land karta hai.
Startup code bare metal par ek C program enable karne ke liye kya teen cheezein provide karta hai?
Ek valid stack (SP), initialized .data (copied Flash→RAM) aur zeroed .bss, aur main ke liye ek entry vector.
Cortex-M par, reset par hardware vector table ke pehle do words se kya load karta hai?
Word 0 → initial Main Stack Pointer (MSP); Word 1 → Program Counter (Reset_Handler ka address).
Vector table entry 0 ek real function pointer kyun NAHI hai?
Yeh initial stack-top value hai; ise function-pointer type mein sirf array mein fit hone ke liye cast kiya jaata hai. Hardware ise MSP ki tarah use karta hai, kabhi us par jump nahi karta.
.data aur .bss mein kya fark hai?
.data = initialized globals (values Flash mein stored, reset par RAM mein copy). .bss = zero-initialized globals (Flash storage nahi; reset par 0 par clear).
.data copy ko kaunse linker symbols drive karte hain aur kyun?
_sidata (Flash source), _sdata/_edata (RAM dest range). Copy har RAM offset ko _sidata se same Flash offset par map karta hai.
Reset handler ko forever loop kyun karna chahiye agar main() return kare?
Return karne ke liye koi OS nahi hai; returning PC mein garbage pop kar dega. Infinite loop use safely trap karta hai.
Cortex-M par stack kis direction mein grow karta hai aur _estack kahan point karta hai?
Full-descending: neeche ki taraf grow karta hai. _estack = RAM ka top (highest address + 1), MSP mein load hota hai.
Agar aap .bss zero karna bhool jaao toh real-world bug kya aata hai?
Uninitialized globals random power-up RAM garbage se start hoti hain; kuch boards par kaam karta hai, doosron par fail karta hai — ek heisenbug.
Hardware interrupt entry ko bhi registers push karne ke liye valid stack chahiye; functions ko return addresses/locals store karne ke liye chahiye.
Recall Feynman: explain to a 12-year-old
Socho tumne ek robot banaya aur switch on kiya. Robot ka brain bilkul blank jaagta hai — use yeh bhi nahi pata ki uska notebook (memory) kahan hai. Startup code ek chhoti si checklist hai jo robot pehle run karta hai:
"Mera notes likhne ka notebook kahan hai? → stack lo."
"Apne starting facts permanent book (Flash) se scribble notebook (RAM) mein copy karo."
"Khaali pages ko truly empty karo (zero karo), taaki woh purani smudges se bhari na hon."
Sirf is tidy-up ke baad hi robot apna asli kaam (main) shuru karta hai. Checklist skip karo aur robot smudges ko facts ki tarah padhega aur haywire ho jaayega.