Если вы нашли/столкнулись с каким-либо багом/ошибкой в каком-то конкретном примере из пакета Sming - что-то не компилируется, не собирается, некорректно функционирует. Тогда постарайтесь описать эту проблему в данной теме.
- Старайтесь быть краткими и четко формулировать мысль.
- Опишите, что вы делали, когда обнаружили ошибку.
- Приложите по возможности логи/скриншоты (под Спойлер), куски кода (под Спойлер и в тег Код).
- Опишите, на каком железе (версию модуля и прочее) вы тестируете.
- Постарайтесь привести схему подключения (если уместно и под Спойлер).
Внимание: оффтоп будет удаляться, пожалуйста, придерживайтесь темы! Спасибо!
- Запускаю пример HttpServer_Bootstrap, он работает, все нормально.
- Запускаю немного переделанный пример FtpServer_Files, подключаюсь к FTP. Вижу три файла от HTTP сервера, но, например, скопировать их на компьютер не получается. Получается удалить, но не всегда. Бывает, два файла удаляется, а третий нет. Бывает, что после удаления третьего файла перестает читаться содержимое диска модуля, по таймауту рвется соединение. Один раз файлы после попытки их удаления стали отображаться размером 4294967295 байт... Использую Total Commander.
- Загружаем пример FtpServer_Files. На диске 2 файла.
- удаляем один файл - все нормально
- удаляем второй файл - Тотал коммандер задумывается секунд на 30 и разрывает соединение по таймауту.
Можно снова соединиться, но там уже пойдут какие-то глюки, надо форматировать.
еще раз:
- Загружаем пример FtpServer_Files, вставляем туда в начало команду форматирования. На диске два файла.
- скидываем туда еще пару-тройку файлов - нормально.
- удаляем один файл - все нормально
- удаляем второй файл - нормально
- ...
- удаляем (n-1)-й файл - нормально
- удаляем последной файл - Тотал коммандер задумывается секунд на 30 и разрывает соединение по таймауту.
Т.е. проблема как минимум при удалении последнего файла с ФС.
Не собирается у меня каменный цветок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 со слешем - думаю, это нужно предусмотреть.
Перекрестно, отсюда.
В примере HttpServer_Bootstrap, если нагрузку вешать не на GPIO0, а на GPIO2 (именно 2, некоторые другие проверил - там в норме), то напряжение на нем дергается в диапазоне 3-3,3В с некоторой периодичностью. Очень похоже, на параллельный опрос каким-то другим протоколом (скорее всего i2c, там GPIO2 по-моему используется по умолчанию). Т.е. стоит предусмотреть отключение дублирующих действий для GPIO, используемых в SDK и переназначенных в Sming-е.
Нет, голый пример, с тремя изменениями - SSID, пароль и GPIO2. Отключал нагрузку (тестером голую лапку измерял) и USB-UART. Дергается.
Изменил на GPIO13 (вот сейчас) - USB-UART подключен, диод на GPIO - все ровно. Т.е. вопрос именно с GPIO2 (может еще с какими-то, абсолютно все не проверял). Плюс сам сервер периодически перегружается (обнуляется счетчик на странице). SPI-flash - 128я, предварительно заливал однофайловую прошивку с бутлоадером 1.3b
Перекрестно, отсюда.
В примере HttpServer_Bootstrap, если нагрузку вешать не на GPIO0, а на GPIO2 (именно 2, некоторые другие проверил - там в норме), то напряжение на нем дергается в диапазоне 3-3,3В с некоторой периодичностью. Очень похоже, на параллельный опрос каким-то другим протоколом (скорее всего i2c, там GPIO2 по-моему используется по умолчанию). Т.е. стоит предусмотреть отключение дублирующих действий для GPIO, используемых в SDK и переназначенных в Sming-е.
А напряжение питания не дергается случаем?
Просто я например когда запитывал еспшку с матрицами с выхода ft232 модуля (от юсб запитанного), так постоянно просаживалось на входе напряжение, диодик подключал явно видно было как блымает периодически, кондер в 470мФ на питалово помог но не особо, ток не замерял. После пересадки на аккум от мобилки блымать переставало.
JustACat, спасибо за помощь, попробуйте пожалуйста снова, у меня сейчас нет под рукой модуля чтобы протестировать мои исправления.
shaman1010, странно, честно говоря пока не понимаю. До явного вызова begin() никакие классы не должны взаимодействовать с GPIO. инициализация прошла успешно, остальной код весь работает? (просто бутлоадер вполне может вести себя так).
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'