Разработка ‘библиотеки’ малого webсервера на esp8266.

vad7

Active member
Небольшой вопрос:
Изменяю в app_main.c что-то - libsdk.a новый, eagle.app.v6.out - старый, и в 0x07000.bin старые данные.
Чтобы изменилось, нужно удалить "eagle.app.v6.out".

Еще одно предупреждение вылазит постоянно: Invalid project path: Include path not found (esp8266web\include).
 

vad7

Active member
с __wrap не получилось.
функция подменяется, только на ее вызове все и останавливается.
причем даже, если вызывать по имени __wrap_* из startup, например.
плохо, что отладчика нету...
 

pvvx

Активный участник сообщества
В web-свалку встроен Websocket.
Проекты слиты в единые исходники (теперь это истинная "свалка" :) ):
Отличия проекта Modbus TCP RTU RS-485 от Web/TCP2UART всего в файле include\user_config.h, файлах web-диска (папка WEBFiles) и WebVars.xlsx.
---
Web-свалка переехала на SDK 1.5.2.
 
Последнее редактирование:

AlexMelven

New member
Web-свалка переехала на SDK 1.5.2.
А есть способ, чтобы Web-свалку можно было у себя обновлять бескровно? А то чего-нибудь поразбирался в предыдущей версии, что-то прикрутил, а тут новая версия. Я пока придумал переименовывать предыдущую версию и устанавливать новую в новый каталог. Но это значит переносить все из предыдущей в новую..Чую есть какой-то менее геморройный способ :)
 

pvvx

Активный участник сообщества
А есть способ, чтобы Web-свалку можно было у себя обновлять бескровно? А то чего-нибудь поразбирался в предыдущей версии, что-то прикрутил, а тут новая версия. Я пока придумал переименовывать предыдущую версию и устанавливать новую в новый каталог. Но это значит переносить все из предыдущей в новую..Чую есть какой-то менее геморройный способ :)
Китайцы всё время меняют SDK, от этого постоянное вылавливание их новых глюков и изменений. OpenSDK никто не пишет, от этого и куча версий, да часть с не поправленными багами. Вот только счас заметил, что в SDK 1.5.2 сменился https://github.com/pvvx/esp8266web/blob/master/include/user_interface.h#L71
https://github.com/pvvx/esp8266web/blob/master/info/libs/main/user_interface.c#L102
https://github.com/pvvx/esp8266web/blob/master/info/libs/main/user_interface.c#L116
И процедуры по параметрам расходятся...
 

vad7

Active member
Чтобы писать SDK и исправлять баги нужно или очень много свободного времени, либо мотивацию, если это для работы нужно. Тем более если eclipse первый раз видишь.
Также нужна некая координация действий, а также подготовленная среда разработки/отладки/дизассемблирования. Много времени уходит, только на то, чтобы все это настроить.
У меня вот на одном компе UDK поставился, а на другом нет.
Вот, например, на двух разных компах модуль serial к питону только через pip install почему-то ставиться. И т.д.
То есть постоянно какие-то грабли и для их решения тратится время, которого и так особо нет.
 

pvvx

Активный участник сообщества
Чтобы писать SDK и исправлять баги нужно или очень много свободного времени, либо мотивацию, если это для работы нужно. Тем более если eclipse первый раз видишь.
Также нужна некая координация действий, а также подготовленная среда разработки/отладки/дизассемблирования. Много времени уходит, только на то, чтобы все это настроить.
У меня вот на одном компе UDK поставился, а на другом нет.
Вот, например, на двух разных компах модуль serial к питону только через pip install почему-то ставиться. И т.д.
То есть постоянно какие-то грабли и для их решения тратится время, которого и так особо нет.
Это всё дело наживное. Мне уже почти безразлично на чем писать и отлаживать, главное знать, что требуется и ползти туда по чуть-чуть :) Я не настроен один писать SDK и ещё приложения для всех. Что есть, то и вложено и безусловно содержит много ошибок. В принципе цель не создать какой-то пакет, а пробить и показать, что возможно почти всё. Пусть профы пишут...
На SDK 1.4.1 всё работало стабильно, теперь это-же надо повторить и на SDK 1.5.2 (промежуточные слишком глючные). Вот так и выходит, то стабильное, то промежуток полной глюкомании, пока всё там не притрется, и опять китайцы выпустят новую версию... :)
 

AlexMelven

