1判断是否需要升级
#define ApplicationAddress 0x08008000//boot size is 32K
static uint8 is_app_inside(void)
{
u32 addr, app_first_4_bytes;
addr = ApplicationAddress;
app_first_4_bytes = *(vu32*)addr;
if ((app_first_4_bytes & 0xffffffff) == 0xffffffff)
return 0;
else
return 1;
}
2复位函数app工程
void reset_w5500(void)
{
GPIO_ResetBits(GPIOB, WIZ_RESET);
Delay_us(2);
GPIO_SetBits(GPIOB, WIZ_RESET);
Delay_ms(50);
}
//reboot app
void reboot_app(void)
{
//if using this function, the wwdg should be disabled
pFunction Jump_To_Application;
uint32 JumpAddress;
JumpAddress = *(vu32*) (ApplicationAddress + 0x00000004);
Jump_To_Application = (pFunction) JumpAddress;
//initialize user application's stack pointer
__set_MSP(*(__IO uint32_t *)ApplicationAddress);
Jump_To_Application();
}
//reboot
void reboot(void)
{
pFunction Jump_To_Application;
uint32 JumpAddress;
JumpAddress = *(vu32*) (0x00000004);
Jump_To_Application = (pFunction) JumpAddress;
Jump_To_Application();
}
3一个mask函数
//我获得一个文件的size需要保存下来 我需要多少个page呢?
uint32 FLASH_PagesMask(vu32 Size)
{
u32 pagenumber = 0x0;
u32 size = Size;
if((size % 0x400) != 0)
{
pagenumber = (size / 0x400) + 1;
}
else
{
pagenumber = size / 0x400;
}
return pagenumber;
}