• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Espressif Bug Bounty Program - заработай 1000$ за 60 секунд

Сколько багов удастся найти в SDK 1.0.0 за 1 ближайший месяц


  • Всего проголосовало
    12
  • Опрос закрыт .

Victor

Administrator
Команда форума
Они пишут
would you please send us codes that can be used to reproduce your problems?
Видимо я не очень понятно сформулировал
Error in wifi_softap_set_dhcps_lease()
1. Start AP with DHCP server
2. call dhcps_stop() for DHCP stop
3. Start DHCP again
4. Result: wrong dhcps_lease_flag
 

Victor

Administrator
Команда форума
Третья ошибка всё в той-же wifi_softap_set_dhcps_lease() :)
Она не дает до запуска AP установить "Лизу", а после запуска AP, если было отключение dhcps_stop(), и опять включение dhcps, то опять переворачивает свою внутреннюю "Лизу" кверху ногами. Пусть чинят dhcps_lease_flag флаг и уберут глупое переворачивание, дающее длинююющщщииий код, но сделанное для простоты написания на СИ глупым программистом с кучей китай-коментов
они просят код, чтобы смогли повторить ошибку - может я неправильно/непонятно описал ошибку или они там тормозят. Сможем им что-нибудь отправить?
 

pvvx

Активный участник сообщества
они просят код, чтобы смогли повторить ошибку - может я неправильно/непонятно описал ошибку или они там тормозят. Сможем им что-нибудь отправить?
Можно, но позже. Не охота с ними бодаться. Всё равно это бесполезно - надо менять DHCP полностью, а не делать к имеющемуся затычки. Я у себя уже переписал без переворачивания, но досконально не проверял. Т.е. в последних версиях моих Web уже без переворачивания (htonl).
Им нечего отнекиваться: https://github.com/nodemcu/nodemcu-firmware/blob/master/app/lwip/app/dhcpserver.c#L803
A static void ICACHE_FLASH_ATTR wifi_softap_init_dhcps_lease(uint32 ip) всегда переворачивает внутреннюю Лизу кверху ногами, при каждом старте, если задана внешняя Лиза.
Вызов dhcps_start переворачивает внутреннюю Лизу :) Они, соответственно, вызываются из старта AP.... А при остановке AP или dhcps_stop не переворачивает. В результате Лиза то перевернута, то нет при старт/стоп AP.
Ну и вызов, при выключенной AP, или включенной, пока у неё ip = 0.0.0.0 :
Код:
        struct dhcps_lease please;
        please.start_ip = 0x2000000; // или 2 (счас не помню)
        please.end_ip = 0x8000000; // или больше 2
        os_printf("%p..%p !",please.start_ip, please.end_ip);
        int ret = wifi_softap_set_dhcps_lease(&please);
        os_printf("= %p..%p , %u\n",please.start_ip, please.end_ip, ret);
 
Последнее редактирование:

Victor

Administrator
Команда форума
Не охота с ними бодаться
блин, это моя ошибка. Я подумал, что dhcps_lease_flag несколько раз переворачивается, но в коде сейчас увидел, что вы имели ввиду - please переворачивается каждый раз при старте DHCP.
Но вроде она берется каждый раз и берется из info->ip, как вызывается dhcps_start или я опять неправильно понял?
 

pvvx

Активный участник сообщества
или я опять неправильно понял?
Переворачивает wifi_softap_set_dhcps_lease() и в пользовательских данных, которые ей передаются. Так-же переворачиваются и во внутренних данных в wifi_softap_init_dhcps_lease(), если вы выключите dhcp и снова его включите :) Там четыре ошибки с этим делом :) :)
Другая в том, что не проверяется возврат у wifi_get_ip_info() и ip у AP считается 0.0.0.0.
И там вообще сплошная глупость - заполнять два dword os_bzero(), когда они всегда переписываются далее.