New member
А есть способ, чтобы Web-свалку можно было у себя обновлять бескровно?
Нашел сам :) Выделяешь в Navigator старую и новую версии, правая кнопка мыши -> Compare with->Each other. После чего можно просмотреть каждое изменение и перенести их нажатием на иконку. Ну да вы сами об этом конечно же знаете :)
 
  • Like
Реакции: vad7

vad7

Active member
А потом в поиск "GDBSTUB"...
Да нету ничего вменяемого в поиске. В одном месте вообще написано, что в UDK нет xtensa-lx106-elf-gdb.
Потом 7 декабря - "посмотрю завтра", и завтра так и не наступило....
Если тупо нажать "debug" в eclipse - в консоли "Function "main" not defined." и окно с ошибкой:
Error creating process D:/Electric/ESP8266/PowerMeter/PowerMeter/app/.output/eagle/image/eagle.app.v6.out, (error 193).
 

Alex

Member
Да нету ничего вменяемого в поиске. В одном месте вообще написано, что в UDK нет xtensa-lx106-elf-gdb.
Потом 7 декабря - "посмотрю завтра", и завтра так и не наступило....
Если тупо нажать "debug" в eclipse - в консоли "Function "main" not defined." и окно с ошибкой:
Error creating process D:/Electric/ESP8266/PowerMeter/PowerMeter/app/.output/eagle/image/eagle.app.v6.out, (error 193).
http://visualgdb.com/tutorials/esp8266/gdbstub/
https://blog.cesanta.com/esp8266-gdb
http://hackaday.com/2015/12/12/squash-your-esp-8266-bugs-with-esp-gdbstub/
 

vad7

Active member
Alex, Да эти ссылки я видел, - в первой для Visual Studio, во второй описывается как подключить GDB к проекту (в проекте у нас уже это есть), а как в eclipse настроить нет и ссылка на тот же github, в третей вообще видео "смотрите как я могу".
 

pvvx

Активный участник сообщества
А надо? В 1.5.2 что-то существенно добавилось/улучшилось?
Не добавилось, а изменилось с одних глюков на другие. В 1.4.2 есть очень плохой глюк с подключениями STATION и его не обойти. В 1.5.2 его нет, но есть другие :)
Это всё и останавливает от полного реверса, т.к. нет стабильного варианта по WiFi от китайцев, на котором можно-бы было построить базовую версию. А из-за "недокументированости" WiFi регистров исправить код будет невозможно, т.е. реверс будет неполным, но переносимым. Переносить и реверсить китай-глюки нет никакого желания.
 
Последнее редактирование:

AlexMelven

New member
pvvx, я сейчас пытаюсь подключить bootloader от Richard Burton. Был бы признателен, если бы подсказали, какие отличия от его способа загрузки прошивки и вашего есть. Я переименовал его бутлоадер rboot.bin в rapid_loader.bin - теперь при сборке создается 0x00000.bin в котором с нуля сидит его бутлоадер. В бутлоадере Бартона сохраняются с адреса 0x1000 некие дефолтные настройки, по какому адресу первая прошивка (указал 0x7000), по какому вторая (указал 0x87000). Webfiles.bin поместил по адресу 0x100000. Собрал 0x07000.bin при помощи его esptools2.exe - первые 16 байт теперь сигнатура, которую ищет бутлоадер при старте, когда ищет правильную секцию для загрузки. Что еще мне нужно поправить, чтобы прошивка по адресу 0x7010 стартанула? Видимо то что он шьет что-то в 0x1000 - там сейчас какие-то процедуры, попадающие в iram? Ваш бутлоадер 192 байта длиной, его 2304 байта - это что-нибудь портит, когда создается 0x00000.bin?
PS. понимаю что его бутлоадер не дает возможности быстро стартовать для быстрого опроса датчиков и все такое, но мне позарез нужно обновление по сети. А так как я изначально выбрал в качестве базы для своего поделия ваш проект, хотелось бы научить обновляться именно его. Либо подскажите, если это можно сделать своими силами. Давайте посотрудничаем! :)
 

pvvx

