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

Общие баги/глюки/проблемы в пакете Sming

pvvx

Активный участник сообщества
Впрочем я думаю с проблемой надо бороться не частными методами, а общим - выпиливанием SDK :)
Выпиливайте только необходимые obj из их SDK. Я так поступаю - проблем уже долго нет, кроме программных патчей-обходов их ошибок. Совсем лажевые obj меняю на свои.
В новом SDK 1.0.1 они понавтыкали кое как примеров из LwIP - только память жрет. SNTP к примеру. Пример от LwIP и так стыкуется и компилится, без их внедренных ошибок.
 
Последнее редактирование:
Возможно тем что Sming тоже стал использовать немного больше места в IRAM? Добавился 1(!) метод для OTA обновлений. Все остальное место съедает SDK :)
Напишите, пожалуйста, точные размеры выходных файлов firmware после компиляции. И обязательно используете полную пересборку всего (rebuild).
Собрал под esp-open-sdk сегодняшнем (в котором espressif sdk 1.0.1) MeteoControl под старым Smig-om и новым. Старый - работает. новый - нет. Собирал, как Вы просили make rebuild.

Вот размеры РАБОЧЕЙ прошивки

shurik@bobooka:~/dev/Sming.good/MeteoControl$ ls -l out/firmware/
итого 576
-rw-r--r-- 1 shurik admins 43248 Апр 29 20:09 eagle.flash.bin
-rwxr-xr-x 1 shurik admins 261388 Апр 29 20:09 eagle.irom0text.bin
-rw-r--r-- 1 shurik admins 277772 Апр 29 20:09 eagle.irom0text.fs.bin

Вот размеры НЕ РАБОЧЕЙ прошивки
shurik@bobooka:~/dev/Sming/MeteoControl$ ls -l out/firmware/
итого 484
-rw-r--r-- 1 shurik admins 37936 Апр 29 20:14 eagle.flash.bin
-rwxr-xr-x 1 shurik admins 214501 Апр 29 20:14 eagle.irom0text.bin
-rw-r--r-- 1 shurik admins 230885 Апр 29 20:14 eagle.irom0text.fs.bin

Пробовал собирать проект с новым Смигом и СТАРЫМ правленым мною мейком - прошивка сперва выдавала ошибки, сразу после заливки, а после рестарта - просто мусор в консоли и вис.
Вроде даже пробовал подпихивать в сегодняшний esp-open-sdk esp sdk в плоть до 1.0.1 и новый смиг с новым мейком не создавал рабочие прошивки.. хелп.. :(
 

anakod

Moderator
Команда форума
А Вы точно не перепутали местами рабочий и нет? По размером похоже как будто бы наоборот.
 
А Вы точно не перепутали местами рабочий и нет? По размером похоже как будто бы наоборот.
Неа.. сам удивился.. листинг привел спеиально бОльший, чем надо.. глянте, в первом листинге каталог sming.good зовется.. полные штаны странности; (
 

anakod

Moderator
Команда форума
Alexander V. Ribchansky, попробуйте пожалуйста на последней версии из репозитория. Я перевел Sming на обновленную библиотеку libgcc, что дало существенный объем дополнительного пространства в IROM.
Спасибо @pvvx за research!

PS Не забудьте предварительно обновить Makefile, если Вы работаете на собственном проекте.
 
Alexander V. Ribchansky, попробуйте пожалуйста на последней версии из репозитория. Я перевел Sming на обновленную библиотеку libgcc, что дало существенный объем дополнительного пространства в IROM.
Спасибо @pvvx за research!

PS Не забудьте предварительно обновить Makefile, если Вы работаете на собственном проекте.
В результате тестов выяснилось, что самый новый Smig из репозитория РАБОТАЕТ с esp-sdk 1.0.0 и 1.0.1_b1
и НЕ работает с 1.0.1_b2 и просто 1.0.1.
Для теста собирал HttpServer_Bootstrap - с рабочими сдк оно просто запускалось и :) работало. с НЕ рабочими сдк оно запускалось и входило в вечный цикл scandone-reconnect, то же, что уже тут мелькало. То есть собака живет в некоторой несовместимости китайского с русским, а именно сдк и Смиг-а.
Но радует то, что хоть с двумя сдк от китайцоФ смиг работает! И субъективно - работает как-то лучше, чем то, что я на тех же тестах наблюдал с сдк 1.0.0 и старым смигом. Раньше странички от МетеоКонтрол могла через три на десятый раз загрузиться при перманентном обновлении ее в браузере, а с новым комплектом сдк + смиг у меня так и не получилось "задолбать" МетеоКонтрол, чтоб страничка не загрузилась при рефреше. Может ли это улучшение с работами внутри смига быть связано или мне просто кажется?

Ну и давно пора от меня СПАСИБО сказать всем причастным к проекту Smig! Я даже мечтать не мог, чтоб такой функционал на такой мелочевке, как esp8266 можно было заиметь! ФС и темплейты для веба с возможностью грузить jquery + bootstrap etc это нечто... Надеюсь со временем глюки отловятся и это станет нашим надежным инструментарием разработки.
 

pvvx

Активный участник сообщества
Ну вот и у меня, видимо, так же. Так как пока что висит (у меня) именно 1.0.1_b1 - на нем все работает нормально.
Я же говорил, что поехали конфиги Lwip. Сдвиг в структуре pсb. Добавился один dword в середке. По этой причине OpenLwip 1.4.1 несовместим.
workspace\Web_Base\app\main\eagle_lwip_if.c дан в моей "свалке", но в нем так и не найдено "???"
??? = queue;
???+4 = queue;
И практика показала, что использовать "обгрызанную" либу liblwip.a от Espressif пока проще и надежнее.
Иначе, при OpenLwip 1.4.1 вам грозит:
1) Потери памяти при работе.
2) Несовместимость функционирования всех процедур использующих ссылки в pcb.
 
