Да. Работает на все выводы, но сигнал управления модуляцией в чипе один. Есть описанные ранее проблемы. Мешает приему WiFi из-за внутреннего дизайна чипа (надо ставить токо-ограничивающие резисторы ближе к выводам, чтобы с проводников не шли гармоники от резких фронтов I/O выводов чипа) и сигнал бьет в область НЧ при определенных коэффициентах... Какие-то баги в чипе, по тому не задействуют. Т.е. для вывода звука не годится. Для светодиодов - ok.
Изменение яркости свечения синего светодиода на модуле ESP-12x:
Огромное спасибо за ответы!!!!!
Я вроде как нашел , нашел в чем собака зарыта - файл линковщика для оверлея и его три параметра
Код:
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. Подразумеваю что оверлей загружался, но перетерал немного основной прошивки.
Секция неинициализированных данны для основной прошивки
lit4| Uninitialized Data (IRAM)| 40105BBC| 401067CC| 3088
и для оверлея
lit4| Uninitialized Data (IRAM)| 40106BBC| 40106BBC| 0
и тут мы видим что секция lit4 для основного кода пересекает секцию text для оверлея. Я так понимаю так не должно быть.
А при настройке исходного проекта из репозитория в режим ModbusTCP2RS485 происходило повисание ESP8266 - а перед повисанием вылезло немного крякозябль. Повисание проиходило во время вызова оверлея командой 10.10.10.10/?ovl=tcp_client.ovl. Подразумеваю что оверлей загружался, но перетерал немного основной прошивки.
Уже много раз сказал - прошивка не состыкована с оверлеем. После создания основной прошивки создается map файл с описанием всех адресов переменных и процедур в прошивке. Оверлей использует этот map файл для линковки обращения к основным процедурам. Если вы меняли основную прошивку, то старый оверлей уже не подходит - у него другой map... .
Ну это вы наворотили кода в IRAM - меняйте адрес загрузки оверлея. Уже и места мало - включайте опцию 48 кило IRAM.
Оверлеи, в основном, сделаны для быстрой отладки всяких мелких приложений и загрузки кода из вне на отлаженную версию основной прошивки. Если весь ваш код влезает в основную часть - оверлеи не нужны.
Дело в том что я получил результат такой линковки, когда скачал проект из репозитория и не добавлял к нему своего кода. Компилировал проект ModbusTCP, а для проекта TCP2UART все нормально.
Дело в том что я получил результат такой линковки, когда скачал проект из репозитория и не добавлял к нему своего кода. Компилировал проект ModbusTCP, а для проекта TCP2UART все нормально.
Проекты то разные. Адреса процедур тоже разные... Вставлять линковочные таблицы ресурсы ESP8266 не позволяют.
И в данном методе, через map файл основной прошивки, есть доступ ко всем переменным и процедурам для оверлея.
Да, они разные, я просто написал про вот эту ситуацию, просто немог понять почему в проекте 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
все должно заработать, или я еще что-то упускаю ?
Ещё надо изменить [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 для загрузки жирных оверлеев
И соответственно она почему-то (как и константа "000000") попадает в файл 0x00000.bin , а не в файл 0x07000.bin - в котором находиться весь код.
Хотя если написать os_printf("text"); - то константа text попадает в файл 0x07000.
Смотрите файл *.ld - rodata. Вопрос никак не относится к web-серверу, а к GCC линковщику и распределению сегментов в СИ
Найдете макрос os_printf правой кнопкой мыши... или F3..
Подскажите, как можно отследить причину перезагрузки модуля, происходит спонтанно. Логировать через UART нет возможности, можно при загрузке параметры boot поместить куда нибудь?
Подскажите, как можно отследить причину перезагрузки модуля, происходит спонтанно. Логировать через UART нет возможности, можно при загрузке параметры boot поместить куда нибудь?
Подскажите, где в переменных это подкорректировать, просто у меня уже собрана прошивка с датчиками и передачей на разные сервисы.
А если отключить AP поможет ???
Спасибо.
Подскажите, где в переменных это подкорректировать, просто у меня уже собрана прошивка с датчиками и передачей на разные сервисы.
А если отключить AP поможет ???
Спасибо.
Там 100% китай-бяка во всех SDK, начиная наверно с 1.4... Даже любой частый внешний becaon приводит к сносу частоты передатчика у station + частым зависаниям, иногда и дальнейшей перезагрузке по "протектед". Но даже отключив эту авто-китай-коррекцию частоты, чип всё равно ведет себя ужасно - похоже ему всё равно когда лепить свои пакеты и он не хочет слушать AP - как итог - коллизии в сети, рвет сообщения другим и сам передать не может.
Починить всё это без исходников либ не реально, а новых обновлений SDK нет и наверно не будет - все заняты глюкадромом на ESP-32S. Пора списывать ESP8266 на покой...