T1-CHL 3.11.11 OTA问题 ---急急急

Wi-Fi 设备、蜂窝设备、WuKongAI、开发板、TuyaOS 移植等


Post Reply
feige2023
Posts: 42

SDK固件信息
我们基于sdk_info:< TuyaOS V:3.11.11 BS:40.00_PT:2.3_LAN:3.5_CAD:1.0.5_CD:1.0.0 >
< BUILD AT:2025_04_03_09_33_03 BY ci_manage FOR tuyaos-iot AT T1 >
IOT DEFS < WIFI_GW:1 DEBUG:1 KV_FILE:0 LITTLE_END:1 SL:0 OPERATING_SYSTEM:98 RELIABLE_TRANSFER:0 >

问题描述
由于我们需要较多的内存给应用程序使用,为了保证模组OTA时,官方OTA线程有足够的堆空间,在调用tuya_iot_wf_soc_dev_init_param初始化模块的时候,我们设置了pre_gw_ug_cb回调方法,参考下面代码。然后在OTA pre_gw_ug_cb回调中,释放堆(停止我们某个应用/服务)。
通过多次OTA测试,我们发现,面板点击OTA更新时,模组可能不会调用pre_gw_ug_cb的回调,导致OTA直接失败。有时候,又能触发回调(内存释放后,OTA可以成功)。请问如何保证模组OTA时,确保先调用pre_gw_ug_cb?

Code: Select all

OPERATE_RET ret;
  TY_IOT_CBS_S iot_cbs = {0};
  
iot_cbs.gw_status_cb = __soc_dev_status_changed_cb; iot_cbs.gw_ug_cb = __soc_dev_rev_upgrade_info_cb; iot_cbs.gw_reset_cb = __soc_dev_reset_inform_cb; iot_cbs.dev_obj_dp_cb = __soc_dev_obj_dp_cmd_cb; iot_cbs.dev_raw_dp_cb = __soc_dev_raw_dp_cmd_cb; iot_cbs.dev_dp_query_cb = __soc_dev_dp_query_cb; iot_cbs.pre_gw_ug_cb = __upgrade_gateway_prev; iot_cbs.pre_dev_ug_cb = __upgrade_device_prev; ret = tuya_iot_wf_soc_dev_init_param(GWCM_OLD_PROD,WF_START_SMART_ONLY,&iot_cbs,NULL,APP_PID,APP_VERSION);
if(ret!=OPRT_OK){ ELOG("iot soc init error!"); }else{ NLOG("iot soc init success!"); } #ifdef ENABLE_BT_SERVICE tuya_ble_enable_debug(false); #endif
ret = tuya_iot_reg_get_wf_nw_stat_cb(__wf_nw_status_cb); if(ret!=OPRT_OK){ ELOG("get wf nw status cb ERR!"); }

没有触发OTA pre_gw_ug_cb回调的日志截图如下:

没有回调
没有回调

有发生回调的日志截图如下:

有回调
有回调
User avatar
一线长天
Posts: 90

Re: T1-CHL 3.11.11 OTA问题 ---急急急

OTA失败的日志,还没有到升级流程就失败了。
设备收到OTA请求时,会先通过HTTP请求去云端获取OTA信息,但日志里报错了(内存不足)。因此无法拉取到信息,OTA就不会触发,也就不会到pre_gw_ug_cb。

feige2023
Posts: 42

Re: T1-CHL 3.11.11 OTA问题 ---急急急

大佬,能回调和不能回调的,我通过命令检查,堆空间都是12KB余量(tal_system_get_free_heap_size()获取)喔,都是上电连接上网络之后查询触发的(按理说,堆的内存碎片情况也差别不大吧)

User avatar
一线长天
Posts: 90

Re: T1-CHL 3.11.11 OTA问题 ---急急急

日志里有打印剩余内存不足了(申请:0X3C5,剩余:0X488),不仅仅是碎片问题。
HTTP请求会有峰值内存在

Post Reply