【求助】tuya os任务调度问题
Posted: 2023年 Dec 15日 10:13
使用wbr3 tuya os开发,目前发现
- “iot_cbs.gw_ug_cb”触发wbr3升级时,没有回调
- OTA时会限制低优先级任务的运行,某些状态下也会,这点能确定什么条件下会限制任务运行吗?是否优先级4的任务就一定不会被限制?
使用wbr3 tuya os开发,目前发现
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+的下载时间,如果休眠的时间短少,则低优先级任务仍然会大概率阻塞,执行效果不好)。