Page 1 of 1

【求助】tuya os任务调度问题

Posted: 2023年 Dec 15日 10:13
by ccat0663

使用wbr3 tuya os开发,目前发现

  1. “iot_cbs.gw_ug_cb”触发wbr3升级时,没有回调
  2. OTA时会限制低优先级任务的运行,某些状态下也会,这点能确定什么条件下会限制任务运行吗?是否优先级4的任务就一定不会被限制?

Re: 【求助】tuya os任务调度问题

Posted: 2023年 Dec 15日 10:26
by yingtao_33
  • iot_cbs.gw_ug_cb 这个回调是MCU升级时的数据回调,不涉及WBR3 本身的固件升级。
  • 如果是WBR3 本身的固件升级, 在有升级请求时SDK会通过 iot_cbs.pre_gw_ug_cb 这个回调通知应用有升级请求,应用也可通过该回调的返回值告知 SDK 是否允许本次升级。进入升级流程后的拉包写入数据,以及后续升级完成自动重启,应用是无感知的。
  • 如果应用想知道升级的各阶段的状态,可订阅升级相关事件。具体的主联网固件升级说明请查看文档:https://developer.tuya.com/cn/docs/iot- ... s90hhrjuhn

Re: 【求助】tuya os任务调度问题

Posted: 2023年 Dec 15日 10:47
by 一线长天

RTOS系统的任务调度是优先级敏感的,如果高优先级的任务持续执行,那么就会导致低优先级的任务被阻塞,得不到执行。

TuyaOS的OTA任务优先级为THREAD_PRIO_3,该任务本身在TuyaOS内部是优先级最低的;OTA任务本身不会主动休眠,仅会阻塞在网络接收上。

因此,如果网络数据始终可用,则理论上OTA任务不会主动释放CPU资源,比THREAD_PRIO_3优先级低的任务可能会得不到执行。但OTA会通过tkl_ota_data_process接口将数据写入Flash,可以在这里主动释放cpu资源。

综合来说,可以考虑应用开发的任务优先级不低于THREAD_PRIO_3,或者在tkl_ota_data_process接口主动sleep。

PS:
Q:为什么OTA会设计为TuyaOS最低优先级且不主动释放CPU资源?
A:在OTA文件较大时,如1M左右,由于OTA单包下载限制在1K,因此如果每次tkl_ota_data_process时都在TuyaOS内部主动sleep,会导致OTA下载时间变长,影响用户体验(如每次休眠10ms,则导致增加10s+的下载时间,如果休眠的时间短少,则低优先级任务仍然会大概率阻塞,执行效果不好)。