很久没用有点看不懂了。。。
void AppUpdateGotoApp(uint32_t appxaddr)
{
typedef int (*pAppFunction)(void);
pAppFunction app = (pAppFunction)(*(uint32_t *)(appxaddr + 4));
if (((*(volatile uint32_t *)(appxaddr + 4)) & 0xFF000000) == 0x08000000) //判断是否为0X08XXXXXX.
{
if (((*(volatile uint32_t *)appxaddr) & 0x2FF00000) == 0x20000000) //检查栈顶地址是否合法.
{
__set_MSP(*(__IO uint32_t *)appxaddr);
app();
}
}
}
1.首先第一行:用typedef给函数指针起了个别名。
int 函数指针的返回值
( *pAppFunction )函数名称,():函数的标志,带*,是指针,
(void) 函数的参数
以后用pAppFunction定义变量就直接是指向函数的指针了。
2.后面的代码是boot的逻辑,所以用的是地址
3. 定义了app就是一个指向函数的指针,后面用的是地址,所以是指向了在该地址的函数。
4. __set_PSP()设值栈指针
5.app(),执行应用程序