【避坑】sdk-2.3.3 adc概率open异常

Wi-Fi 设备、Wi-Fi 低功耗设备、Wi-Fi BLE 双模设备、Ethernet设备、Ethernet+Wi-Fi设备等
Post Reply
z5922487
Posts: 1

Code: Select all

STATIC VOID ADC_Callback(PVOID_T arg)
{
	UINT16_T adc_buf = 0;
    	tuya_adc_t *adc_dev = (tuya_adc_t *)arg;
	while(1)
	{
		...
		while(tuya_adc_convert(adc_dev,&adc_buf,1) != 0)
        	{
            		PR_ERR("ADC gather error!");
            		vTaskDelay(pdMS_TO_TICKS(100));
        	}
        	...
        }
}

OPERATE_LIGHT ADC_Init(void)
{    
tuya_adc_t *adc_dev = (tuya_adc_t *)tuya_driver_find(TUYA_DRV_ADC,TUYA_ADC2); if(NULL==adc_dev){ PR_ERR("tuya adc find failed!"); return LIGHT_INVALID_PARM; } TUYA_ADC_CFG(adc_dev,TUYA_ADC2,0); OPERATE_LIGHT ret = tuya_adc_init(adc_dev); if (ret != LIGHT_OK) { PR_ERR("adc soc init error!"); return LIGHT_INVALID_PARM; }
ret = tuya_hal_thread_create(NULL, "mic_acquisition", 512 * 2, TRD_PRIO_4, ADC_Callback, adc_dev); if (ret != OPRT_OK) { PR_ERR("MIC Create thread error!: %d", ret); return ret; } return ret; }

demo如上,读取ADC失败等待一段时间后重新读取,有概率出现读取ADC失败死循环。
现象:adc open总是失败,但是close却返回OK
原因:sdk默认开启了温度检测线程,并且温度检测采用消息开启,读取完毕在中断关闭的方式,可能存在温度检测ADC读取完成前,被用户open的时候就会失败
解决方案:1.读取adc之前先调用temp_detect_pause_timer()停止温度检测定时器,读取完ADC在重新调用temp_detect_restart_detect(),或者简单粗暴直接把温度检测的宏CFG_USE_TEMPERATURE_DETECT赋0
2.读取ADC失败等待一段时间后重新读取,改为读取失败直接continue
3.读取ADC前先判断ADC是否为关闭状态


Tags:
愚者千虑必有一得
Posts: 499

Re: 【避坑】sdk-2.3.3 adc概率open异常

感谢反馈,确实存在这个问题,我们内部看看如何优化解决。

Post Reply