Уточнение:
Вот такая ветка получается, если использовали wifi_softap_set_dhcps_lease() - она поставила dhcps_lease_flag = false:
Код:
static void ICACHE_FLASH_ATTR wifi_softap_init_dhcps_lease(uint32 ip)
{
if (dhcps_lease_flag) {
....
}
dhcps_lease.start_ip = htonl(dhcps_lease.start_ip);
dhcps_lease.end_ip= htonl(dhcps_lease.end_ip);
}
При старте dhcp эта процедура ставит правильно dhcps_lease - возвращает переворот заданный в wifi_softap_set_dhcps_lease().
При отключении dhcp ничего не делается с dhcps_lease.
При следующем включении dhcps_lease переворачивается в wifi_softap_init_dhcps_lease().
При следующем отключении dhcp ничего не делается с dhcps_lease.
При следующем старте dhcp wifi_softap_init_dhcps_lease() опять ставит правильно dhcps_lease - возвращает переворот.
... :)

Портит пользовательские данные wifi_softap_set_dhcps_lease(), т.к. ей передается указатель на них. Она по нему переворачивает ip :)
Код:
bool ICACHE_FLASH_ATTR wifi_softap_set_dhcps_lease(struct dhcps_lease *please) {
....
please->start_ip = htonl(please->start_ip);
please->end_ip = htonl(please->end_ip);
...
}
Писал пьяный китаец или студент, только начавший изучать СИ.
Все эти переворачивания делаются ради упрощения написания на СИ компоновки ip от AP.
 
Последнее редактирование:

Victor

Administrator
Команда форума
Вот такая ветка получается
спасибо, теперь разобрался, отправил им все.
Только уточняю, что согласно документации wifi_softap_set_dhcps_lease() нельзя вызывать до старта сервера, но это особо ничего не меняет.
Note: This API need to be called during DHCP server disable.
и еще момент.
Эти ошибки не приводят к перезагрузке и багами не считаются, так что мы в пролете...
What is a bug? Anything that causes the software to reset, heap overflows, buffer overflows, loss of wireless connectivity function are considered bugs
 

pvvx

Активный участник сообщества
Это чистый "loss of wireless connectivity function".
Подключаемая станция не имеет ip адреса или ей дается неверный - перевернутый. Итог - ничего с AP на ESP8266 не считать и не послать на него. Попробуйте...
Windows при этом ставит def. ip адрес типа 169.254.139.x. Это не входит в маску сети у AP и "ку".
----
В SDK 1.0.1 (b1) они убрали пару указанных циклов проверки fifo UART, но не везде. В критических местах, там где как раз и надо было убрать или изменить - оставили. Китайцы.... :)
По тому нет никакого смысла с ними бадаться - они сделают ещё хуже. Сейчас "Лиза" поправима, т.к. базируется на исходнике от 0.9.4 и имеет один dhcpserver.o в либе liblwip.a и меняется за 5 сек, а если изменят, то поправить будет значительно сложнее - они её переплетут с другими либами, чтобы было неповадно.
К тому же их тенденция уменьшения памяти при каждом патче и выходе новой SDK дает -5 килобайт. Уже из 128 килобайт памяти на чипе SDK отожрало более 80 килобайт...
 
Последнее редактирование:

Victor

Administrator
Команда форума
Пролетаем мы похоже. Или не успели, или...
http://bbs.espressif.com/viewtopic.php?f=5&t=346
Optimize:
3.API wifi_softap_set_dhcps_lease won't change start_ip and end_ip [BBP#37 reporter (glb)]
ладно хоть это признали
2.UART & FlowControl issue: send data to FIFO without CTS flag will cause WDT [BBP#11 reporter (pvxx)]
специально сейчас еще раз проверил: я им ваш ник правильный отослал - китайцы, как обычно, все перепутали...
 
Последнее редактирование:

pvvx

Активный участник сообщества
В SDK 1.0.1 (b2) не устанавливается AP dhcp! :)
Конкретно логика установки wifi_softap_set_dhcps_lease() не верна.
Если дать неверный ip, то она говорит Err, но если AP ещё не стартанула, то можно обмануть:
Код:
#include <c_types.h>
#include <osapi.h>
#include <user_interface.h>
#include "driver/uart.h"