Последнее редактирование:

anakod

Moderator
Команда форума
Да, проблема именно в Open LWIP, в нашем это чате уже протестировали и подтвердили.
pvvx, может быть Вы в таком случае еще можете подсказать конкретное место? Или простым добавлением поля данная проблема не решается?
 

pvvx

Активный участник сообщества
Я ошибся - не struct tcp_pcb поехала, а struct netif. В Lwip были добавлены опции, похоже связанные с broadcast. Дальше не разбирал - нет смысла.
Добавка была переписана на свой лад китайцами. Т.е. стандарт заменен на что-то своё.
У себя я добавил поле какую-то опцию в lwipopts.h (счас не помню. погляжу, но смысл то в этом есть, пока не найдены "???" ?)
В eagle_lwip_if_alloc() выделяется память под queue = (void *) pvPortMalloc(sizeof(struct ETSEventTag) * QUEUE_LEN); // pvPortZalloc(80 байт)
При включенной AP и ST разные размеры занятой heap в SDK. Разница на включение каждой более 1.5 килобайта. При выключении не вся память освобождается. Только рестарт помогает. Но потерь при включении/отключении нет. А эти "???" и есть указатель сохранения на занятую память и может быть задействовано далее в коде. Но проц и компилятор используемый Espressif (от xtensa) любит работать по указателям со смещением для лучшей оптимизации кода чем ваш транслятор и дизасм с поиском где эта переменная может быть задействована усложняется... Для этого необходим доскональный разбор всего SDK, а этого ещё нема...
 
Последнее редактирование:

ntil

New member
метод TcpClient::send при попытке повторного использования сразу подряд приводит к крашу. в результате все что его пользует или наследует не может отпрвалять более 255 байт.
выявлено при попытке переделать HttpClient для поддержки кастомных запросов (пилю REST)
 

anakod

Moderator
Команда форума
ntil, HTTP клиент отправляет даные блоками по ~1.5 КБ. Так что дело точно не в этом, чтобы сказать что-то более определённое нужно видеть код. На что завязана отправка - onReadyToSendData?
 

ntil

New member
а где у HTTP клиента можно определить такой каллбэк? это тот, который наследуется из TcpClient ?
как им пользоватся?
 

JustACat

Moderator
Команда форума
ntil, посмотрите в примере отправки данных на NarodMon. Там есть правда именно на TCP клиенте, но суть та же должна быть.
 

pvvx

