Skip to content

Commit 55f88a0

Browse files
committed
M487: Re-implement Reset_Handler() in naked inline assembly
This is to guarantee SRAM bank2, not initialized yet, isn't used for stack by function preamble code at the very start.
1 parent 5c16018 commit 55f88a0

File tree

1 file changed

+5
-11
lines changed

1 file changed

+5
-11
lines changed

targets/TARGET_NUVOTON/TARGET_M480/device/startup_M480.c

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -360,18 +360,12 @@ __asm void Reset_Handler_Cascade(void *sp, void *pc)
360360

361361
#elif defined (__GNUC__) || defined (__ICCARM__)
362362

363-
void Reset_Handler(void)
363+
__attribute__((naked)) void Reset_Handler(void)
364364
{
365-
/* NOTE: In debugger disassembly view, check initial stack cannot be accessed until initial stack pointer has changed to 0x20000200 */
366-
__asm volatile (
367-
"mov sp, %0 \n"
368-
"mov r0, sp \n"
369-
"mov r1, %1 \n"
370-
"b Reset_Handler_Cascade \n"
371-
: /* output operands */
372-
: "l"(0x20000200), "l"(&Reset_Handler_1) /* input operands */
373-
: "r0", "r1", "cc" /* list of clobbered registers */
374-
);
365+
__asm("ldr sp, =0x20000200 \n");
366+
__asm("mov r0, sp \n");
367+
__asm("ldr r1, =Reset_Handler_1 \n");
368+
__asm("b Reset_Handler_Cascade \n");
375369
}
376370

377371
void Reset_Handler_Cascade(void *sp, void *pc)

0 commit comments

Comments
 (0)