代码段
void app_start_jump(void)
{
//printf("OTA_BOOT_FLAG:0x%x", STMFLASH_ReadWord(OTA_BOOT_FLAG_ADDR));
/* 如果OTA_BOOT_FLAG为1,则进行flash跳转判断,在HTTP获取固件后,
需要向OTA_BOOT_FLAG_ADDR写1 */
//if(OTA_BOOT_FLAG == STMFLASH_ReadWord(OTA_BOOT_FLAG_ADDR))
{
/* 根据OTA_FLASH_TRANSPORT,选择相应的FLASH_APP_ADDR,在HTTP
获取固件后,先读取OTA_FLASH_TRANSPORT_ADDR内的值,再向里
面写入不同值 */
printf("OTA_FLASH_TRANSPORT:0x%x", STMFLASH_ReadWord(OTA_FLASH_TRANSPORT_ADDR));
if(OTA_FLASH_TRANSPORT == STMFLASH_ReadWord(OTA_FLASH_TRANSPORT_ADDR))
{
code_flash_transport();
}
else
{
;//iap_load_app(FLASH_APP2_ADDR);
}
iap_load_app(FLASH_APP1_ADDR);
}
}
#define FLASH_CODE_SIZE 300 /* 代码段大小(单位:KB) */
#define CODE_FLASH_BUF_SIZE 256
//static vu32 codeFlashBuf[CODE_FLASH_BUF_SIZE*4 + 1] = {0,};
/*
*
* @ flash搬运
*
*/
void code_flash_transport(void)
{
u32 i;
vu32 codeFlashBuf[CODE_FLASH_BUF_SIZE*4 + 1] = {0,};
/* 擦除APP部分的flash空间 */
FLASH_EraseSector(FLASH_Sector_4, VoltageRange_3); /* 64 Kbyte */
FLASH_EraseSector(FLASH_Sector_5, VoltageRange_3); /* 128 Kbyte */
FLASH_EraseSector(FLASH_Sector_6, VoltageRange_3); /* 128 Kbyte */
/* 从APP2中读出,再写入APP1 */
for(i = 0; i < FLASH_CODE_SIZE; i++)
{
STMFLASH_Read(FLASH_APP2_ADDR + i * CODE_FLASH_BUF_SIZE, (u32*)codeFlashBuf, CODE_FLASH_BUF_SIZE);
STMFLASH_Write(FLASH_APP1_ADDR + i * CODE_FLASH_BUF_SIZE, (u32*)codeFlashBuf, CODE_FLASH_BUF_SIZE);
}
}
1、将codeFlashBuf定义为全局变量时,代码空间溢出
2、将codeFlashBuf定义为局部变量时,正常
3、将codeFlashBuf定义为全局变量,注释void app_start_jump(void)中的code_flash_transport();,代码正常