关于STM32的bootloader,有如下代码,以下做一些理解记录:
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
uint32_t JumpAddress;
JumpAddress = *(__IO uint32_t*) (DEF_FLASH_AppStartaddr + 4);
Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) DEF_FLASH_AppStartaddr);
Jump_To_Application();
-
定义一个新的数据类型:void (*)(void); 该类型是一个函数指针,它指向的函数的形参为void,返回值为void
-
typedef void (*pFunction)(void); //用pFunction来代替void (*)(void),以简化后续使用;
-
Jump_To_Application = (pFunction) JumpAddress; //将一个32位的地址,强制转换成一个函数指针;
-
__set_MSP(*(__IO uint32_t*) DEF_FLASH_AppStartaddr); //设置栈顶指针地址
-
Jump_To_Application(); //跳转到复位向量入口地址执行程序;