工具/软件:
我的引导加载程序位于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并尝试跳转、它失败