各位大神你们好:
我现在遇到的问题是:使用IAP升级,从大固件升级为小固件时,第一次运行成功,但是复位后就停在void HardFault_Handler(void)函数中。从小固件升级为大固件正常。
现象:
小固件:
if((t%20)==0)LED1=!LED1;
Program Size: Code=9502 RO-data=494 RW-data=44 ZI-data=2049980
大固件:
if((t%200000)==0)LED1=!LED1;
Program Size: Code=9506 RO-data=494 RW-data=44 ZI-data=2049980
以下是IAP的代码:
int main(void)
{
HAL_Init(); //初始化HAL库
SysCLKInit_HSEPLL(180,25); //系统时钟初始化为180M
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); //中断优先级分组
Delay_Init(180); //定时器初始化
DEBUGInit(); //初始化USART
SDRAMInit(); //初始化SDRAM
printf("初始化完成.
");
Delay_ms(3000);
if(f_mount(&g_TF_FATFS,"0:",1) == FR_OK)
{
printf("挂载成功.
");
if(TFCardReadBINFile() == 1)
{
/*****读取新固件*****/
memset(g_ProcedureBUFF,255,sizeof(g_ProcedureBUFF));
FMC_SDRAM_WriteBuffer_8Bit(g_ProcedureBUFF,0,sizeof(g_ProcedureBUFF));
TFCardReadProcedure();
/*****更新新固件*****/
g_applenth = sizeof(g_ProcedureBUFF);
printf("开始更新固件...
");
iap_write_appbin(FLASH_APP1_ADDR,g_ProcedureBUFF,g_applenth);//更新FLASH代码
printf("固件更新完成!
");
}
f_mount(0,"",0); //取消挂载
printf("取消挂载.
");
}
printf("开始执行代码.
");
iap_load_app(FLASH_APP1_ADDR);//执行FLASH APP代码
}
一周热门 更多>