void test_dhcplease(uint32 ip)
{
    struct dhcps_lease please;
    please.start_ip = ip;
    please.end_ip = please.start_ip + (10<<24);
    if(!wifi_softap_dhcps_stop()) {
        os_printf("Error wifi_softap_dhcps_stop()!\n") ;
        return;
    }
    os_printf("wifi_softap_set_dhcps_lease("IPSTR".."IPSTR") = ", IP2STR((struct ip_addr *)&please.start_ip), IP2STR((struct ip_addr *)&please.end_ip));
    if(wifi_softap_set_dhcps_lease(&please) == true) {
        os_printf("Ok\n");
    }
    else os_printf("Err\n");
    if(!wifi_softap_dhcps_start()) os_printf("Error wifi_softap_dhcps_start()!\n");
}
void init_done_cb(void)
{
#if 0
    struct ip_info info;
    if(wifi_get_ip_info(SOFTAP_IF, &info))    test_dhcplease(info.ip.addr + (2<<24));
    else os_printf("Error wifi_get_ip_info()!\n");
#endif
}
void user_init(void)
{
    // Configure the UART
    uart_init(BIT_RATE_115200, BIT_RATE_115200);
    os_printf("\n\nHello!\n");
    wifi_set_opmode(STATIONAP_MODE);
    test_dhcplease(2<<24);
    system_init_done_cb(init_done_cb);
}
Отладка в порту UART1:
Код:
Hello!
wifi_softap_set_dhcps_lease(0.0.0.2..0.0.0.12) = Ok
mode : sta(18:fe:34:9f:c0:bf) + softAP(1a:fe:34:9f:c0:bf)
add if0
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
И всё - "loss of wireless connectivity function", т.е. полная дисфункция :):
24.gif
Зачем нужно было писать проверки задаваемого ip в wifi_softap_set_dhcps_lease() китайцами? Если уж написали - пусть исправляют :) :)
Иначе это лишний ошибочный болтающийся код в Flash, впрочем как и всё написанное ими, кроме ворованного кода из open-cource
 
Последнее редактирование:

pvvx

Активный участник сообщества
Можно и так написать:
Код:
void user_init(void)
{
    // Configure the UART
    uart_init(BIT_RATE_115200, BIT_RATE_115200);
    os_printf("\n\nHello!\n");
    wifi_set_opmode(STATIONAP_MODE);

    struct ip_info info;
    wifi_get_ip_info(SOFTAP_IF, &info);
    test_dhcplease(info.ip.addr + (2<<24));
    system_init_done_cb(init_done_cb);
}
Результат одинаков :)
Hello!
wifi_softap_set_dhcps_lease(0.0.0.2..0.0.0.12) = Ok
Все требования из документации "2C-SDK-Espressif IoT SDK Programming Guide_EN_V1.0.1.pdf" выполнены:
Function:
Set the IP range that can be got from ESP8266 soft-AP DHCP server.

Note:
This API need to be called during DHCP server disable.
 
Последнее редактирование:

pvvx

Активный участник сообщества
а это
buggy application codes are not considered SDK bugs
Это значит что никакие ошибки не принимаются за ошибки вообще. :)
Принимают ошибки только с Iot на их демо-плате и с их сервером.
Всё остальное - есть application. AT тоже управляется внешней application.

Короче программа выдачи бабла закрыта :)
И нефиг им писать про ошибки - они вставляют всякую гадость в прошивку!
Вот по fifo вставили где не попадя:
Код:
void user_uart_wait_tx_fifo_empty(int uartn, uint32 wait)
{
    uint32 t = system_get_time(); 
    do {
        if((READ_PERI_REG(UART_STATUS(uartn)) & (UART_TXFIFO_CNT << UART_TXFIFO_CNT_S))== 0) return;   
    }
    while(system_get_time() - t < wait);
}
 
Последнее редактирование:

Victor

Administrator
Команда форума
Получил очередной ответ (по списку предыдущих ошибок в wifi_softap_set_dhcps_lease)
Please try to test again based on SDK of v1.0.1(b2).
Besides, please change type of start_ip and end_ip in dhcps_lease into ip_addr and use macro of IP4_ADDR to set value of start_ip and end_ip.
Any more questions, please let us know.
А по последней вот
Please test again using the attached patch for 1.0.1(b2)
 

Вложения

pvvx

