Esp8266 at команды на русском

pvvx

Активный участник сообщества
Пояснение по поводу ошибки 'malloc assert!' в имеющихся прошивках, связанной с заполнением Heap при множественных соединениях:
Это проблема последнего [ACK] в HTTP протоколе, зависящая от того, кто инициировал закрытие [FIN], известная как TIME_WAIT на 60 сек и занятого порта. Подробное описание тут http://www.serverframework.com/asynchronousevents/2011/01/time-wait-and-its-design-implications-for-protocols-and-scalable-servers.html.
Но у нас, ошибка связана с тем, что во включенный в прошивку вариант стека lwip не встроено ограничение по захвату памяти. Это не дописано и приводит к трагическому концу 'malloc assert!' и перезагрузке модуля. Т.е. проблема не в Lwip, а у тех кто его конфигурировал. В памяти, на 60 сек, после после инициации закрытия соединения на каждый espconn_disconnect(...) остается структура размером около 200+ байт...
В итоге пользоваться espconn_disconnect(...) не стоит. Пусть соединение закрывает клиентская сторона :) Перед открытием нового соединения проверяйте system_get_free_heap_size()...
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
Вообще можно попробовать собрать не lwip стек, а uIP - это тоже TCP стек для контроллеров от разработчика lwpi, но отличается от него минимизацией используемой памяти и в нем не используется динамическое выделение памяти. Жаль, что Espressif не утруждается выкладыванием исходников актуальных версий библиотек, сообщество бы быстрее исправляло в них баги.
 

pvvx

Активный участник сообщества
Вообще можно попробовать собрать не lwip стек, а uIP - это тоже TCP стек для контроллеров от разработчика lwpi, но отличается от него минимизацией используемой памяти и в нем не используется динамическое выделение памяти. Жаль, что Espressif не утруждается выкладыванием исходников актуальных версий библиотек, сообщество бы быстрее исправляло в них баги.
Lwip работает нормально. Ошибки в надстройке от Espressif, в espconn. Основная - в закрытии соединения - потере события disconnect, установке таймера и проверке по нему уже несуществующего pcb в lwip-е с итоговым падением в нирвану :)
В Lwip-е и всём стороннем, что не связано с Espressif ошибок пока не обнаружил. Не пользуйтесь процедурами от Espressif и всё будет Ok. Если всё же необходимо использовать их, то проверяйте все входные параметры и логику обращения к ним, до их вызова. Иначе как и их писатель, будете говорить, что иногда, по не понятным причинам, просто перекомпиляция исправила ошибку :) Распределение переменных в памяти встало по другому и их "месево" "протектед" теперь не вызывает при затирании друг другом. :) Они, Espressif, при этом, ещё за мультизадачку взялись o_O
От этого возникают и множественные ошибки у писателей следующих надстроек на SDK от Espressif. К примеру, spi_flash_read(...) не может работать с не кратными 4-м параметрами... Т.е. считать пару байт с произвольного адреса Flash не выйдет. Необходима надстройка, проверяющая и корректирующая четность адресов и разворачивающая запрос на несколько обращений к spi_flash_read со своими буферами или собственная процедура... Это самый простой случай.
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
Ошибки в надстройке от Espressif, в espconn. Основная - в закрытии соединения - потере события disconnect, установке таймера и проверке по нему уже несуществующего pcb в lwip-е с итоговым падением в нирвану :)
А у тебя получилось с этим побороться? Какие исправления в исходниках сделал, можешь выложить?
 

pvvx

Активный участник сообщества
Поборол, без исправлений, простым обращением к процедурам lwip, без espconn.

Выложить исходники пока не могу. Проект большой и много недоделанного, а там всё заточено на работу со встроенным WEB-HTTP сервером, а не на AT. Примеры работы с входящим в SDK lwip1.4.0 есть у самого Lwip: http://download.savannah.gnu.org/releases/lwip/
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
Поборол, без исправлений, простым обращением к процедурам lwip, без espconn.
Уххх, подход конечно верный, но новичкам это сложно. Было бы правильнее исправить espconn.c если дело в нем и отрапортавать в Espressif об ошибке, а то так воз и ныне там будет всегда, так ошибки и перетекают из одной версии в другую без исправлений.
 

pvvx

Активный участник сообщества
Espressif об этом наверняка знает, т.к. начал проект на мультизадачке и там, в либах, уже нет espconn...
Проблемы с исправлением описаны там: http://esp8266.ru/forum/threads/bagi-i-nedosmotry-v-sdk-ot-espressif.21/
Прибавьте туда неограниченный захват памяти TIME_WAIT стеком Lwip и получите, что необходимо всё переписывать по новому. Новичкам и дана рекомендация - не писать никаких надстроек на SDK от Espressif - он пока очень сырой и всё написанное будет необходимо переписывать, когда выйдет более менее стабильная версия.
 
Последнее редактирование:

NeoroN

Member
пичаль. Я тоже заметил косяки с памятью. Надеюсь к весне они исправят некоторые косяки.
 

PerryMZ

New member
Подскажите какая AT комаднда поволяет посмотреть список сохраненных точек доступа?
 
Сверху Снизу