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

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

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


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

Victor

Administrator
Команда форума
Вот прислали патч, просят проверить сейчас
 

Вложения

pvvx

Активный участник сообщества
Вот прислали патч, просят проверить сейчас
Счас попробую. Только заметил соо...
----
Работает с предыдущим примером, который выложен выше.
Позже проверю с другими вариантами.
----
Работает и в моем WEB.
HO! Всё, как всегда у китайцев :)
WiFi event 3
Station ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
<- это в структуре самой event
ST info ip:0.0.0.0,mask:0.0.0.0,gw:0.0.0.0 <- это в нутрях SDK, текущий реальный конфиг WiFi ST (это в SDK не описано = хак :) )
ST wifi_get_ip_info() ip:0.0.0.0,mask:0.0.0.0,gw:0.0.0.0 <- это сообщает wifi_get_ip_info() :)
А далее SDK пишет сама в порт UART, но уже после события "WiFi event 3":
ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1 <- Это и есть фактическое назначение IP ST.

Т.е. сделано методически не верно. Событие вызывается до назначения ST фактического ip адреса. Из него незя вызвать соединение - необходимо что-то думать ещё, типа вешать таймер и ждать когда WiFi ST установит ip адрес в другой процедуре :)
Т.ч. всё опять криво - надо было им вешать событие после фактического назначения IP, а не по приему в dhcp ответа... Но тут наверно уже ничего не поделать - китайцы... :(

Без dhcp (отключен), со статическим ip всё нормально, но это и испортить сложно, т.к. ip назначен заранее:
WiFi event 0
Connect to ssid mns.ru-6446, channel 1
ST info ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
WiFi event 3
Station ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
ST info ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
ST wifi_get_ip_info() 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

PS: чтобы не вызывать глупых вызовов wifi_get_ip_info()
достаточно прописать заголовок:
Код:
struct s_info {
    uint32 ap_ip;
    uint32 ap_mask;
    uint32 ap_gw;
    uint32 st_ip;
    uint32 st_mask;
    uint32 st_gw;
    uint8 ap_mac[6];
    uint8 st_mac[6];
} __attribute__((packed));
extern struct s_info info;
В ней находятся текущие ip,gw,mask,mac AP и ST в SDK Espressif :).
 
Последнее редактирование:

pvvx

Активный участник сообщества
озадачил их - пускай репу чешут
Надо бы чтобы чесали. Событие то обозначено что IP GOT. :) А то дети будут мучатся с этим событием...
----
В режиме ST при переключениях dhcp (on/off) с разрывом соединения бывает и такое:
connected with mns.ru-6446, channel 1
WiFi event 0
Connect to ssid mns.ru-6446, channel 1
ST info ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
dhcp client start...
WiFi event 3
Station ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
ST info ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
ST wifi_get_ip_info() ip:0.0.0.0,mask:0.0.0.0,gw:0.0.0.0
ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1

:)
Т.е. до срабатывания dhcp у ST уже есть прошлый IP и он, вроде, уже используется для netif... Китайцы...
Всё это и ещё тысячи кривостей они назовут "фичей" китай-SDK :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Но вроде всё нормально, хотя и номер ip прописан, но я вырубил dhcp на AP, а на ST включил:
WiFi event 0
Connect to ssid mns.ru-6446, channel 1
ST info ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
dhcp client start...

Всё - модуль соединиться не может. Так и должно быть.
Далее на ходу включил dhcp на AP, и через несколько секунд модуль соединился:
WiFi event 3
Station ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
ST info ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
ST wifi_get_ip_info() ip:0.0.0.0,mask:0.0.0.0,gw:0.0.0.0
ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
SNTP: Set time: 0x5553d178

Т.е. работает. Но китай логика не позволяет задать ip, gw, mask по умолчанию, если dhcp на AP отключен. :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
а со старыми либами также?
Со старыми у меня в WEB вообще нет WiFi event 3.
Очень важна последовательность установок WiFi - а я их скопом даю. Там наверно надо какие задержки ставить, чтобы старая китай логика хоть как-то отработала и иногда вылезает WiFi event 3. Но разбираться с прошлым глюком неохота. Пусть делают нормально.
Размеры занимаемой памяти от новых libmain.a и libnet80211.a не изменились.
Но в своем Web я использую только eagle_lib.o mem_manager.o user_interface.o eagle_lwip_if.o от libmain.a :) Остальное уже замещено на исходники и с оптимизацией, да устранением китай-глюков...
 
Последнее редактирование:

pvvx