Активный участник сообщества
Получил очередной ответ (по списку предыдущих ошибок в wifi_softap_set_dhcps_lease)
А по последней вот
Всё это уже мало интересно - данные куски либ у меня уже замещены исходниками (PvSDK v0.0.0 b0) app_main.c, flash.c, wdt.c, dhcpserver.c...
Теперь это не их ошибки, а наши :)
Надо всё переписывать, а то http://esp8266.ru/forum/threads/mem-check-fail.168/#post-4950
RTC MEM CHECK FAIL!!! в SDK 1.0.1 b2 всегда:
Код:
 ets Jan  8 2013,rst cause:2, boot mode:(1,6)


ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x40100000, len 28024, room 16
tail 8
chksum 0x07
load 0x3ffe8000, len 2752, room 0
tail 0
chksum 0xfa
load 0x3ffe8ac0, len 4808, room 8
tail 0
chksum 0x32
csum 0x32
RTC MEM CHECK FAIL!!!
Но оно завуалировано переключением скорости UART при смене PLL с 26MHz на 40MHz и выводится обрывочными кракозябами, по причине смены скорости UART не дождавшись вывода этой гадости. Так-же переключение скоростей UART и другие операции с UART в SDK сопровождаются выводом кракозяб. Китайцы :)
Код:
 // кусок реверса SDK 1.0.1 b2 (полный, но измененный под свои нужды, в "свалке")
void ICACHE_FLASH_ATTR init_wifi(uint8 *esp_init_data, uint8 * mac) {
    if(register_chipv6_phy(esp_init_data)){
        os_printf_plus("%s %u\n", "app_main.c", 140);
        while(1);
    }
    uart_div_modify(0, 1068);
    uart_div_modify(1, 1068);
....
}
Сообщения(!) возникают в register_chipv6_phy() (там бывает и вывод циферек :)), которая меняет на ходу скорость PLL, а uart_div_modify() сбрасывает fifo UART и полного сообщения не выходит, а выходят куски с кракозябами...
Это всё сделано для того, чтобы вы не смогли использовать ни один UART, т.к. при кривой китай-смене скорости и китай-инициализации портов возникают любые импульсы и отсеять по скорости ненужные символы в подключенном к модулю устройстве невозможно. :p
(кому нужен чистый UART - используйте переключение пинов UART0 RX<->RTS, TX<->CTS)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Очередная плохая ошибка в SDK 1.0.1. При включенном хваленом китайском LIGH sleep на WiFi не передаются длинные файлы по HTTP - застревает. В других опциях (MODEM, NONE sleep) всё нормально.
Отправляет 4-ре пакета и начинает тупить - передающий буфер у Lwip заполнен. Потом опять передает до 2-х пакетов и опять передающий буфер заполнен к моменту ответа Lwip-ом что передано. И так пока не сорвется протокол передачи calback-ами совсем.
(Как это надоело - что не сделают, всё с ошибками!)
 
Последнее редактирование:

pvvx

Активный участник сообщества
В SDK 1.0.1 не всегда работает EVENT_STAMODE_GOT_IP - как надоели эти китаёзы....:mad:
Работает при включенном wifi_station_dhcpc_start() и то не всегда!
 

Victor

Administrator
Команда форума
не всегда работает EVENT_STAMODE_GOT_IP
Espressif сейчас требует очень подробное описание ошибки, чтобы они могли все легко повторить сами.
Плюс куча всего еще им нужно расписать, включая исходный код примера.
Теперь репорты принимаются только в таком файле. Посмотрите, что они требуют. Если, хотя бы, основное мне дадите, попробую еще заход к ним сделать.
Но если ошибка нестабильная, то вряд ли что получится.
 

pvvx

Активный участник сообщества
Код:
#include "ets_sys.h"
#include "osapi.h"
#include "os_type.h"
#include "user_interface.h"
#include "driver/uart.h"
#include "user_config.h"


