Other Parts Discussed in Thread: CC3200, UNIFLASH
“线程”中讨论的其它部件:测试, CC3200, UNIFLASH
大家好,
我正在处理一个项目,在这个项目中,我必须在按下开关时执行 OTA,当我按下开关时,开关设备进入 OTA 环路,但 OTA 不能正常工作,它在给出之后卡住(IRET = SL_extLib_OtaRun (pvOtaApp);) IRET = 0。
我们将感谢您的任何帮助
这是我的 OTA 片段
//
//
//固件更新的 OTA 线程检查(如果可用)执行更新
//
void Button1_Thread (void *pvParameters)
{
国际 OtaTry,OtaTry2;
EVENT_msgQueue Rx_msgQueue;
While (1)(同时)
{
//OSI_SyncObjWait (&button_syncdoj,OSI_WAK_Forever);
OSI_MsgQRead (&ButtonMSGQ,&Rx_msgQueue,OSI_WAK_Forever);
IF (rx_msgQueue.msg_event == short_press)
{
UART 打印(“---”--- 短按--- \n");
GPIOPinWrite (GPIOA1_BASE,GPIO 引脚_3,GPIO 引脚_3);
//OSI_SyncObjCleal(&BUT_SyncdoObj);
//断开并停止网络服务
//Stop_NWP();
//SL_Start (0,0,0);
Int IRET;
国际委员会= 1;
无符号字符 ucVendorStr[50];
While (!is_connected (g_ulStatus))(!is_connected (g_ulStatus)))
{
UART 打印(“---”--- !is_connected (g_ulStatus)---- \n");
}
strcpy ((char *) ucVendorStr,OTA 供应商字符串);
OtaTry=0;
OtaTry2=0;
While (1)(同时)
{
//初始化 OTA 服务
OTAServerInfoSet(&pvOtaApp,(CHAR *)ucVendorStr);
//将 OTA 状态和系统状态设置为运行
UART 打印(“正在进行 OTA”);
G_ULSysState = SYS_STD_RUN;
// OTA 更新循环
While (SYS_State_run == g_ulSysState)
{
// while (!IRET)
//{.}
// IRET = SL_extLib_OtaRun (pvOtaApp);
//}
IRET = SL_extLib_OtaRun (pvOtaApp);
UART 打印("OTA 循环\n");
UART 打印("%i\n",IRET);
如果(IRET <0)
{
IF( run_stat_error_continuous_access-failures == IRET )
{
//安排重新启动。
UART 打印(“OTA 错误_重试...” \n");
OtaTry++;
IF (OtaTry>=2)
{
G_ULSysState = SYS_STATE 错误重新启动;
}
}
否则
{
UART 打印(“OTA 错误_重试...” \n");
OtaTry++;
IF (OtaTry>=3)
{
G_ULSysState = SYS_STATE 错误重新启动;
}
}
}
否则 IF (IRET == run_stat_no_updates)
{
UART 打印("OTA 无更新\n");
G_ULSysState = SYS_STATE _否_更新;
}
如果((IRET & run_stat_ddownload_done))则为其他
{
//设置 OTA 文件进行测试
IRET = SL_extLib_OtaSet (pvOtaApp,EXTLIB_OTA 设置,选入图像测试,
尺寸(int),(_u8 *)和设置委员会(SetCommitInt);
UART 打印(“下载已完成。\n”);
IF (IRET &(OTA 操作重置 MCU | OTA 操作重置 NWP))
{
G_ULSysState = SYS_STATE;
}
否则
{
OtaTry2++;
IF (OtaTry2>=2)
{
G_ULSysState = SYS_STATE 错误重新启动;
}
}
}
}
IF (g_ulSysState == SYS_State_reboot)
{
UART 打印(“重新启动”);
//断开并停止网络服务
STOP_NWP();
//重新启动系统
RebootMCU();
}
否则,如果(g_ulSysState == SYS_State_error_reboot)
{
UART 打印(“Error.rebooting.\n”);
//断开并停止网络服务
STOP_NWP();
//重新启动系统
RebootMCU();
}
否则,如果(g_ulSysState == SYS_STATE _NO_updates)
{
OSI_SLEEP (1000);
Button1_EnableInterrupt();
Button2_EnableInterrupt();
休息;
}
}
//OSI_SyncObjCleal(&BUT_SyncdoObj);
}
/**************************** 长按重置固件************* /
否则,如果(Rx_msgQueue.msg_event == Long_press)
{
UART 打印(“---”--- 长按--- \n");
STOP_NWP();
SL_Start (0,0,0);
While (1)(同时)
{
sBootInfo_t sBootInfo;
长 lFileHandle;
无符号长 ulToken;
//等待按键
// OSI_SyncObjWait (&g_FactResetSyncObj,OSI_WAK_Forever);
//阅读引导信息
IF (0 == SL_FsOpen ((未签名字符*) IMG_BOOT_INFO,FS_MODE_OPEN 读取,&ulToken,&lFileHandle))
{
IF (0 > SL_FsRead (lFileHandle,0,(无符号字符*)&sBootInfo,sizeof (sBootInfo_t))))
{
UART 打印(“无法读取/sys/mcubootinfo.bin \n");
//表示错误
SL_FsClose (lFileHandle,0,0,0);
SL_Stop (200);
SL_Start (0,0,0);
休息;
While (1)(同时)
{
}
}
SL_FsClose (lFileHandle,0,0,0);
}
//设置出厂默认值
sBootInfo.ucActiveImg = IMG_Act_factory;
sBootInfo.ulImgStatus = IMG_STATUS_NOTEST;
//保存新配置
IF (0 == SL_FsOpen ((未签名字符*) IMG_BOOT_INFO,FS_MODE_OPEN 写入,&ulToken,&lFileHandle))
{
SL_FsWrite (lFileHandle,0,(无符号字符*)&sBootInfo,sizeof (sBootInfo_t)));
SL_FsClose (lFileHandle,0,0,0);
}
//断开并停止网络服务
STOP_NWP();
//重新启动系统
RebootMCU();
}
OSI_SLEEP (1000);
Button1_EnableInterrupt();
Button2_EnableInterrupt();
}
否则,如果(Rx_msgQueue.msg_event == device_reset)
{
UART 打印(“---”--- 设备重置----------------------- 重新启动 MCU。\n");
GPIOPinWrite (GPIOA1_BASE,GPIO PIN_2,GPIO PIN_2);
STOP_NWP();
// Delete_Files ();
RebootMCU();
}
}
}
//------------- 我的 OTA_CONFIG.h 配置是-------------
#define OTA 服务器名称"api.dropbox.com
#define OTA 服务器 IP 地址0x00000000
#define OTA 服务器安全1
#define OTA 服务器应用程序令牌"SL.BAXc8-D1x PrMyAQdV19mJ-8QP0vSen7Jg-YC785I2raVXiRzcORS_JP_B_ycEl47ikijW_zhLXL9VJCIXEatUdHKXIykhtF8Network,用于 HP 网络
#define OTA 供应商字符串"Vid01_Pid00_Ver00"
