工具/软件:
我的引导加载程序位于0x0000、应用程序位于0x2000、在应用程序中、如果我使用 delayCycle、它会闪烁 LED、但当我使用计时器时、它不工作。
这是我的跳转应用程序
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:
我的引导加载程序位于0x0000、应用程序位于0x2000、在应用程序中、如果我使用 delayCycle、它会闪烁 LED、但当我使用计时器时、它不工作。
这是我的跳转应用程序
您好、Sara:
您可以尝试使用以下代码从引导加载程序跳转到 APP:
__STATIC_INLINE void invokeBSLAsm(void) { /* Erase SRAM completely before jumping to BSL */ __asm( #if defined(__GNUC__) ".syntax unified\n" /* Load SRAMFLASH register*/ #endif "ldr r4, = 0x41C40018\n" /* Load SRAMFLASH register*/ "ldr r4, [r4]\n" "ldr r1, = 0x03FF0000\n" /* SRAMFLASH.SRAM_SZ mask */ "ands r4, r1\n" /* Get SRAMFLASH.SRAM_SZ */ "lsrs r4, r4, #6\n" /* SRAMFLASH.SRAM_SZ to kB */ "ldr r1, = 0x20300000\n" /* Start of ECC-code */ "adds r2, r4, r1\n" /* End of ECC-code */ "movs r3, #0\n" "init_ecc_loop: \n" /* Loop to clear ECC-code */ "str r3, [r1]\n" "adds r1, r1, #4\n" "cmp r1, r2\n" "blo init_ecc_loop\n" "ldr r1, = 0x20200000\n" /* Start of NON-ECC-data */ "adds r2, r4, r1\n" /* End of NON-ECC-data */ "movs r3, #0\n" "init_data_loop:\n" /* Loop to clear ECC-data */ "str r3, [r1]\n" "adds r1, r1, #4\n" "cmp r1, r2\n" "blo init_data_loop\n" /* Force a reset calling BSL after clearing SRAM */ "str %[resetLvlVal], [%[resetLvlAddr], #0x00]\n" "str %[resetCmdVal], [%[resetCmdAddr], #0x00]" : /* No outputs */ : [ resetLvlAddr ] "r"(&SYSCTL->SOCLOCK.RESETLEVEL), [ resetLvlVal ] "r"(DL_SYSCTL_RESET_BOOTLOADER_ENTRY), [ resetCmdAddr ] "r"(&SYSCTL->SOCLOCK.RESETCMD), [ resetCmdVal ] "r"( SYSCTL_RESETCMD_KEY_VALUE | SYSCTL_RESETCMD_GO_TRUE) : "r1", "r2", "r3", "r4"); }
谢谢!
此致
Johnson
1.通过调试器刷写引导加载程序、使用 UART 写入 App1并跳转到 App1、正常工作
2.通过调试器刷写引导加载程序,使用 UART 编写 App2并跳转到 App2,它正常工作
3.通过调试器刷写引导加载程序,使用 UART 编写 App1并跳转到 App1,它工作. 接下来、我从 App1跳转到 Boot、它正在工作、接下来我编写 App2并尝试跳转、它失败