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); } |