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

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

AlexMelven

New member
В моем meSDK весь код инициализации библиотек SDK есть и можно перед этим вписать что угодно - хоть запуск спутника на луну. Так что смысла в этих загрузчиках нет.
хорошо, как сделать, чтобы стартовала нужная прошивка (0x7000 либо 0x87000), используя ваш Rapid loader?
Хотя только сейчас нашел ссылку на исходники RapidLoader, попытаюсь разобраться в данном вопросе пока сам :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
хорошо, как сделать, чтобы стартовала нужная прошивка (0x7000 либо 0x87000), используя ваш Rapid loader?
Написать опрос байта в flash, который указывает на загрузчик для "прошивка (0x7000 либо 0x87000)". Но дописывать это не в загружаемое тело, а уже в код находящийся в Flash. Иначе это увеличит размер и время тормозной загрузки ROM-BIOS. Т.е. вставку делать где-то здесь https://github.com/pvvx/Rapid_Loader/blob/master/app/loader/loder_flash_boot.s, перед данным кодом.
И я дописал прошлое сообщение, для большего понимания как работает RapidLoader.
 
Последнее редактирование:

pvvx

Активный участник сообщества
пока не вижу откуда Rapid Loader берет адрес 0x07000..
А он и сделан по другому. Не для Ардуринщиков и жалеет размер flash.
Он прилепляется к проекту простым копированием к первому блоку стандартного загрузчика и грузит код, находящийся за собой, чтобы не тратить целый сектор на 4096 байт.
[HASHTAG]#define[/HASHTAG] next_flash_header_addr 0x402000c0 - это указатель от куда грузить и передается процедуре https://github.com/pvvx/Rapid_Loader/blob/master/app/loader/loder_flash_boot.s#L8 в регистре a2.
0x402000c0 - это выходит адрес в flash стандартного загрузчика, после копирования в начало к нему RapidLoader-а.
Вы предлагаете написать вам загрузчик под ваши условия?
Китайский вариант с выбором загрузчика мне не нравиться - он имеет недостаток: стирает/пишет сектора и если на ходу выключить питание, то модуль становиться мертвым. Кроме того, он в некоторых случаях переписывает байты в заголовке последних секторов с WiFi конфигурацией, но контрольную сумму не исправляет. Это приводит к потере прошлой WiFi конфигурации и прочего для SDK.
Так-же мне не нравиться подход содержания дублей SDK библиотек в и так малой "кешируемой" области flash в 1 мегабайт. Это обходиться, но пока не сделано... Больше склоняюсь к созданию системы подгрузки оверлев в IRAM с едиными SDK либами во Flash...
 
Последнее редактирование:

AlexMelven

New member
спасибо за детальное описание. Правда я в конец запутался кто и кого грузит и откуда берутся какие адреса :( Файл 0.bin - сам по себе содержит уже загрузчик? Я переименовал его в 0x00000.bin и прошил - прошивка работает нормально.
 

AlexMelven

New member
"call_user_start" вызывает код на ассемблере по адресу "loader_flash_boot_addr" с адресом заголовка "next_flash_header_addr", тот разбирает заголовок, берет адрес для старта и делает переход "jx a7". Но судя по содержимому заголовка, там адрес 0х40100000. Так откуда берется адрес 0х07000? И только ли в файле 0x07000.bin находится часть кода, которую предположительно нужно будет переключать или она также есть еще и в готовом 0x00000.bin?
 

pvvx

Активный участник сообщества
"call_user_start" вызывает код на ассемблере по адресу "loader_flash_boot_addr" с адресом заголовка "next_flash_header_addr", тот разбирает заголовок, берет адрес для старта и делает переход "jx a7". Но судя по содержимому заголовка, там адрес 0х40100000. Так откуда берется адрес 0х07000? И только ли в файле 0x07000.bin находится часть кода, которую предположительно нужно будет переключать или она также есть еще и в готовом 0x00000.bin?
Коды запуска отдельного SDK находятся в их загрузчиках. Обычно это файл 0x00000.bin от проекта. Его пишут куда угодно во flash. И от другого проекта аналогично. Но у каждого проекта свои блоки с кодами во flash и разные eagle.app.v6.ld (
irom0_0_seg : org = 0x402xxxxx, len = 0xxxxxx )

Первый лоадер выбирает какой из них грузить далее.
 

AlexMelven

New member
Но у каждого проекта свои блоки с кодами во flash и разные eagle.app.v6.ld
с этим более-менее разобрался. Но у вас итак два файла - 0x00000.bin и 0x07000.bin - и это не два разных проекта для загрузки, а один. Или же мне нужно сделать сначала так, чтобы был один файл, как у китайцев?
 

pvvx

Активный участник сообщества
с этим более-менее разобрался. Но у вас итак два файла - 0x00000.bin и 0x07000.bin - и это не два разных проекта для загрузки, а один.
Ну и пишутся всегда два. Только первый файл - куда угодно во flash и его выбирает стартовый загрузчик.
Мы уже тут исписали больше, чем написать полный код спец. загрузчика. :) Многа букав.
 

AlexMelven

New member
ну если бы это помогло мне написать спецзагрузчик, я бы не плодил текст :) Пока туплю не по детски. Как же в случае с тем же пресловутым rboot? Там ведь один файл для одного проекта? Или он объединил в одном файле два, поэтому? Я его esptool2 создаю такой файл, но он не стартует, выдает исключения..
 

pvvx

Активный участник сообщества
Я не изучаю поделки rboot, т.к. они бесполезные и ничего хорошего не несут.
Я описываю как надо сделать правильно.
C rboot разбирался СHETS - но не знаю, вышло у него или нет. Попробуйте спросить у него про этот rboot...
 

AlexMelven

New member
так отдельно он работает и у меня. Я же пытаюсь его прикрутить к web_base. Ну или в идеале сделать чтобы был свой мультизагрузчик, правильный :) Пока ничего не понятно.
 

vad7

Active member
pvvx, А как вы отлаживаете, если CHERTS говорит, что в UDK отладчик еще не прикручен?
 

vad7

Active member
Ясно, будем ждать пока кто-нибудь не сподобиться поделиться знаниями....

У вас в новой версии, если по-отключать в user_config все кроме веб сервера - при компиляции ругается на "tcp_client_url" и т.д.
 

pvvx

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

У вас в новой версии, если по-отключать в user_config все кроме веб сервера - при компиляции ругается на "tcp_client_url" и т.д.
Ну поправьте или укажите что. Я все варианты проверить не имею возможности по времени...
----
Исправил. И слил вместе оба проекта TCP2UART и MODBUS RS-485 в единую свалку.
Выбор проекта в user_config.h
[HASHTAG]#define[/HASHTAG] PROGECT_NUMBER 0
// 0 -> проект "TCP2UART"
// 1 -> проект MODBUS-"RS485"
Файлы для web-диска для проектов находятся в разных папках.
Желательно переместить используемые для проекта в папку WEBFiles.
Но возможно использование и make_webfs_rs485.bat или make_webfs_tcp2uart.bat.
 
Последнее редактирование:

AlexMelven

New member
у меня заработал rboot с малым вебсервером :) pvvx конечно будет ругаться и все такое.. Ну не шмогла я, не шмогла сделать правильно. Мозгов пока не достаточно. Единственно что добавил - это из Rapid Loader всякие отключалки wifi, вывода частоты на пин. Надеюсь он стал немного лучше :) Ну и обновляется по wifi (код+вебфайлы).
 
Последнее редактирование:
Сверху Снизу