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

Баги/глюки/проблемы в каком-то конкретном примере из пакета Sming

JustACat

Moderator
Команда форума
Если вы нашли/столкнулись с каким-либо багом/ошибкой в каком-то конкретном примере из пакета Sming - что-то не компилируется, не собирается, некорректно функционирует. Тогда постарайтесь описать эту проблему в данной теме.

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

Внимание: оффтоп будет удаляться, пожалуйста, придерживайтесь темы! Спасибо!
 

aloika

Active member
FTP пока еще работает не очень стабильно.

Что я делаю:

- Запускаю пример HttpServer_Bootstrap, он работает, все нормально.

- Запускаю немного переделанный пример FtpServer_Files, подключаюсь к FTP. Вижу три файла от HTTP сервера, но, например, скопировать их на компьютер не получается. Получается удалить, но не всегда. Бывает, два файла удаляется, а третий нет. Бывает, что после удаления третьего файла перестает читаться содержимое диска модуля, по таймауту рвется соединение. Один раз файлы после попытки их удаления стали отображаться размером 4294967295 байт... Использую Total Commander.

Папки вообще не создаются.
 

anakod

Moderator
Команда форума
aloika, какие ошибки в логе? Пробовали ли отформатировать файловую систему перед началом тестирования?

P.S. Папок в файловой системе нет физически, это правда.
 

aloika

Active member
Начинаем с отформатированной ФС.

- Загружаем пример FtpServer_Files. На диске 2 файла.
- удаляем один файл - все нормально
- удаляем второй файл - Тотал коммандер задумывается секунд на 30 и разрывает соединение по таймауту.

Можно снова соединиться, но там уже пойдут какие-то глюки, надо форматировать.

еще раз:

- Загружаем пример FtpServer_Files, вставляем туда в начало команду форматирования. На диске два файла.
- скидываем туда еще пару-тройку файлов - нормально.
- удаляем один файл - все нормально
- удаляем второй файл - нормально
- ...
- удаляем (n-1)-й файл - нормально
- удаляем последной файл - Тотал коммандер задумывается секунд на 30 и разрывает соединение по таймауту.

Т.е. проблема как минимум при удалении последнего файла с ФС.

Про папки да, глупость сказал :)

Код:
Terminal log file
Date: 26.03.2015 - 23:21:55
-----------------------------------------------
DELE: 'data.bin'
> 250 OK

TCP connection send: 8 (8)
PORT: '10,0,0,5,241,18'
connection to: 10.0.0.5, 61714
> 200 OK

TCP connection send: 8 (8)
LIST: ''
+TCP connection
TcpConnection::connect result:, 0
> 150 Connecting

TCP connection send: 16 (16)
OnConnected
timeout updating: 70 -> 300
TCP connected
TCP connection send: 48 (48)
TCP connection closing
> 226 Transfer Complete.

TCP connection send: 24 (24)
TCP sent: 48
~TCP connection
-TCP connection
DELE: 'example.txt'
> 250 OK

TCP connection send: 8 (8)
PORT: '10,0,0,5,241,23'
connection to: 10.0.0.5, 61719
> 200 OK

TCP connection send: 8 (8)
LIST: ''
+TCP connection
TcpConnection::connect result:, 0
> 150 Connecting

TCP connection send: 16 (16)
OnConnected
timeout updating: 70 -> 300
TCP connected
TCP connection closed by timeout: 300 (from 300)
TCP connection closing
~TCP connection
-TCP connection
TCP connection error: -11
~TCP connection
onAccept state: 0 K=0
Free heap size=32136, K=0
+TCP connection
timeout updating: 70 -> 900
TCP connection send: 26 (26)
USER: 'me'
> 331 OK

TCP connection send: 8 (8)
PASS: '123'
checkUser: me 123
> 230 OK

TCP connection send: 8 (8)
SYST: ''
> 215 Windows_NT: Sming Framework

TCP connection send: 33 (33)
FEAT: ''
> 502 Not supported

TCP connection send: 19 (19)
HELP: 'SITE'
> 502 Not supported

TCP connection send: 19 (19)
CWD: '/'
> 250 OK

