カスタムブートローダーとアプリケーションを備えた STM32F401 MCU に取り組んでいます。コンパイラは GCC 5.2.1 で、最適化は実行されていません。
次のジャンプ シーケンスの後の最初の割り込み後に、ハードフォールトが発生します: ブートローダー -> アプリケーション -> ブートローダー -> アプリケーション。ブートローダからアプリケーションへの最初のジャンプの後、システムは正常に動作しています。ただし、ブートローダーに戻ってからアプリケーションにジャンプした後 (意図的にボードをリセットしているわけではありません)、SysTick から EXTI までの最初の割り込みの後にハードフォールトが発生します。
この理由は何でしょうか?私が更新していないものはありますか?ありがとう。
コードのスタブ:
ジャンプ手順 (両方のプログラムで、アプリケーションは 0x08008000 にあり、ブートローダーは 0x08000000 にあります):
typedef void (*pFunction)(void);
uint32_t appStack;
pFunction appEntry;
//Jump to address
/* Get the application stack pointer */
appStack = (uint32_t) * ((__IO uint32_t*)address);
/* Get the application entry point */
appEntry = (pFunction) * (__IO uint32_t*) (address + 4);
/* Reconfigure vector table offset */
SCB->VTOR = address;
__set_MSP(appStack);
appEntry();
ジャンプする前のアプリケーションのクリーンアップ:
osThreadSuspendAll();
__disable_irq();
SysTick->CTRL =0;
SysTick->LOAD=0;
SysTick->VAL=0;
__set_PRIMASK(1);
HAL_UART_DeInit(&huart2);
HAL_I2C_DeInit(&hi2c1);
HAL_RCC_DeInit();
HAL_DeInit();