Активный участник сообщества
научите нас, чтобы можно было использовать это в UDK/Sming/Arduino IDE
Это не так просто, т.к. всё в работе и постоянно изменяется. Но всё, что работает точно уже выложено в моей web свалке.
Что замещается в libmain - в Web_Base\app\main
Что расковыряно в BIOS-ROM в Web_Base\app\include\bios + Web_Base\app\include\phy
+ Часть ковыряний в Web_Base\xlam\libs
Что собралось по hardware - в Web_Base\app\include\hw
Перепаковка lib в батниках в Web_Base\lib
Но я изменил метод обращения к регистрам периферии CPU для правильной оптимизации с компилятором от UDK. По тому изменен и eagle.rom.addr.v6.ld.
Последняя версия (не доотлаженная beta в которой и тест событий) тут. Когда немного причешу и доделаю "клиентов" по событию - выкину в тему "свалки", а эту удалю.
Ныне пытаюсь сделать загрузчик множественных SDK из большой Flash и операционки без SDK с максимумом RAM (с 81920 байт RAM + 32768 iram) для работы с датчиками (с загрузкой для неё в 30ms от включения и дальнейшим выбором какой SDK "грузить" по результатам с датчиков :) ). В 16M flash влезает более 32 шт. SDK :)
 
Последнее редактирование:

Victor

Administrator
Команда форума
всё, что работает точно уже выложено в моей web свалке
а не хотите все это на github перенести?
Вам будет удобнее обновлять одной командой все изменившиеся файлы, не надо помнить где старое или обновленное - гит сам все сверит.
Ну и еще вам удобно, что резервная копия всегда есть, а то вдруг что с компом. Синхронизировать исходники на разных компьютерах опять же удобнее, если для вас это актуально.
В общем, плюсов много, не зря же гитхаб так популярен стал.
Ну и международное сообщество может подключиться к работе, раз наши, из тех кто в теме, как-то пассивно к этому относятся. Хотя быть может причина и в том что при такой организации, как сейчас трудно вам помогать - допустим поправил бы кто-то какую-то фичу, а что с ней делать, куда заливать - непонятно. А на гитхабе сделал pull request, главный разработчик посмотрел и одобрил/отклонил изменения - удобно.
А нам удобнее тем, что всегда актуальные файлы будут на гитхабе.

и второй вопрос - в какой среде вы все собираете? Наверняка что-то удобное для себя придумали - поделитесь опытом.
 

pvvx

Активный участник сообщества
@pvvx, Нормально вы их озадачили!
Прислали новые либы
А я им шо - бесплатный тестер? Пусть оплачивают исходниками. :) Нормальный тестер стоит гораздо больше оплаты их программеров вместе взятых. :) Да и дома на кухне что я там напроверяю :)
По исходникам в 1000 раз проще и дешевле.
 
Последнее редактирование:

pvvx

Активный участник сообщества
На вскидку работает. Объем RAM/IRAM памяти не поехал ни на байт, а код (flash) увеличился на 404 байта. Это только в кусках от их либ, что я использую. Остальное мне уже не интересно, а скоро и всё от них будет так-же - ненужное :)
Теперь всё время так:
WiFi event 0
Connect to ssid mns.ru-6446, channel 1
ST info ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
dhcp client start...
WiFi event 3
Station ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
ST info ip:192.168.1.50,mask:255.255.255.0,gw:192.168.1.1
ST wifi_get_ip_info() 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

Но у меня все всегда устанавливается заранее и всё прописано (выдавать 192.168.1.50 ESP8266) везде жестко с проверками по MAC.
В общем работает. При статическом ip и выключенном dhcp на AP роутера, когда модуль к ней подключается как ST без dhcp - работает.
Если в таком случае не задать ip ST модуля - орет:
WiFi event 0
Connect to ssid mns.ru-6446, channel 1
ST info ip:0.0.0.0,mask:0.0.0.0,gw:0.0.0.0
check your static ip!

Но это уже было давно, в прошлой версии SDK.
Кароче - пойдет.
Пусть правят AT+SAVETRANSLINK=1,”ip”,port,“TCP” и AT+CIPMODE=1
Из AT+SAVETRANSLINK=1,x,x не нашел выхода, коме как перепрошивкой всех конфигов, а их в AT много - в трех областях :)
AT+CIPMODE=1 - неполноценная и не работает аналогично AT+SAVETRANSLINK=1,x,x
RX в UART не идет в TCP, а TX идет из TCP без заголовков. Пусть думают как переключать в полный TCP2UART режим и как из него выходить :)
А то два косых режима - из одного не выйти без перепрошивки модуля, а другой половинчатый...
Да и новые либы пишут что они SDK ver: 1.0.1. "May 13 2015 19:46:26"
 
Последнее редактирование:

pvvx

