LR_IROM1 0x00000000 0x00080000 { ; load region size_region
ER_IROM1 0x00000000 0x00080000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x10000000 0x00010000 { ; RW data
.ANY (+RW +ZI)
}
RW_RAM1 0xA0000000 UNINIT 0x02000000 { ; RW data
* (VRAM, GUI_RAM, GUIDEMO_STACK, FS_RAM, IP_RAM, USB_RAM)
}
} |
LR_IROM1 0x00006000 0x00079FFF { ; load region size_region
ER_IROM1 0x00006000 0x00079FFF { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x10000000 0x00010000 { ; RW data
.ANY (+RW +ZI)
}
RW_RAM1 0xA0000000 UNINIT 0x02000000 { ; RW data
* (VRAM, GUI_RAM, GUIDEMO_STACK, FS_RAM, IP_RAM, USB_RAM)
}
} |
void (*user_code_entry)(void); __disable_irq(); __set_MSP(*(__IO uint32_t*)FLASH_PROG_AREA_START); SCB->VTOR = FLASH_PROG_AREA_START & 0x1FFFFF80; user_code_entry = *(void (**)(void)) (FLASH_PROG_AREA_START+4); __enable_irq(); user_code_entry(); |
__asm void boot_jump( uint32_t address ){
LDR SP, [R0];Load new stack pointer address
LDR PC, [R0, #4];Load new program counter address
}
void execute_user_code(void)
{
/* Change the Vector Table to the USER_FLASH_START
in case the user application uses interrupts */
SCB->VTOR = FLASH_PROG_AREA_START & 0x1FFFFF80;
boot_jump(FLASH_PROG_AREA_START);
}
|