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

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

ciuafm

New member
gpio_out=28672 === gpio_out=0x7000 -> 12,13,14 биты

PS: В первом сообщении темы описано про обучение HTML/Javascript и азов программирования... На это есть темы Раздел для начинающих :)
Сорри, увлекся. Вопрос по теме:
Заметил интерестную переменную:
Код:
gpio_sgn=duty 
Задать новый параметр duty для sigma-delta 312кГц
duty – параметр duty от 0 до 255.
Это не работает?
 

pvvx

Активный участник сообщества
Сорри, увлекся. Вопрос по теме:
Заметил интерестную переменную:
Код:
gpio_sgn=duty
Задать новый параметр duty для sigma-delta 312кГц
duty – параметр duty от 0 до 255.
Это не работает?
Да. Работает на все выводы, но сигнал управления модуляцией в чипе один. Есть описанные ранее проблемы. Мешает приему WiFi из-за внутреннего дизайна чипа (надо ставить токо-ограничивающие резисторы ближе к выводам, чтобы с проводников не шли гармоники от резких фронтов I/O выводов чипа) и сигнал бьет в область НЧ при определенных коэффициентах... Какие-то баги в чипе, по тому не задействуют. Т.е. для вывода звука не годится. Для светодиодов - ok.
Изменение яркости свечения синего светодиода на модуле ESP-12x:
DeltaSigmaLed.gif
 
Последнее редактирование:

DorianGray

New member
Огромное спасибо за ответы!!!!!
Я вроде как нашел , нашел в чем собака зарыта - файл линковщика для оверлея и его три параметра
Код:
dram0_0_seg :        org = 0x3FFFDF60, len = 0x00400  
iram1_0_seg :        org = 0x40106600, len = 0x01A00
irom0_0_seg :        org = 0x40210000, len = 0xF0000
Секция кода для основной прошивки лежит в области
irom0_text| Cached Code (SPI)| 40207000| 40241933| 239923

Секция кода для оверлея лежит в области, но она размером 0 байт по этому нам всеравно - так как у нас оверлей лежит в IRAM
irom0_text| Cached Code (SPI)| 40210000| 40210000| 0

Секция IRAM для основной прошивки
text| Uncached Code (IRAM)| 40100000| 40105BBC| 23484
и для оверлея
text| Uncached Code (IRAM)| 40106600| 40106BBC| 1468
не пересекаются, все ок.

Секция неинициализированных данны для основной прошивки
lit4| Uninitialized Data (IRAM)| 40105BBC| 401067CC| 3088
и для оверлея
lit4| Uninitialized Data (IRAM)| 40106BBC| 40106BBC| 0
и тут мы видим что секция lit4 для основного кода пересекает секцию text для оверлея. Я так понимаю так не должно быть.

Секции для оперативки не пересекаются.

Данный вывод я сделал из того, что запустить оверлей tcp_client.ovl я смог только в исходном проекте из репозитория, при его конфигурации в преобразователь TCP2UART:
Test 1 Main code
------------------------------------------------------------------------------
Section| Description| Start (hex)| End (hex)|Used space
------------------------------------------------------------------------------
data| Initialized Data (RAM)| 3FFE8000| 3FFE838C| 908
rodata| ReadOnly Data (RAM)| 3FFE838C| 3FFE8BB0| 2084
bss| Uninitialized Data (RAM)| 3FFE8BB0| 3FFEEC28| 24696
lit4| Uninitialized Data (IRAM)| 40105814| 4010645C| 3144
text| Uncached Code (IRAM)| 40100000| 40105814| 22548
irom0_text| Cached Code (SPI)| 40207000| 40240627| 235047
------------------------------------------------------------------------------
tcp_client.ovl

Section| Description| Start (hex)| End (hex)|Used space
------------------------------------------------------------------------------
data| Initialized Data (RAM)| 3FFFDF60| 3FFFDFD1| 113
rodata| ReadOnly Data (RAM)| 3FFFDFD4| 3FFFE014| 64
bss| Uninitialized Data (RAM)| 3FFFE018| 3FFFE020| 8
lit4| Uninitialized Data (IRAM)| 40106BBC| 40106BBC| 0
text| Uncached Code (IRAM)| 40106600| 40106BBC| 1468
irom0_text| Cached Code (SPI)| 40210000| 40210000| 0
------------------------------------------------------------------------------
А при настройке исходного проекта из репозитория в режим ModbusTCP2RS485 происходило повисание ESP8266 - а перед повисанием вылезло немного крякозябль. Повисание проиходило во время вызова оверлея командой 10.10.10.10/?ovl=tcp_client.ovl. Подразумеваю что оверлей загружался, но перетерал немного основной прошивки.
 

