NXP MCU 技术论坛
直播中

张鑫

7年用户 1050经验值
私信 关注
[问答]

S32K118如何使用S32K Design Studio正确地从Bootloader跳转到App?

我正在使用 S32K118 处理器创建我的第一个引导加载程序,但我似乎无法正确跳转到我的应用程序。
我想要做的是首先使用调试配置在 MCU 上刷新我的应用程序。之后,我在不擦除应用程序的情况下刷新引导加载程序。当运行我的引导加载程序时没有问题,但是当它试图跳转到应用程序时,我在 IDE 中打开一个新选项卡并在地址 0x346c 的断点处停止调试器。


如果我正在查看我的应用程序的 .map 文件,哪个是我的重置处理程序?(见地图文件)但我不执行任何代码。当它在没有调试器的情况下运行时,它似乎在没有执行应用程序的情况下挂在同一点。
我的问题:
  • 我是否遗漏了什么,我的 main.c 代码是否正确?(参见 main.c)
  • 设置、链接器文件是否正确以跳转到应用程序或我是否需要不同的地址?(请参阅链接器文件)
  • 如何正确跳转到应用程序?
  • 需要采取什么步骤?(也许我忘记了什么。)
提前感谢您的帮助!
我在用什么:
  • S32K 设计工作室
  • S32K118 SDK RTM 4.0.1 带有两个独立的 hello world 示例项目,用于闪烁的 LED。
  • 带有 S32K118 MCU 的服装 PCB
  • Multilink 通用调试器/编程器,带有与 MCU 的 SWD 连接。
主程序:
#define APP_RESET_ADDRESS 0x00003410

Boot_JumpToApp(APP_RESET_ADDRESS);

void Boot_JumpToApp(const uint32_t i_AppAddr)
{
    if((*((uint32_t*)i_AppAddr)) != 0xFFFFFFFF)
    {
    /* 重定位向量表 */
    S32_SCB->VTOR = (uint32_t)0x00003000;
    JumpToUserApplication(*((uint32_t*)i_AppAddr), *((uint32_t*)(i_AppAddr + 4)));
    }
}

void JumpToUserApplication( unsigned int userSP, unsigned int userStartup)
{
    /* 设置堆栈指针 */
    DISABLE_INTERRUPTS();
    __asm("msr msp, r0");
    __asm("msr psp, r0");
    ENABLE_INTERRUPTS();

    /* 跳转到应用程序 PC (r1) */
    AppAddr resetHandle = (AppAddr)(userStartup);
    (重置句柄)();
    //__asm("mov pc, r1");
}
                                       
                       

更多回帖

发帖
×
20
完善资料,
赚取积分