Reset Handler — 4 Phases
_reset_handler at 0x1000015C
Phase 1: Core Check
0x1000015C — 0x10000168
mov r0, #0xD0000000
Read CPUID -> Core 0 continues
Phase 2: Data Copy
0x1000016A — 0x10000176
ldmia r4!, {r1,r2,r3}
Copy .data from flash -> RAM
Phase 3: BSS Clear
0x10000178 — 0x10000184
stmia r1!, {r0}
r0 = 0
Zero all uninitialized globals
Phase 4: Platform Entry
0x10000186+
blx r1
-> main()
runtime_init -> main -> exit
Execution Flow
Core Check
CPUID == 0?
->
Data Copy
flash -> RAM
->
BSS Clear
zero globals
->
Platform Entry
-> main()!
Why check cores?
RP2350 has 2 cores.
Only Core 0 runs startup.
Core 1 returns to bootrom and waits.