LOCAL void ICACHE_FLASH_ATTR wifi_handle_event_cb(System_Event_t *evt)
{
    os_printf("WiFi event %x\n", evt->event);
    switch (evt->event) {
        case EVENT_STAMODE_CONNECTED:
            os_printf("Connect to ssid %s, channel %d\n",
                    evt->event_info.connected.ssid,
                    evt->event_info.connected.channel);
            break;
        case EVENT_STAMODE_DISCONNECTED:
            os_printf("Disconnect from ssid %s, reason %d\n",
                    evt->event_info.disconnected.ssid,
                    evt->event_info.disconnected.reason);
            break;
        case EVENT_STAMODE_AUTHMODE_CHANGE:
            os_printf("New AuthMode: %d -> %d\n",
                    evt->event_info.auth_change.old_mode,
                    evt->event_info.auth_change.new_mode);
            break;
        case EVENT_STAMODE_GOT_IP:
            os_printf("Station ip:" IPSTR ",mask:" IPSTR ",gw:" IPSTR "\n",
                    IP2STR(&evt->event_info.got_ip.ip),
                    IP2STR(&evt->event_info.got_ip.mask),
                    IP2STR(&evt->event_info.got_ip.gw));
            break;
        case EVENT_SOFTAPMODE_STACONNECTED:
            os_printf("Station: " MACSTR "join, AID = %d\n",
                    MAC2STR(evt->event_info.sta_connected.mac),
                    evt->event_info.sta_connected.aid);
            break;
        case EVENT_SOFTAPMODE_STADISCONNECTED:
                os_printf("Station: " MACSTR "leave, AID = %d\n",
                        MAC2STR(evt->event_info.sta_disconnected.mac),
                        evt->event_info.sta_disconnected.aid);
            break;
        }
}

struct station_config stconfig;
struct ip_info st_ip_info;

void setup_wifi_test2(void)
{
    os_printf("\n-------------------------------\n");
    os_printf("Setup_wifi_test2(), dhcp: Off");
    os_printf("\n-------------------------------\n");
    if(!wifi_set_opmode(STATION_MODE)) os_printf("Error wifi_set_opmode(STATION_MODE)\n");
    if(!wifi_station_set_auto_connect(false)) os_printf("Error wifi_station_set_auto_connect(false)\n");
    if(!wifi_station_dhcpc_stop()) os_printf("Error wifi_station_dhcpc_stop()\n");
    if(!wifi_station_disconnect()) os_printf("Error wifi_station_disconnect()\n");
    if(!wifi_station_set_config(&stconfig)) os_printf("Error wifi_station_set_config()\n");
    if(!wifi_set_ip_info(STATION_IF, &st_ip_info)) os_printf("Error wifi_set_ip_info()\n");
    if(!wifi_station_connect()) os_printf("Error wifi_station_connect()\n");
    if(!wifi_station_set_auto_connect(true)) os_printf("Error wifi_station_set_auto_connect(1)\n");
}

void setup_wifi_test1(void)
{
    os_printf("\n-------------------------------\n");
    os_printf("Setup_wifi_test1(), dhcp: On");
    os_printf("\n-------------------------------\n");
    if(!wifi_set_opmode(STATION_MODE)) os_printf("Error wifi_set_opmode(STATION_MODE)\n");
    if(!wifi_station_set_auto_connect(false)) os_printf("Error wifi_station_set_auto_connect(false)\n");
    if(!wifi_station_dhcpc_stop()) os_printf("Error wifi_station_dhcpc_stop()\n");
    if(!wifi_station_disconnect()) os_printf("Error wifi_station_disconnect()\n");
    if(!wifi_station_set_config(&stconfig)) os_printf("Error wifi_station_set_config()\n");
    if(!wifi_set_ip_info(STATION_IF, &st_ip_info)) os_printf("Error wifi_set_ip_info()\n");
    if(!wifi_station_connect()) os_printf("Error wifi_station_connect()\n");
    if(!wifi_station_set_auto_connect(true)) os_printf("Error wifi_station_set_auto_connect(1)\n");
    if(!wifi_station_dhcpc_start()) os_printf("Error wifi_station_dhcpc_start()\n");
}