Активный участник сообщества
а не хотите все это на github перенести?
Нет. Не привык - надо что-то думать, а пока не до него. Я же не проф.программист, т.к. пишу на любых языках программирования :) Больше от старых занятий сымать защиты и кодировки в сыром коде на чем угодно осталось... счас уже давно этим не занимаюсь. А так как внутренности известны - любой язык программирования становиться тоже известным за несколько минут :)
Да и git-ом необходимо заниматься - это же очередная тамагочи, а у меня их и так достаточно...
и второй вопрос - в какой среде вы все собираете? Наверняка что-то удобное для себя придумали - поделитесь опытом.
То, что выкладывается - всё в UDK.
Eclipse + FAR + IDA + HIEW... В общем самыми простыми методами. Что-то городить на данный проект - лень.
------
Например достаточно мельком взглянуть на коды CPUи видно, что программеры Espressif cсовершенно не заботятся об какой-либо оптимизации:
Код:
#define XS_TO_RTC_TIMER_TICKS(t, prescaler, period)    \
     (((t) > (0xFFFFFFFF/(APB_CLK_FREQ >> prescaler))) ?    \
      (((t) >> 2) * ((APB_CLK_FREQ >> prescaler)/(period>>2)) + ((t) & 0x3) * ((APB_CLK_FREQ >> prescaler)/period))  :    \
      (((t) * (APB_CLK_FREQ >> prescaler)) / period))

void ICACHE_FLASH_ATTR ets_timer_arm_new(ETSTimer *ptimer, uint32_t us_ms, int repeat_flag, int isMstimer)
{
    if(ptimer->timer_next != (ETSTimer *)0xffffffff) ets_timer_disarm(ptimer);
    if(us_ms != 0) {
        if(timer2_ms_flag == 0) { // us_timer
            if(isMstimer) us_ms *= 1000;
#if ((APB_CLK_FREQ>>4)%1000000)
            us_ms = XS_TO_RTC_TIMER_TICKS(us_ms, 4, 1000000);
#else
            us_ms *= (APB_CLK_FREQ>>4)/1000000;
#endif
        }
        else { // ms_timer
#if ((APB_CLK_FREQ>>8)%1000)
            us_ms = XS_TO_RTC_TIMER_TICKS(us_ms, 8, 1000);
#else
            us_ms *= (APB_CLK_FREQ>>8)/1000;
#endif
        }
    }
    if(repeat_flag) ptimer->timer_period = us_ms;
    timer_insert(TIMER1_COUNT + us_ms, ptimer);
}
Т.е. в us тайме стоит ветвистый макрос, который транслируется в 3 ветки и ещё с неточным вычислением :), когда умножение идет всего на 5, и для анализа деления на цело много писать не требуется: #if ((APB_CLK_FREQ>>4)%1000000) ...
Ну и т.д. по всему SDK... За что им платит компания? Или там пригрелся сынишка-недоучка одного из главных?
 
Последнее редактирование:

Victor

Administrator
Команда форума
Да и git-ом необходимо заниматься - это же очередная тамагочи, а у меня их и так достаточно...
Может я смогу помочь?
Попробовать повыкладывать на github ваши обновления PVV SDK, разрекламировать его на esp8266.com и посмотрим что будет.
Может народ подключится? Вот в Arduino IDE в день более десятка всяких писем, люди обновления кода Ивану присылают несколько раз в неделю.
А если не подключится никто, тогда бросим это дело да и все.
От вас кроме согласия ничего и не требуется особо. Ну еще помочь мне раскидать все по папкам, makefile поправить, а я попробую пособирать примеры из UDK.
Так что если готовы меня поднатаскать, то я поработаю малость тоже - может что и выйдет :)
 

pvvx

Активный участник сообщества
Попробовать повыкладывать на github ваши обновления
Говорю же - сначала надо собрать что-то значительное, а потом уже всё остальное....
А пока нет времени встроить в спец.загрузчик настройку pll CPU, т.к. без SDK, после старта ROM-BIOS у модулей с 26MHz неверная частота CPU = 52MHz (при x2 -> 104MHz).
Так-же надо доразобраться с настройки области "кеширования" flash для выборочного запуска разных SDK из одной большой flash (чтение и запись flash уже успешно перехватывается и они пишут/читают то, что я им подставляю)...
 

pvvx

Активный участник сообщества
Не прокатило...
Ну, хотя бы это
Говорил же - обманщики они - позор для китайцев :) И все их программы - это пиар для лохов.
В новом SDK все библиотеки жестко привязываются к их отладочной плате, где две Flash и т.д.
 

Evgeny D

Member
Грусть-тоска =(. С таким подходом кашу не сваришь.
А сменилось отношение к китайцам за 5 лет? Неужели новых багов нет или бесполезно им писать?
 
Сверху Снизу