Скрыть объявление
Управляйте вашими ESP8266 и другими устройствами прямо с телефона из любой точки мира, где есть интернет!
Подробности и обсуждение IoT Manager в этой теме. Официальный сайт приложения и документация IoTmanager.ru
Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Web-свалка на RTL871x

Тема в разделе "Realtek - SDK, прошивки и утилиты", создана пользователем pvvx, 21 апр 2017 в 12:42.

  1. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.538
    Симпатии:
    960
    Web-свалка успешно переехала на RTL-ы.
    GitHub - pvvx/RTL00_WEB: Simple web server for RTL8710AF
    Дописываю основные функции переключения WiFi... Возможно кто поможет с оформлением и переписыванием по максимуму примеров Web страниц c Ajax на websosket (особенно интерактивные, с графиками и т.д.) ? В данном Web есть поддержка и того и другого. Переменные передаются через GET/POST/куки/мультидата и websocket... Надо ли SSI?
    А пока предложить могу только галерею картинок с уже как-то работающих страничек...
    Заодно принимаются заявки, на что надо дополнить и что хотелось бы иметь в Web-сервере. Может как-то разбить на простой и более сложный вариант?...
    Снимок1390.gif Снимок1391.gif Снимок1392.gif Снимок1393.gif Снимок1394.gif
    Начальные тесты показали, что модуль RTL8711AM успешно выдерживает за 200 одновременных открытых HTTP соединения и порядок в 20000 обработок коротких HTTP запросов-ответов с открытием-закрытием портов в минуту... RTLHTTPD
     
    Последнее редактирование: 22 апр 2017 в 16:59
    aneox, aloika, A_D и 2 другим нравится это.
  2. Simon

    Simon Новичок

    Сообщения:
    16
    Симпатии:
    1
    Ссылки на проект и sdk к нему пока нет?
    Из пожеланий - обновление прошивки через web и классика UART<->TCP в пару кликов как на esp.
     
  3. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.538
    Симпатии:
    960
    Обновление через Web было и есть. Просто оно не было описано :) Там всегда была включена и посекторная запись Flash... На ESP это особо не требовалось, с его прожорливостью flash, т.к. продаваемые модули были с малым размером flash и SDK туда два раза не лезла. Тут то во время записи Flash всё работает и не вызывает никаких проблем писать её на ходу как угодно, хоть побайтно в окне страницы мышкой. :)
    Возможно допилить и TFTP. Он уже "почти" адаптирован и давно закинут в мою сборку SDK... (от другой версии LwIP и надо поправить только заголовки).
    ----------
    +
    На HTTPS с RTL871xAF Web не вытянуть. Это возможно только на RTL8711AM.
    ----
    На git пока не скинуть - очень много изменений в самом SDK, в основном по API WiFi и надо притянуть (адаптировать) уже имеющиеся старые примеры к ним, чтобы не городить множества репозиториев с SDK к сотне мегабайт...
     
    Последнее редактирование: 21 апр 2017 в 13:12
    aneox нравится это.
  4. vad7

    vad7 Активный участник сообщества

    Сообщения:
    370
    Симпатии:
    42
    Пожелание: если это еще не сделано, увеличить лимит для размера переменных и их имен в функциях web_parse_*.
    Добавить функцию записи в webfs.
     
  5. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.538
    Симпатии:
    960
    Не вижу смысла в "записи" на простой web-диск. Вы будете писать по одному файлу страницы сервера?
    Всякая статистика и прочие накапливаемые данные обычно пишутся в своем формате и для передачи их надо разбирать, а не на прямую гнать в HTTP поток. Обычно делают циклический буфер в Flash для их записи и процедуру имитации вывода данных из них, как файла, в разных форматах.
    При записи файлов на Flash возникает бяда в виде тормоза, чтобы дырки не протереть при записи. Никто вам не мешает прикрутить в качестве файловой структуры и SPIFFS и ждать открытия файла более 1 секунды :) Ограничим в Web на одно текущее соединение и будет работать... :)
    SD прикручивается влет, но запись на ней тоже накладывает ограничения в виде установки супервайзеров питания и UPS. Иначе может слететь вся, при отключении питания не вовремя.
    Web обращается к диску всего 4-мя функциями: Open file, Read блок, Seek обратно на указанное число от текущего, Close file. Текущие установки web требуют от 32-х одновременно открытых файлов. Желательно больше, но RTL00 "мало памяти".
    Так что давайте свою файловую систему с записью и алго, как писать файлы по HTTP с разбором каталогов и прочих атрибутов файлов, кол-вом одновременно открытых от 32-х файлов и умещающуюся в память RTL00. Жду.
     
    Последнее редактирование: 22 апр 2017 в 21:07
    aneox нравится это.
  6. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.538
    Симпатии:
    960
    А смысл? Быстрее получить сообщение "мало памяти"?
    Яндекс: "самое длинное слово в русском языке"
    «Тетрагидропиранилциклопентилтетрагидропиридопиридиновые» (55 букв, химич. вещество)
    А синтезировать белки Web-свалка не умеет, чтобы ей передавать самое длинное слово в мире: http://geekologie.com/2012/11/20/titin.txt


    Для справки:
    Microsoft Internet Explorer: Начиная с четвертой версии браузера, максимальная длина воспринимаемого URL составляет 2 083 символов. При этом длина GET-запроса лимитирована 2 048 символа.
    Web-свалка жрет GET запрос от 3-х MSS до где-то к 6-ти кило.
    У POST запросов лимитов нет.
    URL ограничен длиной имени файлов с каталогами на дисковой системе.
    Кол-во переменных в URL строке ограничено длиной GET запроса.
    Для передачи бесконечного числа переменных существует формат "мультидата", но ограничение тоже есть, т.к. оно не явное - размер Content до 4294967296 байт (32 бита) и обходить это я не стал.
    Это старинные методы. Для современных - используйте websocket. Там ограничения на кол-во переменных нет.
     
    Последнее редактирование: 22 апр 2017 в 21:31
  7. vad7

    vad7 Активный участник сообщества

    Сообщения:
    370
    Симпатии:
    42
    pvvx, эк вас заплющило... :)

    у вас 3 функции парсинга в которых объявлены буфера 32 на имя и 192 на значение, чем они и ограничены:
    esp8266web/web_srv.c at master · pvvx/esp8266web · GitHub

    Хотя можно использовать всего одну универсальную функцию и не задействовать локальные буфера, а парсить прям на месте и не будет доп. ограничений на длину:
    PowerMeter-IrDA/web_srv.c at master · vad7/PowerMeter-IrDA · GitHub
     
  8. vad7

    vad7 Активный участник сообщества

    Сообщения:
    370
    Симпатии:
    42
    Да как хотите, чё тогда спрашивать про пожелания?
    Себе вот сделал функцию записи на место старого файла без ресайза и пока хватает...
     
  9. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.538
    Симпатии:
    960
    А всем не хватит. Вам побаловаться, а нам для более серьезных вещей. :p
     
  10. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.538
    Симпатии:
    960
    vad7 - во вас как колбасит :)
    Имя переменной в 32 символа. Это сколько вариантов?
    Каким образом парсить на месте, если надо перекодировать строку из web символов в обычные?
    Ваша функция срет в начальную строку, а она может быть в flash, т.е. const :)

    И ещё раз - опишите цели увеличения размеров имен переменных и их параметров.
    Пока это только ваша блажь, как и запись в одно и то-же место чтобы Flash в SoC вышла из строя. Arduino в соседней ветке... :)
     
    Последнее редактирование: 22 апр 2017 в 23:22
  11. vad7

    vad7 Активный участник сообщества

    Сообщения:
    370
    Симпатии:
    42
    Да ну!? Бред не пишите.

    А цель простая, редактирование больших настроек, как то выгрузка на IoT сервер.
     
  12. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.538
    Симпатии:
    960
    И для особо одаренных объясняю:

    Переменные при парсинге из URL и т.д. должны поступать в очередь (стек списка) (Queue), а не обрабатываться на ходу в том-же треде. Там ещё масса условий, таких как Аутентификация на разрешение исполнения. Это предполагается сделать, т.к. уже есть проблемы – не всё функции работают из уровня приоритета LwIP и могут иметь длительное время исполнения. Зачем потоку web держать все принятые данные за всю жизнь в принятых буферах, если использовать ваш глупый подход?

    Выгрузка чаго? Файла? Дык он должен иметь свою "дисковую систему", про что вам и написано. Давайте пример файловой системы для flash - уже второй раз спрашиваю. :)
    Вы уже в прошлой теме с ESP постоянно попрошайничали эти глупые вещи, которые не решаются по вашему - тут не ESP, которая делает дырки в flash сама, постоянно переписывая один и тот-же сектор. Так что с вас файловая система для Flash с записью. Они есть, но проприетарные. Ваша задача изменить их, адаптировать и выложить нам :p
     
    Последнее редактирование: 22 апр 2017 в 23:53
  13. vad7

    vad7 Активный участник сообщества

    Сообщения:
    370
    Симпатии:
    42
    pvvx, А не пойти бы кое кому в лес с задачами то?
    То что вы что-то делаете и выкладываете в публичный доступ, не наделяет вас правом хамить.
    И показывать свою шизу нужно не на форуме, а у врача, а то не нароком обострение случится...

    А то что функции в веб свалке неоптимальные, так это ни чего, с кем не бывает. Вам написали, как сделать более оптимально, а вы тут хрень несете, пытаясь оправдаться.
    Некрасиво.

    По третьему разу объяснять зачем это я все это доработал, не буду, ибо бесмысленно.
    Вам не нужно и ладушки.

    Там еще и баги были, связанные с особенностью esp8266...
    В прошлый раз, когда я на это указал, вы то же, что-то прогнали, и так и не исправили.

    Есть такая поговорка - не трожь г$вно, вонять не будет.
    Вы извините, специалист вы может и хороший, но как человек вы полное ....
     
  14. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.538
    Симпатии:
    960
    А можно вас попросить не использовать Web-свалку, без разрешения врача?
    Сходите к психиатру, получите справку и опубликуйте - тогда разрешу :)
    А пока начнем с того - где коды дисковой системы с записью, без дырок?
    А закончим тем, что попробуйте запустить из треда LwIP какую функцию WiFi, потом срочно к врачу - докладывать, как вы сотый раз упрашиваете меня сделать проект лично под ваши выкрутасы, не подкрепленные ничем, кроме дури. :p
    И вот вам направление к врачу:
    Код (Text):
    1.  
    2. Task List:
    3. ==================================================
    4. Name      Status Priority HighWaterMark TaskNumber
    5. loguart         R       4       662     4
    6. IDLE            R       0       36      2
    7. TCP_IP          B       9       637     5
    8. Tmr Svc         B       5       444     3
    9. cmd_threa       B       6       251     39
    10. web_qfn         B       5       676     13
    11. rtw_littl       B       10      451     40
    12. rtw_inter       B       6       207     38
    13. rtw_recv_       B       5       887     36
    14. rtw_check       B       5       211     41
    15. rtw_TDMA_       B       7       219     42
    16. rtw_xmit_       B       5       221     37
    Приоритет TCP_IP увидели, и сравнили с ожидание выполнения других, входящих в WiFi драйвер. Понижать динамически на ходу не буду, т.к. чревато другими осложнениями и направлениями вас к дохтору. :)
    И ещё одно направление к другому дохтору, если плохо с чтением:
    Подчеркнул, что писалось ранее, другими словами, с ошибками и бегло, но вы не в состоянии и это воспринимать, т.к. вам надо только свою блажь. :)
    И ещё раз - Arduino в соседних ветках - вам туда, т.к. там, если люди задают вопросы правильно, то и получают нормальные ответы, а здесь вы ведете себя неприлично, даже когда вам разжовывают почему и как...
    В который раз вам ещё объяснить, что вы делаете оптимизацию на тестовой версии, нагроможденной за время выхода разных SDK к ESP8266? А тут RTL871x с RTOS и методы отличаются. Начальная разбор на разный парольный доступ уже вписан и как уже сказал - "парсить" переменные теперь надо по другому... Но могу оставить - бросить, вставить ваш кусок и пусть себе растет, как великий оптимизированный сорняк, не давая сделать другое?
     
    Последнее редактирование: 23 апр 2017 в 18:57
  15. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    5.538
    Симпатии:
    960
    Вы хотели оптимизации, но полезли в мелкий уровень. Третья справка для таких больных:

    Данные поступают из буфера LwIP– его распределителя памяти. В данном случае, у вас, они переписываются в другой буфер , распределяемый в heap менеджером памяти RTOS. Выходит двойной буфер и пересылка. Можно работать и в буферах LwIP, выуживая построчно и уже декодировав с парсингом. По времени это почти одинаково, но в итого меньше сложных манипуляций и ваши мелочные оптимизации при этом опять не катят.

    Там-же выходит, что для передачи блока необходимо всё равно его кешировать в LwIP (передавать LwIP буфер, который он дублирует в своих pbuf на время передачи стека TCP), т.е. это всё говорит, что надо работать прямо в pbuf LwIP-а и не городить свои приемо-передающие буфера.

    if ((crlf = pbuf_memfind(hs->req, CRLF, 2, preq->offset)) == 0xFFFF) …
    if (((pos = pbuf_memfind(p, "boundary=", 9, preq->contype)) < 0xFFF0)…

    Как-же тогда будет работать ваша опимаза?
    Надеюсь, теперь вам уже хватит направлений к врачу?
    --------
    А мы тут продолжим изучать какие простые вопросы и пожелания есть. Русло их описал ранее, в первом соо – нужно или нет SSI? Или сделать возврат, по каким то пару выбираемых алгоритмов галочками в меню, к настройкам у WiFi при неуспехе нового соединения и т.д. Оптимизировать будем потом , когда созреет концепция и будут осмысленны необходимые затраты на оптимизацию (затраты времени). :p
     

Поделиться этой страницей