pvvx

Активный участник сообщества
Секция неинициализированных данны для основной прошивки
lit4| Uninitialized Data (IRAM)| 40105BBC| 401067CC| 3088
и для оверлея
lit4| Uninitialized Data (IRAM)| 40106BBC| 40106BBC| 0
и тут мы видим что секция lit4 для основного кода пересекает секцию text для оверлея. Я так понимаю так не должно быть.
И где пересечение? Конец первой 401067CC, начало второй 40106BBC. Между ними "дырка" в 1008 байт.
А при настройке исходного проекта из репозитория в режим ModbusTCP2RS485 происходило повисание ESP8266 - а перед повисанием вылезло немного крякозябль. Повисание проиходило во время вызова оверлея командой 10.10.10.10/?ovl=tcp_client.ovl. Подразумеваю что оверлей загружался, но перетерал немного основной прошивки.
Уже много раз сказал - прошивка не состыкована с оверлеем. После создания основной прошивки создается map файл с описанием всех адресов переменных и процедур в прошивке. Оверлей использует этот map файл для линковки обращения к основным процедурам. Если вы меняли основную прошивку, то старый оверлей уже не подходит - у него другой map... .
 
Последнее редактирование:

pvvx

Активный участник сообщества
lit4| Uninitialized Data (IRAM)| 40105BBC| 401067CC| 3088
text| Uncached Code (IRAM)| 40106600| 40106BBC| 1468
Ну это вы наворотили кода в IRAM - меняйте адрес загрузки оверлея. Уже и места мало - включайте опцию 48 кило IRAM.
Оверлеи, в основном, сделаны для быстрой отладки всяких мелких приложений и загрузки кода из вне на отлаженную версию основной прошивки. Если весь ваш код влезает в основную часть - оверлеи не нужны.
 
Последнее редактирование:

DorianGray

New member
Дело в том что я получил результат такой линковки, когда скачал проект из репозитория и не добавлял к нему своего кода. Компилировал проект ModbusTCP, а для проекта TCP2UART все нормально.
 

pvvx

Активный участник сообщества
Дело в том что я получил результат такой линковки, когда скачал проект из репозитория и не добавлял к нему своего кода. Компилировал проект ModbusTCP, а для проекта TCP2UART все нормально.
Проекты то разные. Адреса процедур тоже разные... Вставлять линковочные таблицы ресурсы ESP8266 не позволяют.
И в данном методе, через map файл основной прошивки, есть доступ ко всем переменным и процедурам для оверлея.
 

DorianGray

New member
Проекты то разные. Адреса процедур тоже разные... Вставлять линковочные таблицы ресурсы ESP8266 не позволяют.
Да, они разные, я просто написал про вот эту ситуацию, просто немог понять почему в проекте TCP2UART оверлей работает, а в Mddbus2RS485 нет. Я так понимаю нужно передвинуть секцию оверлея при компиляции MODBUSTCP2RS485, в данный момент у меня такой результат линковки:
------------------------------------------------------------------------------
Section| Description| Start (hex)| End (hex)|Used space
------------------------------------------------------------------------------
data| Initialized Data (RAM)| 3FFE8000| 3FFE838C| 908
rodata| ReadOnly Data (RAM)| 3FFE838C| 3FFE8E04| 2680
bss| Uninitialized Data (RAM)| 3FFE8E08| 3FFEF8F0| 27368
lit4| Uninitialized Data (IRAM)| 40105BBC| 401067CC| 3088
text| Uncached Code (IRAM)| 40100000| 40105BBC| 23484
irom0_text| Cached Code (SPI)| 40207000| 40240EEB| 237291
------------------------------------------------------------------------------
Entry Point : 4010013C call_user_start()
Total Used RAM : 57528
Free IRam : 6196 or 22580 (option 48k IRAM)
Free Heap : 50964
Total Free RAM : 73544
------------------------------------------------------------------------------
/Source/esp8266web_v0/ovls/tcp_client/main'
Section| Description| Start (hex)| End (hex)|Used space
------------------------------------------------------------------------------
data| Initialized Data (RAM)| 3FFFDF60| 3FFFDFD1| 113
rodata| ReadOnly Data (RAM)| 3FFFDFD4| 3FFFE014| 64
bss| Uninitialized Data (RAM)| 3FFFE018| 3FFFE020| 8
lit4| Uninitialized Data (IRAM)| 40106BBC| 40106BBC| 0
text| Uncached Code (IRAM)| 40106600| 40106BBC| 1468
irom0_text| Cached Code (SPI)| 40210000| 40210000| 0
------------------------------------------------------------------------------
накладываются секции друг на друга.
Исправив iram1_0_seg : org = 0x40106600, len = 0x01A00
на iram1_0_seg : org = 0x40106800, len = 0x01800
все должно заработать, или я еще что-то упускаю ?
 
