目录
Bootloader 程序在跳转前设置 MSP 的时候会进入 NMI_Handler
Bootloader 程序在跳转前设置 MSP 的时候会进入 NMI_Handler
由于设置的 MSP 触发了 MPU Stack Error 导致进入异常。因此在设置 MSP 之前需要 禁用 HW Stack monitor:
/* Disable the HW Stack monitor for MSP and PSP */
R_MPU_SPMON->SP[MSP_SPMPU].PT = 0xA500;
R_MPU_SPMON->SP[PSP_SPMPU].PT = 0xA500;
R_MPU_SPMON->SP[MSP_SPMPU].CTL = 0x0000;
R_MPU_SPMON->SP[PSP_SPMPU].CTL = 0x0000;
Bootloader 程序跳转后死机
由于使用了RTOS, 在执行跳转的时候处于用户级,而跳转时设置的为特权级的栈MSP,跳转后仍在用户级状态下运行,且使用了原先在Boot程序中的用户级栈PSP,导致栈空间与 APP 程序冲突,并在运行过程中被改写,从而产生异常。因此若在用户级下执行跳转,需要先进入特权级再跳转:
....
__set_CONTROL(0);
boot();