system_adc_read 读取错误的问题

Lucifer3502
Posts: 20
Joined: Fri Jul 24, 2015 3:00 pm

system_adc_read 读取错误的问题

Postby Lucifer3502 » Sat Dec 05, 2015 2:04 pm

使用目的:
使用RTOS_SDK_V1.0.4版本,每秒钟读取adc值,主要是用来读取热敏电阻的两端的电压值,根据电压来计算环境温度。

测试方法:
1. 在能连接路由器的情况下,每秒钟调用一次system_adc_read读取值,是正常的,长运暂时没有发现问题。

2. 在断开路由器的情况下,当模组长运很长一段时间后,(个人长运挂了8个多小时),每次调用system_adc_read接口,都返回1024,该值不会变化。模块断电重启后就恢复正常了。 测试很多次,都是这样的现象。

这是不是一个很严重的bug?

Lucifer3502
Posts: 20
Joined: Fri Jul 24, 2015 3:00 pm

Re: system_adc_read 读取错误的问题

Postby Lucifer3502 » Thu Dec 10, 2015 8:54 am

难道没有技术支持跟进这个问题吗

ESP_Faye
Posts: 1646
Joined: Mon Oct 27, 2014 11:08 am

Re: system_adc_read 读取错误的问题

Postby ESP_Faye » Thu Dec 10, 2015 10:19 am

您好,

请问您指的“断开路由器的情况下” 是什么意思?
是指使用 wifi_station_disconnect 断开路由器?还是指 ESP8266 原本连接着路由器,您将路由器断电了?
能否提供您的测试代码,以供查证。

Lucifer3502
Posts: 20
Joined: Fri Jul 24, 2015 3:00 pm

Re: system_adc_read 读取错误的问题

Postby Lucifer3502 » Thu Dec 10, 2015 4:16 pm

是路由器断电。没有特殊的逻辑,就是每一秒钟调用一次system_adc_read接口,然后根据adc计算。

代码中就是在一个线程中的while循环中,加个一个子任务。这个子任务每一秒钟执行一次,子任务一开始就是读取adc的值。
unsigned int temp = 0;
unsigned short read_adc;
/*返回值单位:1/1024 V*/
read_adc = system_adc_read();

Lucifer3502
Posts: 20
Joined: Fri Jul 24, 2015 3:00 pm

Re: system_adc_read 读取错误的问题

Postby Lucifer3502 » Thu Dec 10, 2015 4:18 pm

使用RTOS_V1.3.0的sdk,测试结果是一样的。复现问题可能需要的时间比较久,一般至少8个小时以上,不过长挂一个晚上基本上都能够复现问题。

Lucifer3502
Posts: 20
Joined: Fri Jul 24, 2015 3:00 pm

Re: system_adc_read 读取错误的问题

Postby Lucifer3502 » Sat Dec 12, 2015 8:02 am

重新写了一个demo程序,代码如下:

#include "esp_common.h"

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

#include "lwip/sockets.h"
#include "lwip/dns.h"
#include "lwip/netdb.h"
#include "uart.h"


void ICACHE_FLASH_ATTR
adc_task(void *pvParameters)
{
while(1)
{
unsigned short read_adc;
/*返回值单位:1/1024 V*/
read_adc = system_adc_read();
printf("READ ADC: %d\r\n", read_adc);
vTaskDelay(1000 / portTICK_RATE_MS);
printf("TM:%u: SM:%u, WIFI STATE: %u\n", system_get_time(), system_get_free_heap_size(), wifi_station_get_connect_status());
}
}

/******************************************************************************
* FunctionName : user_init
* Description : entry of user application, init user function here
* Parameters : none
* Returns : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_init(void)
{
uart_init_new();
printf("SDK version:%s\n", system_get_sdk_version());

/* need to set opmode before you set config */
wifi_set_opmode(STATION_MODE);

struct station_config *config = (struct station_config *)malloc(sizeof(struct station_config));
memset(config, 0, sizeof(struct station_config));

sprintf(config->ssid, "Netcore");
sprintf(config->password, "");

/* need to sure that you are in station mode first,
* otherwise it will be failed. */
wifi_station_set_config(config);
//wifi_station_set_auto_connect(1);

free(config);

xTaskCreate(adc_task, "adc_task", 256, NULL, 2, NULL);
}




出现问题的log如下:

reconnect
TM:1316648810: SM:56792, WIFI STATE: 3
READ ADC: 206
TM:1317648811: SM:56792, WIFI STATE: 3
READ ADC: 206
scandone
no Netcore found, reconnect after 1s
reconnect
TM:1318648816: SM:56792, WIFI STATE: 3
READ ADC: 206
TM:1319648810: SM:56792, WIFI STATE: 3
READ ADC: 1024
scandone
no Netcore found, reconnect after 1s
reconnect
TM:1320648811: SM:56792, WIFI STATE: 3
READ ADC: 1024
TM:1321648810: SM:56792, WIFI STATE: 3
READ ADC: 1024

ESP_Faye
Posts: 1646
Joined: Mon Oct 27, 2014 11:08 am

Re: system_adc_read 读取错误的问题

Postby ESP_Faye » Mon Dec 14, 2015 9:56 am

您好,

您提到的问题,我们正在查证中,有任何更新将及时反馈给您。

感谢您对 ESP8266 的关注!

Lucifer3502
Posts: 20
Joined: Fri Jul 24, 2015 3:00 pm

Re: system_adc_read 读取错误的问题

Postby Lucifer3502 » Fri Dec 18, 2015 9:06 am

你好:

不知道这个问题确认的怎么样了,问题是否存在,还是我的使用有问题?

如果确实有问题,那么你们是在下个版本sdk中修复还是发布一个补丁?

ESP_Faye
Posts: 1646
Joined: Mon Oct 27, 2014 11:08 am

Re: system_adc_read 读取错误的问题

Postby ESP_Faye » Fri Dec 18, 2015 2:30 pm

您好,

我们已经测试并且复现到您提的问题。目前正在查证中。

后续解决问题并且通过测试后,会更新相关库文件给您。

感谢您对 ESP8266 的关注!

ESP_Faye
Posts: 1646
Joined: Mon Oct 27, 2014 11:08 am

Re: system_adc_read 读取错误的问题

Postby ESP_Faye » Fri Dec 25, 2015 11:45 am

您好,

请参考如下使用

Code: Select all

portENTER_CRITICAL();
val=system_adc_read();
portEXIT_CRITICAL();


感谢您对 ESP8266 的关注!

Who is online

Users browsing this forum: No registered users and 2 guests