void setup_wifi_setup(void)
{
    os_printf("\n-------------------------------\n");
    os_printf("Setup_wifi_start(), dhcp: On");
    os_printf("\n-------------------------------\n");
    if(!wifi_set_opmode(STATION_MODE)) os_printf("Error wifi_set_opmode(STATION_MODE)\n");
    if(!wifi_station_set_auto_connect(false)) os_printf("Error wifi_station_set_auto_connect(false)\n");
    if(!wifi_station_dhcpc_stop()) os_printf("Error wifi_station_dhcpc_stop()\n");
    if(wifi_station_get_config(&stconfig))    {
        os_memset(stconfig.ssid, 0, sizeof(stconfig.ssid));
        os_memset(stconfig.password, 0, sizeof(stconfig.password));
        os_sprintf(stconfig.ssid, "%s", WIFI_CLIENTSSID);
        os_sprintf(stconfig.password, "%s", WIFI_CLIENTPASSWORD);
        if(!wifi_station_set_config(&stconfig)) os_printf("Error wifi_station_set_config()\n");
    }
    else os_printf("Error wifi_station_get_config()\n");
    IP4_ADDR(&st_ip_info.ip, 192, 168, 1, 50);
    IP4_ADDR(&st_ip_info.netmask, 255, 255, 255, 0);
    IP4_ADDR(&st_ip_info.gw, 192, 168, 1, 1);
    if(!wifi_set_ip_info(STATION_IF, &st_ip_info)) os_printf("Error wifi_set_ip_info()\n");
    if(!wifi_station_set_auto_connect(true)) os_printf("Error wifi_station_set_auto_connect(1)\n");
    if(!wifi_station_dhcpc_start()) os_printf("Error wifi_station_dhcpc_start()\n");
}

ETSTimer timer1sec;
static uint32 tisk1sec;

void clock1sec(void *arg) {
    switch(tisk1sec++) {
    case 10:
        setup_wifi_test2();
        break;
    case 20:
        setup_wifi_test1();
        tisk1sec = 0;
        break;
    }
}

void init_done_cb(void)
{
    os_printf("\nSDK Init\nCurrent 'heap' size: %d bytes\n", system_get_free_heap_size());
    os_timer_disarm(&timer1sec);
    os_timer_setfn(&timer1sec, (os_timer_func_t *)clock1sec, NULL);
    os_timer_arm(&timer1sec, 1000, 1);
}

void ICACHE_FLASH_ATTR user_init()
{
    uart_init(BIT_RATE_115200, BIT_RATE_115200);
    os_printf("\n\nUser_init()\n");
    tisk1sec = 0;
    setup_wifi_setup();
    wifi_set_event_handler_cb(wifi_handle_event_cb);
    wifi_station_set_reconnect_policy(true);
    system_init_done_cb(init_done_cb);
}
Log, ищем (WiFi event 3, Station ip:....) :
Код:
User_init()

-------------------------------
Setup_wifi_start(), dhcp: On
-------------------------------
mode : sta(18:fe:34:9f:c0:bf)
add if0

SDK Init
Current 'heap' size: 39088 bytes
scandone
add 0
aid 2
pm open phy_2,type:2 0 0
cnt

connected with mns.ru-6446, channel 1
WiFi event 0
Connect to ssid mns.ru-6446, channel 1
dhcp client start...
ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1

-------------------------------
Setup_wifi_test2(), dhcp: Off
-------------------------------
rm match
pm close 7 0 0/10162867
WiFi event 1
Disconnect from ssid mns.ru-6446, reason 8
scandone
add 0
aid 2
pm open phy_2,type:2 0 0
cnt

connected with mns.ru-6446, channel 1
WiFi event 0
Connect to ssid mns.ru-6446, channel 1
ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1

-------------------------------
Setup_wifi_test1(), dhcp: On
-------------------------------
rm match
pm close 7 0 0/8892275
WiFi event 1
Disconnect from ssid mns.ru-6446, reason 8
scandone
add 0
aid 2
pm open phy_2,type:2 0 0
cnt

connected with mns.ru-6446, channel 1
WiFi event 0
Connect to ssid mns.ru-6446, channel 1
dhcp client start...
ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1

-------------------------------
Setup_wifi_test2(), dhcp: Off
-------------------------------
rm match
pm close 7 0 0/9992312
WiFi event 1
Disconnect from ssid mns.ru-6446, reason 8
scandone
add 0
aid 2
pm open phy_2,type:2 0 0
cnt

connected with mns.ru-6446, channel 1
WiFi event 0
Connect to ssid mns.ru-6446, channel 1
ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1