Активный участник сообщества
HTTP клиент отправляет даные блоками по ~1.5 КБ. Так что дело точно не в этом, чтобы сказать что-то более определённое нужно видеть код. На что завязана отправка - onReadyToSendData?
А для Google Chrome надо отправлять по ~3 килобайта (2 x MSS). И сделайте выключатель nagle в LwIP. Иначе тормоз - народ жалуется :) Как вырубите Нейгла сразу пойдет по 3 кило в Хроме (двумя пакетами на опережение ACK)
Далее будите бороться с этим http://esp8266.ru/forum/threads/esp...abotaj-1000-za-60-sekund.171/page-3#post-5780
 
Последнее редактирование:

ntil

New member
проблема с TcpClient решена .
проблема с HttpClient будет решена в процессе его переделки для поддержки кастомных запросов.
 

verzi

New member
Подключил обычный светодиод и залил следующий код:
Код:
#include <user_config.h>
#include <SmingCore/SmingCore.h>

// Put you SSID and Password here
#define WIFI_SSID "******"
#define WIFI_PWD "******"
#define LED_PIN 2 // GPIO2

Timer procTimer;
int state = 0;

FTPServer ftp;

// Will be called when WiFi station was connected to AP
void connectOk()
{
    Serial.println("\r\nI'm CONNECTED:");
    Serial.println(WifiStation.getIP().toString());

    // Start FTP server
    ftp.listen(21);
    ftp.addUser("me", "123"); // FTP account
    // You can also use special FTP comand: "fsformat" for clearing file system (for example from TotalCMD)
}

// Will be called when WiFi station timeout was reached
void connectFail()
{
    Serial.println("I'm NOT CONNECTED. Need help!!! :(");

    // .. some you code for configuration ..
}

void blink()
{
    analogWrite(LED_PIN, state);
    Serial.println(state);
    state = state+1;
    if (state == 255) state = 0;
}

void init()
{
    Serial.begin(SERIAL_BAUD_RATE); // 115200 by default
    Serial.systemDebugOutput(true); // Enable debug output to serial

    fileSetContent("example.txt", "hello world!");
    fileSetContent("data.bin", "\1\2\3\4\5");

    WifiStation.enable(true);
    WifiStation.config(WIFI_SSID, WIFI_PWD);
    WifiAccessPoint.enable(false);

    // Run our method when station was connected to AP (or not connected)
    WifiStation.waitConnection(connectOk, 20, connectFail); // We recommend 20+ seconds for connection timeout at start
    pinMode(LED_PIN, OUTPUT);
    procTimer.initializeMs(200, blink).start();
}
При подключении по ftp, передаче и приеме файлов он начинает моргать.
Это нормально или PWM надо как то по другому делать?
Заранее спасибо за конструктивные ответы.
 

JustACat

Moderator
Команда форума
verzi, емнип, проблема именно в GPIO2. Как-то где-то обсуждалось это. Если вешать на другой GPIO там на 12-13-14, то не моргает. Ну и питание еще хорошее, т.к. оно как раз при передаче может просаживаться, кондер хороший не помешал бы. Ну и последнее - начинает моргать - это как? Яркость просто чуть меняется, или вот прямо гаснет и зажигается?
У меня сейчас на GPIO13 статусный светодиод висит - с ним все четко, горит только по команде, при передаче не мерцает вроде вообще. Резистором ток через диод ограничен всего на 2-5 mA. (все равно для ноги ESP 12 mA - максимум)
На GPIO12 повесил перезагрузку подключенной к ESP аврки (Arduino). Пришлось через оптопару для согласования уровней :) Конкретно до перепрошивки Arduino руки еще не дошли, но уже работает запуск режима OTA программирования по команде извне (по UDP), скачивание уже подготовленной (из Intel HEX) прошивки с поднятого Wed-сервера во flash модуля и перезагрузка Arduino. Дальше по плану: оно должно загрузить эту прошивку через бутлоадер в Arduino.
 

verzi

New member
Хорошо так моргает, как будто дублирует этот статусный светодиод. Питание нормальное подключил, разные ноги попробовал, не помогает. Еще, если присмотреться, то видно что диод чуть чуть тухнет примерно раз в секунду, даже если передача данных не происходит. Предполагаю что это какой то системный таймер срабатывает. После залил свою старую прошивку на nodemcu, на ней все нормально. Светодиод горит как ему и положено, на заданном уровне яркости. При передачи данных не моргает.
 
Сверху Снизу