Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "Sming Open Source Framework", создана пользователем JustACat, 23 мар 2015.

  1. JustACat

    JustACat Moderator Команда форума

    Сообщения:
    568
    Симпатии:
    121
    Если вы нашли/столкнулись с какой-либо общей проблемой/багом в сборке Sming - например, что-то не устанавливается, не подключается, имеются какие-то ошибки в общей документации, в SDK, в библиотеках. Тогда постарайтесь описать эту проблему в данной теме.

    - Старайтесь быть краткими и четко формулировать мысль.
    - Опишите, что вы делали, когда обнаружили ошибку.
    - Приложите по возможности логи/скриншоты (под Спойлер), куски кода (под Спойлер и в тег Код).
    - Не пишите проблемы с конкретными примерами из сборки, для этого есть отдельная тема.

    Внимание: оффтоп будет удаляться, пожалуйста, придерживайтесь темы! Спасибо!
     
    Последнее редактирование: 23 мар 2015
  2. verzi

    verzi Новичок

    Сообщения:
    23
    Симпатии:
    1
    При прошивке нового примера остаются файлы от старого.
    Например был HttpServer_Bootstrap, после решил попробовать FtpServer_Files, но когда подключаюсь по ftp и делаю ls, то вижу:
    Хотя там должны быть example.txt и data.bin, насколько я понимаю.
    И кстати, ничего кроме ls не работает, ни put, ни get, ни delete.
    Как очищать файловую систему? Нужно прошить пустой файл, но какого размера и по какому адресу?
     
    JustACat нравится это.
  3. anakod

    anakod Moderator Команда форума

    Сообщения:
    314
    Симпатии:
    100
    Самый надежный способ отчисти spiffs_format() :)
    FTP должен работать но:
    • Пока не верные таймауты, очень быстро рвется соединение
    • Есть проблемы совместимости тк вся текущая реализация протокола была написана за одну ночь. Но из Total Commander у меня все отрабатывает корректно кроме переименования (его временно отключил)
     
  4. JustACat

    JustACat Moderator Команда форума

    Сообщения:
    568
    Симпатии:
    121
    А мне, видимо, повезло. В моем случае после компиляции и загрузки примера с сервером в модуль - все подключилось к моему роутеру домашнему, сразу же выкачало нужные файлы с вашего сервера и завелось без проблем...
    Возможно дело в том, что действительно от примера к примеру файловая система не очищается (у меня как раз ее не было никакой, модуль был чистый)?

    Как-то бы вот так понять четко, как нужно прошивать прошивку, чтобы в ESP не осталось ничего от старой. (думаю, что этот вопрос нубский, и я просто еще не дорос, т.к. только пробую писать под ESP в eclipse под SDK)

    И еще вот сам вчера столкнулся с интересной особенностью:
    - Пробовал пример Basic_WiFi, после него в модуле остались данные по WiFi.
    - После загрузки в модуль примера Basic_Serial вроде, в терминале (кроме вывода, который реально написан в коде примера Basic_serial) я увидел еще и информацию о том, что модуль к WiFi подключился, то есть некую отладочную сетевую информацию.

    Понятное дело, что это не дело :)
    Если организовывать общение ESP с каким-то контроллером по UART, то лишнего вывода в UART со стороны ESP быть не должно. А тут получается, что я нигде этот вывод в коде не прописывал, а в UART он попадает.
    Но, мне кажется, что я просто еще не разобрался, и как-то этот вывод должен отключаться, просто пока времени не было дальше поразбираться.
     
  5. anakod

    anakod Moderator Команда форума

    Сообщения:
    314
    Симпатии:
    100
    Все просто,
    Код (C):
    1. Serial.systemDebugOutput(false); // Disable debug output
     
    JustACat нравится это.
  6. aloika

    aloika Активный участник сообщества

    Сообщения:
    381
    Симпатии:
    26
    Тоже такое замечал. Вроде как это лечится выполнением цели flashinit перед flash.
     
  7. Dr. Morg

    Dr. Morg Новичок

    Сообщения:
    84
    Симпатии:
    4
    Создал в Sming функцию для отдачи XML (кстати, типа контента XML не было, пришлось добавить static const char* XML = "text/xml"; в WebConstants.h) ответа Ajax функции:

    Код (Text):
    1. void onAjax_inputs(HttpRequest &request, HttpResponse &response)
    2. {
    3.     //response.setHeader("Access-Control-Allow-Origin","*");
    4.     response.setContentType(ContentType::XML);
    5.     TemplateFileStream *tmpl = new TemplateFileStream("ajax_inputs.xml");
    6.     auto &vars = tmpl->variables();
    7.     vars["IntTemp"] = "35";
    8.     vars["TargTemp"] = "101";
    9.     vars["Pval"] = "136";
    10.     vars["Ival"] = "34";
    11.     vars["Dval"] = "20";
    12.     vars["CurTemp"] = "96";
    13.     vars["OnTimer"] = "0";
    14.     vars["OnAlarm"] = "0";
    15.     vars["Alarm1"] = "6:40";
    16.     vars["Alarm2"] = "17:20";
    17.     vars["Alarm3"] = "9:40";
    18.     vars["CurrTime"] = "03.04.2015 11:42";
    19.     vars["BrewTime"] = "20.46";
    20.     vars["EspressoCounter"] = "97";
    21.     vars["HeaterState"] = "0";
    22.     response.sendTemplate(tmpl); // this template object will be deleted automatically
    23. }
    Шаблон ajax_inputs.xml:
    Код (Text):
    1. <?xml version = "1.0" ?>
    2. <inputs>
    3.     <TargTemp>{TargTemp}</TargTemp>
    4.     <Pval>{Pval}</Pval>
    5.     <Ival>{Ival}</Ival>
    6.     <Dval>{Dval}</Dval>
    7.     <IntTemp>{IntTemp}</IntTemp>
    8.     <CurTemp>{CurTemp}</CurTemp>
    9.     <OnTimer>{OnTimer}</OnTimer>
    10.     <OnAlarm>{OnAlarm}</OnAlarm>
    11.     <BrewTime>{BrewTime}</BrewTime>
    12.     <Alarm1>{Alarm1}</Alarm1>
    13.     <Alarm2>{Alarm2}</Alarm2>
    14.     <Alarm3>{Alarm3}</Alarm3>
    15.     <CurrTime>{CurrTime}</CurrTime>
    16.     <HeaterState>{HeaterState}</HeaterState>
    17.     <EspressoCounter>{EspressoCounter}</EspressoCounter>
    18. </inputs>
    Из-за удобства написания кода решил использовать шаблон, но, видимо из-за этого через непродолжительное время веб-сервер перестаёт отвечать (Ajax запросы отправляются на сервер 1 раз в секунду).
    Иногда ESP8266 уходит в ребут (в логе это видно).
    Лог работы (до ребута, после ребута, до полного ступора) во вложении.

    Слишком много переменных для шаблона или причина в чём-то другом?
    Почему модуль уходит в ребут? Почему после ребута работает корректно, но очень быстро уходит в ступор и помогает только хард ресет или передёргивание питания?

    Так же не работают длинные имена файлов.
    Например, apple-touch-icon-precomposed-180x180.png не отрабатывал, пришлось переименовать в icon.png.
    Вероятно, особенность реализации SpifFS, но нужно иметь в виду.
     

    Вложения:

    • ESP_log.txt
      Размер файла:
      38,5 КБ
      Просмотров:
      3
  8. anakod

    anakod Moderator Команда форума

    Сообщения:
    314
    Симпатии:
    100
    1. Попробуйте, пожалуйста, повторить тест на более редком интервале (например 1 раз в 5-10 секунд). Поможет ли это?
    2. Нельзя ли использовать JSON вместо XML? Он встроен в Sming и весьма эффективен (как в генерации так и в отдаче).
     
  9. anakod

    anakod Moderator Команда форума

    Сообщения:
    314
    Симпатии:
    100
    По Вашей наводке добавил text/xml в MIME типы. Спасибо!
     
  10. Dr. Morg

    Dr. Morg Новичок

    Сообщения:
    84
    Симпатии:
    4
    @anakod, тогда ещё тип ICO добавьте, его тоже не было: static const char* ICO = "image/x-icon";

    Касательно меньшего интервала,- протестирую и отпишусь о результате.
    Насколько JSON будет эффективно работать на коротких интервалах (1р/сек)?
     
  11. anakod

    anakod Moderator Команда форума

    Сообщения:
    314
    Симпатии:
    100
    Готово. JSON будет существенно эффективнее, он преобразуется в текст только на финальном этапе. И объем текста сильно меньше.
     
  12. Dr. Morg

    Dr. Morg Новичок

    Сообщения:
    84
    Симпатии:
    4
    @anakod, протестировал работу с интервалом 5 и 10 сек,- работает чуть дольше, но всё равно что-то происходит, после чего (видимо по ватчдогу) модуль уходит в ребут:
    Код (Text):
    1. continue to plaint text
    2. plain template text pos: 474, len: 28
    3. TCP connection send: 28 (28)
    4. Stream completed
    5. TCP connection closing
    6. ~TCP connection
    7. -TCP connection
    8.  
    9. ets Jan  8 2013,rst cause:4, boot mode:(3,6)
    10.  
    11. wdt reset
    12. load 0x40100000, len 30988, room 16
    13. tail 12
    14. chksum 0xb7
    15. ho 0 tail 12 room 4
    16. load 0x3ffe8000, len 2528, room 12
    17. tail 4
    18. chksum 0xa5
    19. load 0x3ffe89e0, len 10880, room 4
    20. tail 12
    21. chksum 0x75
    22. csum 0x75
    23. slЋѓrlЊћгЊcЊb||lЏмтnоЂnoгЊlа|мЊllЏlЊlЏЂll`Ђoь
     
  13. Dr. Morg

    Dr. Morg Новичок

    Сообщения:
    84
    Симпатии:
    4
    Переписал функцию на JSON:
    Код (Text):
    1. void onJSON(HttpRequest &request, HttpResponse &response)
    2. {
    3.     JsonObjectStream* stream = new JsonObjectStream();
    4.     JsonObject& vars = stream->getRoot();
    5.     vars["IntTemp"] = "35";
    6.     vars["TargTemp"] = "101";
    7.     vars["Pval"] = "136";
    8.     vars["Ival"] = "34";
    9.     vars["Dval"] = "20";
    10.     vars["CurTemp"] = "96";
    11.     vars["OnTimer"] = "0";
    12.     vars["OnAlarm"] = "0";
    13.     vars["Alarm1"] = "6:40";
    14.     vars["Alarm2"] = "17:20";
    15.     vars["Alarm3"] = "9:40";
    16.     vars["CurrTime"] = "03.04.2015 11:42";
    17.     vars["BrewTime"] = "20.46";
    18.     vars["EspressoCounter"] = "97";
    19.     vars["HeaterState"] = "0";
    20.     response.sendJsonObject(stream);
    21. }
    Но даже при обращении напрямую к функции (не через AJAX), периодически и достаточно часто возникают таймауты:
    таймауты (раскрыть)

    onAccept state: 0 K=0
    Free heap size=27752, K=0
    +TCP connection
    path=/ajax_inputs
    Host === 192.168.88.207
    parsed
    Request: GET, nodata
    TCP received: 412 bytes
    onReadyToSendData: 1
    response sendHeader
    TCP connection send: 17 (17)
    TCP connection send: 19 (19)
    TCP connection send: 32 (32)
    TCP connection send: 2 (2)
    response sendBody
    TCP connection send: 398 (398)
    Stream completed
    TCP connection closing
    ~TCP connection
    onAccept state: 0 K=0
    Free heap size=26296, K=0
    +TCP connection
    -TCP connection
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    TCP connection closed by timeout
    TCP connection closing
    ~TCP connection
    -TCP connection
    onAccept state: 0 K=0
    Free heap size=28104, K=0
    +TCP connection
    path=/ajax_inputs
    Host === 192.168.88.207
    parsed
    Request: GET, nodata
    TCP received: 412 bytes
    onReadyToSendData: 1
    response sendHeader
    TCP connection send: 17 (17)
    TCP connection send: 19 (19)
    TCP connection send: 32 (32)
    TCP connection send: 2 (2)
    response sendBody
    TCP connection send: 398 (398)
    Stream completed
    TCP connection closing
    ~TCP connection
    -TCP connection



    Кстати, при скачивании файлов во флеш после заливки прошивки, тоже есть проблемы с onReadyToSendData: 3:
    onReadyToSendData: 3 (раскрыть)

    I'm CONNECTED
    Download file: index.htm 1
    Download: http://api.myhost.ru:80/ESP/index.htm
    connect to: api.myhost.ru
    DNS record found: api.myhost.ru = xxx.xxx.xxx.xxx
    TcpConnection::connect port: 80, 0
    OnConnected 3FFEB5D8
    TCP connected
    onReadyToSendData: 0
    TCP connection send: 53 (53)
    TcpClient request completed
    onReadyToSendData: 3
    TCP sent: 53
    onReadyToSendData: 2
    Header pos: 244
    Server === nginx/1.6.2
    Date === Sun, 05 Apr 2015 15:41:48 GMT
    Content-Type === text/html
    Content-Length === 12136
    Connection === close
    Last-Modified === Fri, 03 Apr 2015 11:45:52 GMT
    ETag === "1d26caa-2f68-512d07d91dfe6"
    Accept-Ranges === bytes
    TCP received: 1420 bytes
    onReadyToSendData: 1
    TCP received: 1420 bytes
    onReadyToSendData: 1
    TCP received: 1420 bytes
    onReadyToSendData: 1
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    TCP received: 1420 bytes
    onReadyToSendData: 1
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    onReadyToSendData: 3
    TCP received: 1420 bytes
    onReadyToSendData: 1
    onReadyToSendData: 3
    onReadyToSendData: 3
    TCP received: 1420 bytes
    onReadyToSendData: 1
    TCP received: 1420 bytes
    onReadyToSendData: 1
    TCP received: 1420 bytes
    onReadyToSendData: 1
    onReadyToSendData: 3
    TCP received: 1024 bytes
    onReadyToSendData: 1
    TCP received: (null)
    Download file len written: 12136, res^ 1
    TCP connection closing
    -TCP connection



    Как итог,- модуль вновь уходит в ребут:
    Код (Text):
    1.  ets Jan  8 2013,rst cause:4, boot mode:(1,0)
    2.  
    3. wdt reset
    4.  
    Может проблема всё-таки в lwip?
     
    Последнее редактирование: 5 апр 2015
  14. anakod

    anakod Moderator Команда форума

    Сообщения:
    314
    Симпатии:
    100
    Таймауты - это не так страшно. Браузер иногда открывает упреждающие соединения с целью оптимизации будущих запросов, Sming их автоматически закрывает для оптимизации памяти по таймауту.
    Главный вопрос - повторяется ли на JSON проблема с перезагрузкой/зависанием?
     
  15. Dr. Morg

    Dr. Morg Новичок

    Сообщения:
    84
    Симпатии:
    4
    @anakod, да, через некоторое время модуль уходит в ребут :(
     
  16. anakod

    anakod Moderator Команда форума

    Сообщения:
    314
    Симпатии:
    100
    Нужен Лог этого момента. Может даже несколько логов для того чтобы выявить закономерность/последовательность запросов которые приводят к такому результату.
     
  17. Dr. Morg

    Dr. Morg Новичок

    Сообщения:
    84
    Симпатии:
    4
    @anakod, добавил счётчик запросов, чтобы посмотреть где вылетит. Полный лог от старта до ребута во вложении.
    Хотел добавить ещё вывод времени в консоль, но прошивка не компилируется с кодом:
    Код (Text):
    1. time_t now = time(0);
    2. char* dt = ctime(&now);
    3. Serial.println(String(dt));
    Лог компиляции (раскрыть)

    AR out/build/app_app.a
    LD out/build/app.out
    c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: out/build/app.out section `.text' will not fit in region `iram1_0_seg'
    c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/lib\libc.a(lib_a-time.o):(.literal+0x0): undefined reference to `_gettimeofday_r'
    c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/lib\libc.a(lib_a-time.o): In function `time':
    d:\Neo\Project\ESP8266\DevKit\build\compiler\dl\esp-newlib\build\xtensa-lx106-elf\newlib\libc\time/../../../../../newlib/libc/time/time.c:46: undefined reference to `_gettimeofday_r'
    c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/lib\libc.a(lib_a-freer.o):(.literal+0x14): undefined reference to `_sbrk_r'
    c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/lib\libc.a(lib_a-freer.o): In function `_malloc_trim_r':
    d:\Neo\Project\ESP8266\DevKit\build\compiler\dl\esp-newlib\build\xtensa-lx106-elf\newlib\libc\stdlib/../../../../../newlib/libc/stdlib/mallocr.c:3325: undefined reference to `_sbrk_r'
    d:\Neo\Project\ESP8266\DevKit\build\compiler\dl\esp-newlib\build\xtensa-lx106-elf\newlib\libc\stdlib/../../../../../newlib/libc/stdlib/mallocr.c:3332: undefined reference to `_sbrk_r'
    d:\Neo\Project\ESP8266\DevKit\build\compiler\dl\esp-newlib\build\xtensa-lx106-elf\newlib\libc\stdlib/../../../../../newlib/libc/stdlib/mallocr.c:3340: undefined reference to `_sbrk_r'
    c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/lib\libc.a(lib_a-mallocr.o): In function `malloc_extend_top':
    d:\Neo\Project\ESP8266\DevKit\build\compiler\dl\esp-newlib\build\xtensa-lx106-elf\newlib\libc\stdlib/../../../../../newlib/libc/stdlib/mallocr.c:2165: undefined reference to `_sbrk_r'
    c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/lib\libc.a(lib_a-mallocr.o):d:\Neo\Project\ESP8266\DevKit\build\compiler\dl\esp-newlib\build\xtensa-lx106-elf\newlib\libc\stdlib/../../../../../newlib/libc/stdlib/mallocr.c:2202: more undefined references to `_sbrk_r' follow
    collect2.exe: error: ld returned 1 exit status
    C:/Sming-master/HttpServer_Bootstrap/Makefile:225: recipe for target 'out/build/app.out' failed
    mingw32-make.exe: *** [out/build/app.out] Error 1

    21:05:49 Build Finished (took 52s.756ms)
     

    Вложения:

    • ESP_log.txt
      Размер файла:
      304,4 КБ
      Просмотров:
      3
  18. anakod

    anakod Moderator Команда форума

    Сообщения:
    314
    Симпатии:
    100
    В Sming есть встроенный тип DateTime, можете попробовать его.
     
  19. anakod

    anakod Moderator Команда форума

    Сообщения:
    314
    Симпатии:
    100
    Т.е. Sming обработал 595 запросов а затем перезагрузился? Через сколько это произошло, не те ли самые ~15 минут о которых писали в соседней ветке?
     
  20. Dr. Morg

    Dr. Morg Новичок

    Сообщения:
    84
    Симпатии:
    4
    @anakod, DateTime использует тот же time.h и компиляция валится с теми же ошибками...
    Время, к сожалению, не засечь, так как функции времени не работают, а непрерывно наблюдать за процессом можно с ума сойти :)
    Про 15 минут сейчас почитаю, не попадалось мне такой информации.
     

Поделиться этой страницей