TCP connection send: 8 (8)
PWD: ''
> 257 "/"

TCP connection send: 9 (9)
TYPE: 'A'
> 250 OK

TCP connection send: 8 (8)
PORT: '10,0,0,5,241,149'
connection to: 10.0.0.5, 61845
> 200 OK

TCP connection send: 8 (8)
LIST: ''
+TCP connection
TcpConnection::connect result:, 0
> 150 Connecting

TCP connection send: 16 (16)
OnConnected
timeout updating: 70 -> 300
TCP connected
ABOR: ''
> 502 Not supported

TCP connection send: 19 (19)
TCP received: (null)
TCP connection closing
-TCP connection
~TCP connection

-----------------------------------------------
Date: 26.03.2015 - 23:23:07
End log file
 

anakod

Moderator
Команда форума
Вот бы все баг репорты были такими содержательными емкими и последовательными :) aloika, большое спасибо. Баг исправлен.

Update: И добавлено кое-что вкусное, сейчас в основной ветке отпишусь подробнее.
 
Последнее редактирование модератором:

JustACat

Moderator
Команда форума
Не собирается у меня каменный цветок FtpServer_Files:
Код:
06:16:20 **** Build of configuration Default for project FtpServer_Files ****
mingw32-make.exe -f C:/Sming/FtpServer_Files/Makefile all
C+ ../Sming/system/stringconversion.cpp
CC ../Sming/system/flashmem.c
C+ ../Sming/system/esp_cplusplus.cpp
C+ ../Sming/Wiring/WShift.cpp
C+ ../Sming/Wiring/WMath.cpp
C+ ../Sming/Wiring/SplitString.cpp
C+ ../Sming/Wiring/WString.cpp
C+ ../Sming/Wiring/Stream.cpp
C+ ../Sming/Wiring/Print.cpp
C+ ../Sming/Wiring/I2cMaster.cpp
C+ ../Sming/Wiring/IPAddress.cpp
C+ ../Sming/SmingCore/SPI.cpp
C+ ../Sming/SmingCore/HardwareSerial.cpp
C+ ../Sming/SmingCore/DataSourceStream.cpp
C+ ../Sming/SmingCore/Wire.cpp
C+ ../Sming/SmingCore/Clock.cpp
C+ ../Sming/SmingCore/PWM.cpp
C+ ../Sming/SmingCore/Digital.cpp
C+ ../Sming/SmingCore/Interrupts.cpp
C+ ../Sming/SmingCore/ESP8266EX.cpp
C+ ../Sming/SmingCore/FileSystem.cpp
C+ ../Sming/SmingCore/Timer.cpp
C+ ../Sming/SmingCore/Network/HttpServerConnection.cpp
C+ ../Sming/SmingCore/Network/FTPServer.cpp
In file included from ../Sming/SmingCore/Network/FTPServer.cpp:12:0:
../Sming/SmingCore/Network/FTPServerConnection.h: In member function 'virtual bool FTPServer::onCommand(String, String, FTPServerConnection&)':
../Sming/SmingCore/Network/FTPServerConnection.h:34:15: error: 'virtual void FTPServerConnection::response(int, String)' is protected
  virtual void response(int code, String text = "");
               ^
../Sming/SmingCore/Network/FTPServer.cpp:51:63: error: within this context
   connection.response(200, "File system successfully formated");
                                                               ^
C:/Sming/FtpServer_Files/Makefile:329: recipe for target 'out/build/../Sming/SmingCore/Network/FTPServer.o' failed
mingw32-make.exe: *** [out/build/../Sming/SmingCore/Network/FTPServer.o] Error 1

06:16:24 Build Finished (took 4s.888ms)

Перенес пока
Код:
virtual void response(int code, String text = "");
в public секцию в FTPServerConnection.h и все собралось... Но что-то мне подсказывает, что это не совсем правильное решение :-Р Ведь не зря же автор ее в protected кинул изначально :)

Чичас буду тестировать...

Update:
Первое, с чем столкнулся при подключении :)
Could not retrieve directory listing
Passive mode not supported

Ну тут все понятно, переключился в Active :), зашлось на FTP увидел там файло:
/bootstrap.css.gz
/data.bin
/example.txt
/index.html
/jquery.js.gz

