STM32
直播中

风来吴山

8年用户 1387经验值
擅长:电源/新能源
私信 关注
[问答]

IAP跳转APP开始可以,如果从APP跳回IAP后再跳到APP失败的原因?

IAP 跳转APP 开始可以,但如果从APP跳回IAP后,再跳到APP失败。

我是按照 下面ST官方文档来的:
AN4657
Application note
STM32 in-application programming (IAP) using the USART

code就是下面的:

-----------------
  JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
  JumpToApplication = (pFunction) JumpAddress;
  /* Initialize user application's Stack Pointer */
  __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);

  JumpToApplication();

-----------------
请问为什么第一次可以从IAP跳到APP,第二次如果是从APP跳到IAP,那么就不可能再次跳到APP了呢?
谢谢!

回帖(1)

泡芙奶昔

2024-5-9 16:48:24
以下是一些可能的原因和相应的解决方案:

1. **栈指针(Stack Pointer)问题**:
   在跳转回APP之前,确保您已经正确地恢复了APP的栈指针。如果栈指针没有正确设置,可能会导致跳转失败。

2. **返回地址问题**:
   在从APP跳回IAP时,确保您已经正确地保存了返回地址。在跳回APP时,使用这个返回地址进行跳转。

3. **中断和异常处理**:
   在进行IAP操作时,确保您已经正确地处理了中断和异常。如果在跳转过程中发生了中断或异常,可能会导致跳转失败。

4. **内存问题**:
   确保在IAP和APP之间共享的内存区域没有被覆盖或损坏。如果共享内存区域出现问题,可能会导致跳转失败。

5. **IAP和APP的代码兼容性**:
   确保IAP和APP的代码是兼容的,特别是在寄存器和内存使用方面。如果存在不兼容的地方,可能会导致跳转失败。

6. **硬件问题**:
   检查您的硬件连接和配置,确保没有硬件问题导致跳转失败。

为了更具体地解决问题,您可以尝试以下步骤:

1. **调试**:
   使用调试器逐步跟踪IAP和APP之间的跳转过程,查看是否有任何异常行为。

2. **日志记录**:
   在IAP和APP的代码中添加日志记录,以便在跳转过程中记录关键信息,如寄存器值、内存地址等。

3. **简化问题**:
   尝试简化您的IAP和APP代码,只保留跳转相关的部分,然后逐步添加其他功能,以找到导致问题的具体原因。


举报

更多回帖

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