-------------------------------
Setup_wifi_test1(), dhcp: On
-------------------------------
rm match
pm close 7 0 0/9075683
WiFi event 1
Disconnect from ssid mns.ru-6446, reason 8
scandone
add 0
aid 2
pm open phy_2,type:2 0 0
cnt

connected with mns.ru-6446, channel 1
WiFi event 0
Connect to ssid mns.ru-6446, channel 1
dhcp client start...
WiFi event 3
Station ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1

-------------------------------
Setup_wifi_test2(), dhcp: Off
-------------------------------
rm match
pm close 7 0 0/9899292
WiFi event 1
Disconnect from ssid mns.ru-6446, reason 8
scandone
add 0
aid 2
pm open phy_2,type:2 0 0
cnt

connected with mns.ru-6446, channel 1
WiFi event 0
Connect to ssid mns.ru-6446, channel 1
ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1

-------------------------------
Setup_wifi_test1(), dhcp: On
-------------------------------
rm match
pm close 7 0 0/8984480
WiFi event 1
Disconnect from ssid mns.ru-6446, reason 8
scandone
add 0
aid 2
pm open phy_2,type:2 0 0
cnt

connected with mns.ru-6446, channel 1
WiFi event 0
Connect to ssid mns.ru-6446, channel 1
dhcp client start...
ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1

-------------------------------
Setup_wifi_test2(), dhcp: Off
-------------------------------
rm match
pm close 7 0 0/10080746
WiFi event 1
Disconnect from ssid mns.ru-6446, reason 8
scandone
add 0
aid 2
pm open phy_2,type:2 0 0
cnt

connected with mns.ru-6446, channel 1
WiFi event 0
Connect to ssid mns.ru-6446, channel 1
ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1

-------------------------------
Setup_wifi_test1(), dhcp: On
-------------------------------
rm match
pm close 7 0 0/8991085
WiFi event 1
Disconnect from ssid mns.ru-6446, reason 8
scandone
add 0
aid 2
pm open phy_2,type:2 0 0
cnt

connected with mns.ru-6446, channel 1
WiFi event 0
Connect to ssid mns.ru-6446, channel 1
dhcp client start...
WiFi event 3
Station ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
По идее он должен быть после каждого Connect to ssid... (WiFi event 0) :)
Это набитый наскоро тест. В реальности ещё хуже, а модуль подключается к AP всегда, но события WiFi event 3 - в 20% случаев нет, хотя запрос состояния станции дает GOT_IP, да и работет WEB - он без соединения то как? :) WiFi event 0 есть всегда...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Это не SDK а глюкодром от китайцев и уточнять уже лень. Всё что новое напишут - всё с ошибками. Слов на них больше нет :mad:

Основной таймер Lwip-у (ets_timer_setfn(&check_timeouts_timer, (ETSTimerFunc *) sys_check_timeouts, NULL)) киатёзы устанавливают на такие задержки, в зависимости от типа sleep:
wifi_set_sleep_type:
NONE = 25 ms,
LIGHT = 3000 ms + reset_noise_timer(3000),
MODEM = 25 ms + reset_noise_timer(100);
Естественно, что Lwip ничего не сращивает, когда у него все времена poll и т.д. поехали в 120 раз! :eek: У него соответственно все тайминги открытия/закрытия/передачи/чистки памяти и т.д. увеличиваются в 120 раз. Та-же TIME_WAIT становиться не 60 сек, а 2 часа.
Могли бы просто выключить Lwip и сказать - "работайте ребяты - зачем вам связь? - так хорошо - ничего не жрет" :D
Потом начинают нагло врать про потребление http://bbs.espressif.com/viewtopic.php?f=6&t=133
Выключили бы все прерывания и поставили бы CPU на команду waiti, да замеряли сколько жрет их модуль. А то пишут формулы от балды, без учета реальной обстановки в эфире (замер у них с модулем в экране от внешних WiFi сигналов, да с подпиткой по проводам управления... Китайцы - на каждую фигню приписывают и врут :) )
 
Последнее редактирование:

Victor

Administrator
Команда форума
Отправил про EVENT_STAMODE_GOT_IP, а по предыдущему посту мне им не объяснить будет
 
Сверху Снизу