Последнее редактирование:

pvvx

Активный участник сообщества
все должно заработать, или я еще что-то упускаю ?
Ещё надо изменить [inline]#define USE_OVERLAY _макс_размер_[/inline] в user_config.h. Но это не обязательно, т.к. пока не используется.
+ Можно поставить [inline]#define USE_MAX_IRAM 48[/inline] в sdk_config.h и изменить [inline]iram1_0_seg : org = 0x40108000, len = 0x04000[/inline] в overlay.ld для загрузки жирных оверлеев :)
 
Последнее редактирование:

DorianGray

New member
Спасибо большое!!! У меня вопрос, я не могу понять никак - секция 0х00000 это:
"0x00000 - bin/0x00000.bin - Program codes IRAM/RAM".

Но вот я делаю в коде константу "===INFO==="
Код:
void ICACHE_FLASH_ATTR debugSend(uint8_t mode, char* file, uint16_t line, char* string) {
const char mode_str [11] = "===INFO===";
os_printf("[%s] [%s] [%s] [%d] %s \r\n", mode_str, "000000", file, line, string);
}
И соответственно она почему-то (как и константа "000000") попадает в файл 0x00000.bin , а не в файл 0x07000.bin - в котором находиться весь код.

Хотя если написать os_printf("text"); - то константа text попадает в файл 0x07000.
 

pvvx

Активный участник сообщества
И соответственно она почему-то (как и константа "000000") попадает в файл 0x00000.bin , а не в файл 0x07000.bin - в котором находиться весь код.
Хотя если написать os_printf("text"); - то константа text попадает в файл 0x07000.
Смотрите файл *.ld - rodata. Вопрос никак не относится к web-серверу, а к GCC линковщику и распределению сегментов в СИ :)
Найдете макрос os_printf правой кнопкой мыши... или F3..
 

rybeg

New member
Подскажите, как можно отследить причину перезагрузки модуля, происходит спонтанно. Логировать через UART нет возможности, можно при загрузке параметры boot поместить куда нибудь?
 

pvvx

Активный участник сообщества
Подскажите, как можно отследить причину перезагрузки модуля, происходит спонтанно. Логировать через UART нет возможности, можно при загрузке параметры boot поместить куда нибудь?
Вы исправляли это
Посмотреть вложение 2753?
В последней версии на git там по данному поводу есть поправки и перезагрузки возникают реже...
 

rybeg

New member
Вы исправляли это
Посмотреть вложение 2753?
В последней версии на git там по данному поводу есть поправки и перезагрузки возникают реже...
Подскажите, где в переменных это подкорректировать, просто у меня уже собрана прошивка с датчиками и передачей на разные сервисы.
А если отключить AP поможет ???
Спасибо.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Подскажите, где в переменных это подкорректировать, просто у меня уже собрана прошивка с датчиками и передачей на разные сервисы.
А если отключить AP поможет ???
Спасибо.
Это влияет больше на station.
Можно и внешней командой http://имя_или_IP/web.cgi?sys_const_112=0
 

vad7

Active member
@pvvx, кстати с [112]=0 пропали "had been aged-out and disassociated." на Zyxel Keenetik II.
аптайм сутки, наблюдаю дальше...
 

vad7

Active member
А у меня на микротике норм: WebFig v6.35.4, WiFi - Atheros AR9300.
Проблема только с Linksys и Zyxel.
 

pvvx

Активный участник сообщества
@pvvx, кстати с [112]=0 пропали "had been aged-out and disassociated." на Zyxel Keenetik II.
аптайм сутки, наблюдаю дальше...
Там 100% китай-бяка во всех SDK, начиная наверно с 1.4... Даже любой частый внешний becaon приводит к сносу частоты передатчика у station + частым зависаниям, иногда и дальнейшей перезагрузке по "протектед". Но даже отключив эту авто-китай-коррекцию частоты, чип всё равно ведет себя ужасно - похоже ему всё равно когда лепить свои пакеты и он не хочет слушать AP - как итог - коллизии в сети, рвет сообщения другим и сам передать не может.
Починить всё это без исходников либ не реально, а новых обновлений SDK нет и наверно не будет - все заняты глюкадромом на ESP-32S. Пора списывать ESP8266 на покой...
 
Последнее редактирование:
Сверху Снизу