Активный участник сообщества
pvvx, я сейчас пытаюсь подключить bootloader от Richard Burton. Был бы признателен, если бы подсказали, какие отличия от его способа загрузки прошивки и вашего есть.
У него обычная надстройка над загрузчиком от ROM-BIOS созданная для увеличения кода в Flash и увеличения времени старта SDK.
У меня стоит RapidLoader - он ускоряет загрузку кода в десятки раз от стандартной загрузки ROM-BIOS. Можно и без него - далее идут обычные коды, которые ROM-BIOS может и сама загрузить, но медленно.
Китайцы вообще сделали несколько загрузчиков, которые грузят друг друга... Ну как матрешка. Можно их всех выкинуть и оставить последний код уже SDK - это сама ROM-BIOS загрузит без проблем.
В моем meSDK весь код инициализации библиотек SDK есть и можно перед этим вписать что угодно - хоть запуск спутника на луну. Так что смысла в этих загрузчиках нет.
 

AlexMelven

New member
увеличение времени старта - это вы про задержку, которая там якобы была в пару секунд? Он вроде писал в блоге, что ставил ее в момент отладки, чтобы смотреть логи. Сейчас задержек нету. Если про другое увеличение времени - мне датчики опрашивать не нужно, поэтому время первого старта не критично совсем. Но тем не менее, я дошел до того места, когда его бутлоадер находит сигнатуру по адресу 0x7000, пишет что стартую с rom 0, после чего сыплются исключения Fatal exception (28): epc1=0x40207440, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000024, depc=0x00000000. Чую что я где-то близко. Хотя может и заблуждаюсь :)
 

pvvx

Активный участник сообщества
увеличение времени старта - это вы про задержку, которая там якобы была в пару секунд? Он вроде писал в блоге, что ставил ее в момент отладки, чтобы смотреть логи. Сейчас задержек нету.
Нет. Не про неё. Его код грузится пол секунды и далее грузит ещё код лоадера SDK тоже очень долго (всё это время потребление модулем бывает зашкаливает за 200 mA - зависит от состояния блока WiFi, как его "сорвало" при перезагрузке).
"Тормоз" связан с тем, что ROM-BIOS не инициализирует QSPI, а грузит на низкой частоте по SPI из Flash по кусочкам (до 32-х байт) и выводит длинные сообщения на UART на скорости 78440 на каждый загружаемый блок по разметке лоадера с ожиданием вывода всех символов. Между выводами сообщений в UART ничего не делается.
Отличия RapidLoader в том, что он имеет размер в 108 байта и для его загрузки ROM-BIOS выводит всего десяток символов, т.к. он имеет всего один сегмент.
Код:
ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x40100000, len 108, room 16 
tail 12
chksum 0x84
csum 0x84
Далее включается QSPI на 80MHz и все остальные, стандартные блоки загрузки грузятся за пару миллисекунд, без вывода лишнего мусора в UART-ы. :p Загрузчик использует аппаратное "кеширование" flash ESP-8266 и для дальнейшей загрузки.
https://raw.githubusercontent.com/pvvx/Rapid_Loader/master/ESP-01-StartSignals.gif
Т.е. как итог bootloader от Richard Burton сделан для увеличения потребления автономных реализаций c deep-sleep и другими вариантами.
RapidLoader отключает и WiFi на время загрузки - ток потребления падает до десяка mA, как его запустит ROM-BIOS и время при этом минимально возможное для ESP-8266.
При старте модуля китайцы не доделали массу вещей - пока не стартанет инициализация WiFi в SDK, модуль часто глушит всю сеть WiFi. Это тоже спасет RapidLoader. Он вырубает это безобразие сразу, как его запустит ROM-BIOS. Он делает и отключение вывода CLK на GPIO0 (туда выводится 26MHz всё время до инициализации SDK при использовании bootloader от Richard Burton), это не отображено на картинке, т.к. сделано уже в новой версии. Так-же инициализирует стек в ноль при старте следующего кода и поддерживает загрузку в 48 килобайт IRAM, что не может bootloader от Richard Burton.
Так-же meSDK имеет открытую инициализацию библиотек и можно вставить любой код - например опрос датчика и дальнейшее засыпание, без включения жрущей части WiFi и прочей фигни, на что уходит питание.
Не путайте всю эту разницу со стандартным загрузчиком от Richard Burton, который замещает китайские для запуска разных кусков и создает несовместимость с китай-SDK обновлением.
----
После выполнения короткого загружаемого стартового кода в RapidLoader - https://github.com/pvvx/Rapid_Loader/blob/master/app/loader/loader.c#L30 уже доступен запуск процедур непосредственно из Flash.
В данном случае запускается загрузчик уже в Flash, который грузит указанные ему сегменты в обычной разметке лоадеров для ROM-BIOS. Можно туда сделать вставку и грузить из любой области выбранный для старта стандартный загрузчик.
 
Последнее редактирование:
Сверху Снизу