• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 лет? Неужели новых багов нет или бесполезно им писать?
 
Сверху Снизу