Получить, отредактировать и сохранить обратно, а потом снова получить /example.txt вышло сразу.
А вот /bootstrap.css.gz не прокатило. Предполагаю, что оно осталось в файловой системе от старого примера, и файловая повреждена.
В UART при этом попало нечто такое:
TCP connection send: 8 (8)

RETR: 'bootstrap.css.gz'

+TCP connection

TcpConnection::connect result:, 0

> 150 Connecting



TCP connection send: 16 (16)

OnConnected

timeout updating: 70 -> 300

TCP connected

> 250 Transfer started



TCP connection send: 22 (22)

read errno -10004


TCP connection failed with err -1 ("")

> 250 Transfer started



TCP connection send: 22 (22)

read errno -10004


TCP connection failed with err -1 ("")

> 250 Transfer started



TCP connection send: 22 (22)

read errno -10004

Чтож, щас отформатим и попробуем. Запустил fsformat:
fsformat: ''

sect_first: 44, sect_last: 7c


fs.start:40244000, size:224 Kb


First init file system

sect_first: 44, sect_last: 7c


mount res: 0


> 200 File system successfully formated



TCP connection send: 39 (39)

Диск стал девственно чист :)

Залил на него пару jpg файлов, общим размером 126 338 байт. Залилось, как на мой взгляд, мгновенно!
Отключил питание. Кстати, при отключении питания в терминал успело прилететь некое:
Fatal exception (0): икракозябрытутвсякие

Не знаю, на сколько это плохо.

Включаю. Все снова завелось. Подключаюсь к FTP, на диске нахожу кроме своих, еще файлы (пару, ну те, которые прописаны в примере и создались при запуске):
/790940ESP12SCHEM.jpg
/data.bin
/esp-12.jpg
/example.txt

Скачиваю обратно пару своих файлов - скачка идет медленнее, чем загрузка, секунды 23 заняло (загрузка произошла мгновенно).
WinMerge сказал, что файлы идентичны, то есть те, что я загружал, идентичны тем, что я получил обратно.
Одно но: файл 790940ESP12SCHEMA.jpg был переименован в 790940ESP12SCHEM.jpg - одной буковки A не хватает. Видимо, ограничение на длину имени файла.
Еще, как я понял, время создания/модификации не сохраняется, у меня у всех файлов пишет 01.01.2015 в 1:00

Пробую удалить файл:
790940ESP12SCHEM.jpg
И неудача:
DELE: '/790940ESP12SCHEM.jpg'

> 550 FAIL



TCP connection send: 10 (10)
Несколько повторных попыток: и ESP перезагрузился :(
С другими файлами та же беда: скачать, изменить - пожалуйста. Удалить - ошибка.

Переименовать тоже не выходит, но там проще:
RNFR: '/example.txt'

> 502 Not supported

Для справки: использовал клиент WinSCP (в нем тоже можно команды слать, да и вообще он мне последнее время для FTP, SFTP и прочего больше нравится, чем TotalCommander).
Попробую ка в TotalCommander:
- переименовать он тоже не дал, ну понятно - not supported
- а вот удалить через него вышло:
DELE: '790940ESP12SCHEM.jpg'

> 250 OK
Видно, что TC посылает команду на удаление без слеша в имени, а WinSCP со слешем - думаю, это нужно предусмотреть.

Пока что все, что нашел :)
 
Последнее редактирование:

shaman1010

Member
Перекрестно, отсюда.
В примере HttpServer_Bootstrap, если нагрузку вешать не на GPIO0, а на GPIO2 (именно 2, некоторые другие проверил - там в норме), то напряжение на нем дергается в диапазоне 3-3,3В с некоторой периодичностью. Очень похоже, на параллельный опрос каким-то другим протоколом (скорее всего i2c, там GPIO2 по-моему используется по умолчанию). Т.е. стоит предусмотреть отключение дублирующих действий для GPIO, используемых в SDK и переназначенных в Sming-е.
 

anakod

Moderator
Команда форума
А в этот момент что-то ещё используется/инициализируется?
 

shaman1010

