2

カスタムブートローダーとアプリケーションを備えた 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();
4

0 に答える 0