no message
parent
6cd86e2efe
commit
ff62412e5c
|
@ -245,7 +245,7 @@ RunResult Write_Flash(uint32_t writeAddr, uint8_t *writeBuf, uint16_t writeLen)
|
||||||
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);//清标志位
|
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);//清标志位
|
||||||
for( timeOut=0; (SET == FLASH_GetFlagStatus(FLASH_FLAG_BSY)); timeOut++)
|
for( timeOut=0; (SET == FLASH_GetFlagStatus(FLASH_FLAG_BSY)); timeOut++)
|
||||||
{
|
{
|
||||||
Wait_For_Nms(10) ;
|
Wait_For_Nms(50) ;
|
||||||
if( timeOut>10 )
|
if( timeOut>10 )
|
||||||
{
|
{
|
||||||
SysErr("") ; //写Flash出错!
|
SysErr("") ; //写Flash出错!
|
||||||
|
|
|
@ -123,8 +123,8 @@ void _ttywrch(int ch)
|
||||||
|
|
||||||
int fputc(int ch, FILE *f)//重定义fputc函数
|
int fputc(int ch, FILE *f)//重定义fputc函数
|
||||||
{
|
{
|
||||||
UARTx_COM[UART_DEBUG]->DR = (u8) ch;
|
// UARTx_COM[UART_DEBUG]->DR = (u8) ch;
|
||||||
while(( UARTx_COM[UART_DEBUG]->SR & 0X40 ) == 0) ;//循环发送,直到发送完毕 TC
|
// while(( UARTx_COM[UART_DEBUG]->SR & 0X40 ) == 0) ;//循环发送,直到发送完毕 TC
|
||||||
return ch;
|
return ch;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#define UART_DEBUG COM5 //log输出重定向
|
#define UART_DEBUG COM5 //log输出重定向
|
||||||
#define UARTx_DMATX_EN 1 //uart1`uart4可以选择是否通过串口DMA发送数据
|
#define UARTx_DMATX_EN 1 //uart1`uart4可以选择是否通过串口DMA发送数据
|
||||||
#define UART1_DMA_RX_MAXLEN 256 //串口1 DMA接收一帧数据的最大长度
|
#define UART1_DMA_RX_MAXLEN 2560 //串口1 DMA接收一帧数据的最大长度
|
||||||
#define UART2_DMA_RX_MAXLEN 256 //串口2 DMA接收一帧数据的最大长度
|
#define UART2_DMA_RX_MAXLEN 256 //串口2 DMA接收一帧数据的最大长度
|
||||||
#define UART3_DMA_RX_MAXLEN (1024*3) //串口3 DMA接收一帧数据的最大长度
|
#define UART3_DMA_RX_MAXLEN (1024*3) //串口3 DMA接收一帧数据的最大长度
|
||||||
#define UART4_DMA_RX_MAXLEN 256 //串口4 DMA接收一帧数据的最大长度
|
#define UART4_DMA_RX_MAXLEN 256 //串口4 DMA接收一帧数据的最大长度
|
||||||
|
|
|
@ -50,7 +50,7 @@ RUNAPP1: if((addr == (APP1_AREA_ADDR & 0xFFFF0000))
|
||||||
}
|
}
|
||||||
case 0x00000032: case APP2_AREA_ADDR:
|
case 0x00000032: case APP2_AREA_ADDR:
|
||||||
{
|
{
|
||||||
if( ((*(vu32*)(APP2_AREA_ADDR+4))&0xFFFF0000) == (APP2_AREA_ADDR & 0xFFFF0000)) //校验存储在FLASH中的固件合法
|
if( ((*(vu32*)(APP2_AREA_ADDR+4))&0xFFFF0000) >= (APP2_AREA_ADDR & 0xFFFF0000)) //校验存储在FLASH中的固件合法
|
||||||
{
|
{
|
||||||
TcpUpdata( BOOTTOTCPFRAME, "开始执行APP2用户代码!") ;
|
TcpUpdata( BOOTTOTCPFRAME, "开始执行APP2用户代码!") ;
|
||||||
appAddr = APP2_AREA_ADDR ;
|
appAddr = APP2_AREA_ADDR ;
|
||||||
|
|
|
@ -186,9 +186,7 @@ RunResult DownOtherSubpack(DownFileP_s *psFileParm)
|
||||||
int headPos ;
|
int headPos ;
|
||||||
for( psFileParm->subPackNum = 2; psFileParm->subPackNum <= psFileParm->subPackSum; psFileParm->subPackNum++ ) //从第2个包开始,采用循环下载
|
for( psFileParm->subPackNum = 2; psFileParm->subPackNum <= psFileParm->subPackSum; psFileParm->subPackNum++ ) //从第2个包开始,采用循环下载
|
||||||
{
|
{
|
||||||
OledPrintf(LINE_LEFT, HIGH_16, LINE4, false, "下载子包:%d", psFileParm->subPackNum ) ;
|
Wait_For_Nms(50) ;
|
||||||
Data_Led_Reverse() ;
|
|
||||||
Wait_For_Nms(5) ;
|
|
||||||
uint16_t downLen = ONCE_DOWN_LEN ; //本次下载数据的长度
|
uint16_t downLen = ONCE_DOWN_LEN ; //本次下载数据的长度
|
||||||
if( psFileParm->subPackNum == psFileParm->subPackSum ) /*下载最后一个包,下载数据长度需要重新计算*/
|
if( psFileParm->subPackNum == psFileParm->subPackSum ) /*下载最后一个包,下载数据长度需要重新计算*/
|
||||||
{
|
{
|
||||||
|
|
38
USER/main.c
38
USER/main.c
|
@ -43,29 +43,27 @@ int main(void)
|
||||||
Board_Init() ; //硬件驱动初始化和功能块初始化
|
Board_Init() ; //硬件驱动初始化和功能块初始化
|
||||||
Watchdog_Feed() ; //看门狗喂狗
|
Watchdog_Feed() ; //看门狗喂狗
|
||||||
|
|
||||||
|
/*强制升级检测、开始变砖检测修复 ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼*/
|
||||||
/*
|
if( (uIapFlash.sIapFlash.JumpResult == 0x30) ) // 跳转失败或者按键操作进入恢复模式,则运行应急程序
|
||||||
/*强制升级检测、开始变砖检测修复 ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
|
|
||||||
if( (uIapFlash.sIapFlash.JumpResult == 0x30) ) /*跳转失败或者按键操作进入恢复模式,则运行应急程序
|
|
||||||
{
|
{
|
||||||
DisplayInfo("执行应急程序") ;
|
DisplayInfo("执行应急程序") ;
|
||||||
Wait_For_Nms(20) ; //延时2S用于显示屏显示(实际项目可以屏蔽延时)
|
|
||||||
goto SAVEAPPOUT ; //跳转到应急程序运行
|
goto SAVEAPPOUT ; //跳转到应急程序运行
|
||||||
}
|
}
|
||||||
else /*跳转APP未出现失败,设置标志位jumpResult为暂未跳转成功状
|
else //跳转APP未出现失败,设置标志位jumpResult为暂未跳转成功状
|
||||||
{
|
{
|
||||||
uIapFlash.sIapFlash.JumpResult = 0x30 ; //复位JumpResult标志位
|
uIapFlash.sIapFlash.JumpResult = 0x30 ; //复位JumpResult标志位
|
||||||
Set_uIapFlash(&uIapFlash) ; //保存JumpResult
|
Set_uIapFlash(&uIapFlash) ; //保存JumpResult
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
/*结束变砖检测修复、强制升级检测*/
|
/*结束变砖检测修复、强制升级检测*/
|
||||||
|
|
||||||
/*开始检测是否需要升级APP(即判断IapFlag标志位)▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼*/
|
/*开始检测是否需要升级APP(即判断IapFlag标志位)▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼*/
|
||||||
if( true == IS_IapFlag_ALL_PERIPH(uIapFlash.sIapFlash.IapFlag) ) /*IapFlag合法*/ //IapFlag标志位合法性校验
|
if(true == IS_IapFlag_ALL_PERIPH(uIapFlash.sIapFlash.IapFlag)) /*IapFlag合法*/ //IapFlag标志位合法性校验
|
||||||
{
|
{
|
||||||
if(uIapFlash.sIapFlash.IapFlag == 0x30 ) /*升级标志位为‘0’, 说明不需要升级,直接跳转即可*/
|
if(uIapFlash.sIapFlash.IapFlag == 0x30 ) /*升级标志位为‘0’, 说明不需要升级,直接跳转即可*/
|
||||||
{
|
{
|
||||||
// AppLogPrintf("无需升级,即将执行APP%c .", uIapFlash.sIapFlash.RunAppNum) ;
|
AppLogPrintf("无需升级,即将执行APP%c .", uIapFlash.sIapFlash.RunAppNum) ;
|
||||||
|
|
||||||
goto APPNUMOUT ; //跳转到RunAppNum,执行原先的程序
|
goto APPNUMOUT ; //跳转到RunAppNum,执行原先的程序
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,7 +82,7 @@ int main(void)
|
||||||
|
|
||||||
/*∧∧网络连接开始∧∧∧∧∧∧∧∧∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨*/
|
/*∧∧网络连接开始∧∧∧∧∧∧∧∧∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨*/
|
||||||
result = NetTask() ; //网络初始化
|
result = NetTask() ; //网络初始化
|
||||||
if( RUNERR == result ) /*TCP\FTP初始化、连接失败 */
|
if(RUNERR == result) /*TCP\FTP初始化、连接失败 */
|
||||||
{
|
{
|
||||||
DisplayInfo("FTP连接失败") ;
|
DisplayInfo("FTP连接失败") ;
|
||||||
TcpUpdata( BOOTTOTCPFRAME, "FTP初始化失败,即将跳转RunAppNum: APP%c!", uIapFlash.sIapFlash.RunAppNum) ;
|
TcpUpdata( BOOTTOTCPFRAME, "FTP初始化失败,即将跳转RunAppNum: APP%c!", uIapFlash.sIapFlash.RunAppNum) ;
|
||||||
|
@ -97,7 +95,7 @@ int main(void)
|
||||||
TcpUpdata( BOOTTOTCPFRAME, "FTP初始化成功,即将开始升级!") ;
|
TcpUpdata( BOOTTOTCPFRAME, "FTP初始化成功,即将开始升级!") ;
|
||||||
Watchdog_Feed() ; //看门狗喂狗
|
Watchdog_Feed() ; //看门狗喂狗
|
||||||
result = FindAppFile(&sDownApp) ; //查找新固件
|
result = FindAppFile(&sDownApp) ; //查找新固件
|
||||||
if( RUNERR == result ) /*未找到新固件*/
|
if(RUNERR == result) /*未找到新固件*/
|
||||||
{
|
{
|
||||||
TcpUpdata( BOOTTOTCPFRAME, "未搜索到新固件,即将跳转RunAppNum: APP%c!", uIapFlash.sIapFlash.RunAppNum) ;
|
TcpUpdata( BOOTTOTCPFRAME, "未搜索到新固件,即将跳转RunAppNum: APP%c!", uIapFlash.sIapFlash.RunAppNum) ;
|
||||||
Wait_For_Nms(200) ; //延时2S用于显示屏显示(实际项目可以屏蔽延时)
|
Wait_For_Nms(200) ; //延时2S用于显示屏显示(实际项目可以屏蔽延时)
|
||||||
|
@ -107,13 +105,13 @@ int main(void)
|
||||||
|
|
||||||
/*∨∨获取新固件文件大小开始∨∨∨∨∨∨∨∧∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨*/
|
/*∨∨获取新固件文件大小开始∨∨∨∨∨∨∨∧∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨*/
|
||||||
sDownApp.fileSize = Ftp_Get_FileSize( sDownApp.fileName ) ; //获取新固件文件的大小
|
sDownApp.fileSize = Ftp_Get_FileSize( sDownApp.fileName ) ; //获取新固件文件的大小
|
||||||
if( sDownApp.fileSize <= 0 ) /*获取文件大小失败*/
|
if(sDownApp.fileSize <= 0) /*获取文件大小失败*/
|
||||||
{
|
{
|
||||||
TcpUpdata( BOOTTOTCPFRAME, "获取新固件大小失败,即将跳转RunAppNum: APP%c!", uIapFlash.sIapFlash.RunAppNum) ;
|
TcpUpdata( BOOTTOTCPFRAME, "获取新固件大小失败,即将跳转RunAppNum: APP%c!", uIapFlash.sIapFlash.RunAppNum) ;
|
||||||
goto APPNUMOUT ; //跳转到RunAppNum,执行原先的程序
|
goto APPNUMOUT ; //跳转到RunAppNum,执行原先的程序
|
||||||
}
|
}
|
||||||
sDownApp.subPackSum = sDownApp.fileSize/ONCE_DOWN_LEN ;
|
sDownApp.subPackSum = sDownApp.fileSize/ONCE_DOWN_LEN ;
|
||||||
if( sDownApp.fileSize%ONCE_DOWN_LEN > 0 )
|
if(sDownApp.fileSize%ONCE_DOWN_LEN > 0)
|
||||||
sDownApp.subPackSum = sDownApp.subPackSum + 1 ; //计算固件subPackSum
|
sDownApp.subPackSum = sDownApp.subPackSum + 1 ; //计算固件subPackSum
|
||||||
TcpUpdata( BOOTTOTCPFRAME, "新固件包大小 %d bytes ; 拆分子包数目: %d 。",sDownApp.fileSize, sDownApp.subPackSum) ;
|
TcpUpdata( BOOTTOTCPFRAME, "新固件包大小 %d bytes ; 拆分子包数目: %d 。",sDownApp.fileSize, sDownApp.subPackSum) ;
|
||||||
/*∧∧获取新固件文件大小结束∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧*/
|
/*∧∧获取新固件文件大小结束∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧*/
|
||||||
|
@ -121,7 +119,7 @@ int main(void)
|
||||||
/*∨∨新固件合法性校验开始∨∨∨∨∨∨∨∧∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨*/
|
/*∨∨新固件合法性校验开始∨∨∨∨∨∨∨∧∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨*/
|
||||||
int headPos = -1 ;
|
int headPos = -1 ;
|
||||||
result = DownSubpackVerify(&sDownApp, &headPos) ; //下载第一个subpack并进行固件合法性校验
|
result = DownSubpackVerify(&sDownApp, &headPos) ; //下载第一个subpack并进行固件合法性校验
|
||||||
if( RUNERR == result ) /*固件校验不合法”*/
|
if(RUNERR == result) /*固件校验不合法”*/
|
||||||
{
|
{
|
||||||
TcpUpdata( BOOTTOTCPFRAME, "新固件栈顶地址校验失败!") ;
|
TcpUpdata( BOOTTOTCPFRAME, "新固件栈顶地址校验失败!") ;
|
||||||
// char *newName = (char*)portMalloc(MAC_BYTES_LEN*2) ;
|
// char *newName = (char*)portMalloc(MAC_BYTES_LEN*2) ;
|
||||||
|
@ -133,7 +131,7 @@ int main(void)
|
||||||
// portFree(newName) ;
|
// portFree(newName) ;
|
||||||
goto APPNUMOUT ; // 跳转到RunAppNum,执行原先的程序
|
goto APPNUMOUT ; // 跳转到RunAppNum,执行原先的程序
|
||||||
}
|
}
|
||||||
else if( TIMEOUT == result ) /*固件校验失败*/
|
else if(TIMEOUT == result) /*固件校验失败*/
|
||||||
{
|
{
|
||||||
TcpUpdata( BOOTTOTCPFRAME, "新固件栈顶地址校验超时!") ;
|
TcpUpdata( BOOTTOTCPFRAME, "新固件栈顶地址校验超时!") ;
|
||||||
Wait_For_Nms(50) ; //延时2S用于显示屏显示(实际项目可以屏蔽延时)
|
Wait_For_Nms(50) ; //延时2S用于显示屏显示(实际项目可以屏蔽延时)
|
||||||
|
@ -141,9 +139,7 @@ int main(void)
|
||||||
}
|
}
|
||||||
/*∧∧新固件合法性校验结束∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧*/
|
/*∧∧新固件合法性校验结束∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧*/
|
||||||
|
|
||||||
/*∨∨下载新固件并写FLASH 开始∨∨∨∨∨∨∨∧∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨*/
|
|
||||||
// OledPrintf(LINE_LEFT, HIGH_16, LINE3, false, "总子包数:%d", sDownApp.subPackSum) ;
|
|
||||||
// OledPrintf(LINE_LEFT, HIGH_16, LINE4, false, "下载子包:1" ) ;
|
|
||||||
Erase_App_Area(sDownApp.appFlashAddr) ; //擦除相应代码段准备将新的代码写入FLASH,此时该APP段已经不可用了,如果后续出现下载/写入FLASH错误,需要跳转到应急程序
|
Erase_App_Area(sDownApp.appFlashAddr) ; //擦除相应代码段准备将新的代码写入FLASH,此时该APP段已经不可用了,如果后续出现下载/写入FLASH错误,需要跳转到应急程序
|
||||||
TcpUpdata( BOOTTOTCPFRAME, "子包:1 。下载成功!") ;
|
TcpUpdata( BOOTTOTCPFRAME, "子包:1 。下载成功!") ;
|
||||||
if( RUNOK == Write_Flash(sDownApp.appFlashAddr, (uint8_t*)(ec20FtpBuf+headPos), ONCE_DOWN_LEN)) /*写FLASH成功*///将上一步下载的subpack1写入falsh中
|
if( RUNOK == Write_Flash(sDownApp.appFlashAddr, (uint8_t*)(ec20FtpBuf+headPos), ONCE_DOWN_LEN)) /*写FLASH成功*///将上一步下载的subpack1写入falsh中
|
||||||
|
@ -179,14 +175,14 @@ int main(void)
|
||||||
/*∧∧下载新固件并写FLASH 结束∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧*/
|
/*∧∧下载新固件并写FLASH 结束∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧*/
|
||||||
|
|
||||||
APPNUMOUT:
|
APPNUMOUT:
|
||||||
|
appAddr = QueryNewAppArea(0x32); //校验固件合法性、获取跳转的FLASH存放区域首地址
|
||||||
appAddr = QueryNewAppArea((u32)uIapFlash.sIapFlash.RunAppNum); //校验固件合法性、获取跳转的FLASH存放区域首地址
|
// appAddr = QueryNewAppArea((u32)uIapFlash.sIapFlash.RunAppNum); //校验固件合法性、获取跳转的FLASH存放区域首地址
|
||||||
|
|
||||||
NetDisconnetc() ; //断开网络连接,注销FTP登陆
|
NetDisconnetc() ; //断开网络连接,注销FTP登陆
|
||||||
Iap_Load_App(appAddr) ; //执行APP,不会再往下执行了
|
Iap_Load_App(appAddr) ; //执行APP,不会再往下执行了
|
||||||
|
|
||||||
NEWAPPOUT:
|
NEWAPPOUT:
|
||||||
uIapFlash.sIapFlash.IapFlag = 0x30 ; //清除升级标志位
|
uIapFlash.sIapFlash.IapFlag = 0x32 ; //清除升级标志位
|
||||||
Set_uIapFlash(&uIapFlash) ;
|
Set_uIapFlash(&uIapFlash) ;
|
||||||
appAddr = QueryNewAppArea(sDownApp.appFlashAddr); //校验固件合法性、获取跳转的FLASH存放区域首地址
|
appAddr = QueryNewAppArea(sDownApp.appFlashAddr); //校验固件合法性、获取跳转的FLASH存放区域首地址
|
||||||
NetDisconnetc() ; //断开网络连接,注销FTP登陆
|
NetDisconnetc() ; //断开网络连接,注销FTP登陆
|
||||||
|
|
Loading…
Reference in New Issue