Member
А в этот момент что-то ещё используется/инициализируется?
Нет, голый пример, с тремя изменениями - SSID, пароль и GPIO2. Отключал нагрузку (тестером голую лапку измерял) и USB-UART. Дергается.
Изменил на GPIO13 (вот сейчас) - USB-UART подключен, диод на GPIO - все ровно. Т.е. вопрос именно с GPIO2 (может еще с какими-то, абсолютно все не проверял). Плюс сам сервер периодически перегружается (обнуляется счетчик на странице). SPI-flash - 128я, предварительно заливал однофайловую прошивку с бутлоадером 1.3b
 

sharky

New member
Перекрестно, отсюда.
В примере HttpServer_Bootstrap, если нагрузку вешать не на GPIO0, а на GPIO2 (именно 2, некоторые другие проверил - там в норме), то напряжение на нем дергается в диапазоне 3-3,3В с некоторой периодичностью. Очень похоже, на параллельный опрос каким-то другим протоколом (скорее всего i2c, там GPIO2 по-моему используется по умолчанию). Т.е. стоит предусмотреть отключение дублирующих действий для GPIO, используемых в SDK и переназначенных в Sming-е.
А напряжение питания не дергается случаем?
Просто я например когда запитывал еспшку с матрицами с выхода ft232 модуля (от юсб запитанного), так постоянно просаживалось на входе напряжение, диодик подключал явно видно было как блымает периодически, кондер в 470мФ на питалово помог но не особо, ток не замерял. После пересадки на аккум от мобилки блымать переставало.
 

anakod

Moderator
Команда форума
Закомитил обновление.

JustACat, спасибо за помощь, попробуйте пожалуйста снова, у меня сейчас нет под рукой модуля чтобы протестировать мои исправления.

shaman1010, странно, честно говоря пока не понимаю. До явного вызова begin() никакие классы не должны взаимодействовать с GPIO. инициализация прошла успешно, остальной код весь работает? (просто бутлоадер вполне может вести себя так).
 

sharky

New member
Закомитил обновление.

JustACat, спасибо за помощь, попробуйте пожалуйста снова, у меня сейчас нет под рукой модуля чтобы протестировать мои исправления.

shaman1010, странно, честно говоря пока не понимаю. До явного вызова begin() никакие классы не должны взаимодействовать с GPIO. инициализация прошла успешно, остальной код весь работает? (просто бутлоадер вполне может вести себя так).
Очень вовремя, начал собирать наткнулся на багу в FTPServer с инкапсуляцией связанную, обновился, пропала, но вылезла другая:

C+ Libraries/OneWire/OneWire.cpp
AR out/build/app_app.a
LD out/build/app.out
out/build/app_app.a(System.o): In function `Vector<ISystemReadyHandler*>::addElement(ISystemReadyHandler* const&)':
C:\projects\electronic\esp8266\projects.git\Sming\Sming/SmingCore/Platform/../../Wiring/WVector.h:237: undefined reference to `system_get_cpu_freq'
C:\projects\electronic\esp8266\projects.git\Sming\Sming/SmingCore/Platform/../../Wiring/WVector.h:237: undefined reference to `system_get_cpu_freq'
 

anakod

Moderator
Команда форума
Это ведь СДК 1.0?
На нем, по идее, должно работать.
Если ничего не получиться можно временно запоминтировать обращение к этой функции.
 

sharky

New member
Это ведь СДК 1.0?
На нем, по идее, должно работать.
Если ничего не получиться можно временно запоминтировать обращение к этой функции.
Судя по релизнотам в UDK - да.
UDK 2.0, в нем SDK 1.0

в user_interface.h эта ф-я описана, не подскажете, где оно пытается искать ее реализацию, а то я малость еще чайник в сях :) ?

С 0.95 сдк тож вылетело, но в отличие от 1.0 нормально показало место ошибки реальное.
Вобщем пока в System.cpp захардкодил

CpuFrequency SystemClass::getCpuFrequency()
{
return eCF_80MHz;// (CpuFrequency)system_get_cpu_freq();
}

собралось и на 0.95 и на 1.0
 
Последнее редактирование:
Сверху Снизу