Arduino Mega Server

Модератор: Alex

Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm

Re: Arduino Mega Server

Сообщение Alex »

Что в вашем понимании поддержка nRF?
NRF в моём понимании — модуль, который позволяет общаться с датчиками и контроллерами по воздуху. Я уже написал — кому нужны mysensors могут написать модуль (мод) и опубликовать его для всех. Я заниматься mysensors пока не планирую, речь идёт только об интеграции модуля на железном уровне, потом — о самописных решениях на базе этих модулей.
М на чем установлена? Судя по всему на винде должна быть поднята служба NTP, чтобы отвечать на запросы.
ХР без каких-либо настроек.
Аналогичная фигня происходит, если у графика загрузки проца фон прозрачный сделать. По-этому и решил спросить - как гуру процессинга - подскажи, не встречался с таким? Решение никакое в голову не приходит?
Да, так оно и происходит, решение пока не нашёл.
Есть идеи как исправить?
Есть. Надо cube.pde временно убрать из папки на момент запуска скетча АСК.
Кстати говоря - страничка при открытии выдаёт ошибку то что не может загрузить favicon.ico
Я в курсе. Там ограничен лимит соединений и не известно что лучше — тратить соединение на загрузку иконки или получать ошибку.
Анатолий
Сообщения: 4
Зарегистрирован: Вс апр 17, 2016 10:50 pm

Re: Arduino Mega Server

Сообщение Анатолий »

UPD: Ещё одна важная весч...забыл написать....в scripts.js

Код: Выделить всё

            // Pins status
            for (var i = 0; i < 19; i++) {
Вместо 19 (ну или по-умолчанию там 17 было - вписываем кол-во элементов в массивах пинов.

ВОооооТ! А без этой весчи не работало!!! СПС!

*** Сообщение запрещено. Сообщение похоже на спам. ***
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

Посмотрел сегодня коды AMS честно говоря немного не по себе, вот от чего, сначала открываем 2 сокета, затем браузер спрашивает GET и начинается куча пакетов размером 1 байт полезной нагрузки передается по одному символу, т е первый пакет H второй T третий T и т д,представляете да, блин в шоке, затем начинают грузится картинки, вместо того чтобы грузить сразу по сектору в 512 байт , грузим по 128, надо что то делать :)
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm

Re: Arduino Mega Server

Сообщение Alex »

Посмотрел сегодня коды AMS честно говоря немного не по себе, вот от чего, сначала открываем 2 сокета, затем браузер спрашивает GET и начинается куча пакетов размером 1 байт полезной нагрузки передается по одному символу, т е первый пакет H второй T третий T и т д,представляете да, блин в шоке, затем начинают грузится картинки, вместо того чтобы грузить сразу по сектору в 512 байт , грузим по 128, надо что то делать
Ни одного слова не понял. Постарайтесь сформулировать попонятнее — тема актуальная и интересны все дельные предложения по ускорению сетевой работы.
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

Alex вот сдесь
Безымянный_1.JPG
Безымянный_1.JPG (346.99 КБ) 13268 просмотров
это сетевой сканер видите в самом верху пакеты SYN это браузер открывает 2 потока оба они хотят соединится с портом 80 по исходящим портам 4415 и 4416. затем ниже строка GET/HTTP, это запрос от браузера
и ниже начинается самое интересное, в самом верху пакет размером 118 байт, это я уже переделал и ниже видите пакеты от 192,168,1,37 длинной 60 байт перемежаются с ACK пакетами от 192,168,1,100 в углу можете посмотреть содержимое пакета , как видите полезная нагрузка равна всего 1 байт , загрузите варезшарк все увидите, собственно так по байту они и передаются , ниже картинки по 128 байт
так делают эти функции
cl.print("<"); cl.print(tagBase); cl.print(tagCount); cl.print(">");
передают в сокет байт за байтом
если из заменить на эти
void sendHtmlAnswer(EthernetClient cl)
{cl.write("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnnection: close\r\n\r\n",strlen("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnnection: close\r\n\r\n"));}
void sendCssAnswer(EthernetClient cl)
{cl.write("HTTP/1.1 200 OK\r\nContent-Type: text/css\r\nConnnection: close\r\n\r\n",strlen("HTTP/1.1 200 OK\r\nContent-Type: text/css\r\nConnnection: close\r\n\r\n"));}
void sendJsAnswer(EthernetClient cl)
{cl.write("HTTP/1.1 200 OK\r\nContent-Type: application/javascript\r\nConnnection: close\r\n\r\n",strlen("HTTP/1.1 200 OK\r\nContent-Type: application/javascript\r\nConnnection: close\r\n\r\n"));}
void sendImgAnswer(EthernetClient cl)
{cl.write("HTTP/1.1 200 OK\r\nContent-Type: image/png\r\nConnnection: close\r\n\r\n",strlen("HTTP/1.1 200 OK\r\nContent-Type: image/png\r\nConnnection: close\r\n\r\n"));}
void sendXmlAnswer(EthernetClient cl)
{cl.write("HTTP/1.1 200 OK\r\nContent-Type: text/xml\r\nConnnection: close\r\n\r\n",strlen("HTTP/1.1 200 OK\r\nContent-Type: text/xml\r\nConnnection: close\r\n\r\n"));}
то получим пакет длинной 118 байтов.
файл server_ajax в архиве, там все увидите.

Да функции в таком виде малопригодны для использования,жрут много памяти,одна и та же строка хранится в контроллере аж в трех местах, строку можно спрятать за PGM, освободив кучку оперативки.
Вложения
server_ajax.rar
(4.2 КБ) 226 скачиваний
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

Нашел еще одну бяку, ту самую,завтра исправлю, поставил размер пакета картинок 512 картинки стали грузится повеселее.
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

подредактировал код получилось так
Безымянный_444.JPG
Безымянный_444.JPG (160.04 КБ) 13170 просмотров
я думаю вполне хороше для контроллера с 16 мгц,код можно еще перетрясти для оптимизации, попрятать глобальные буфера и строки, а так же убрать cl.print.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm

Re: Arduino Mega Server

Сообщение Alex »

Поскольку вы создаёте полезные решения, то предлагаю оформлять их как можно подробнее и каждое по отдельности с описанием, иначе ни я, ни кто другой не смогут ими воспользоваться.

Например, «ускорение загрузки картинок»

Делаем 1...
Делаем 2...
Делаем 3...

«Избавление от cl.print»

Делаем 1...
Делаем 2...
Делаем 3...

И так далее...
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург

Re: Arduino Mega Server

Сообщение nick7zmail »

Согласен с Алексом...выложите пожалуйста ваши оптимизации...думаю неплохо бы их было включить в релиз амс 0.15...тут, наверное, все за ускорение работы)

Отправлено с моего Xperia Z через Tapatalk
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

Давайте.
Насчет мелких пакетов , которые по 54 байта на рисунке с сетевого сканера, когда с браузера приходит запрос GET/HTTP amc начинает отдавать ответ, первой следует строка
HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnnection: close\r\n\r\n
сейчас это делается с помощью cl.print, которая передает в канал сообщение побайтно, в результате возникает куча пакетов с полезной нагрузкой 1 байт, с учетом всех заголовков 54 байта, в результате в первом пакете передается первый H,второй T, третий T, четвертый P и т д, на картинке в углу фрагмент такого пакета , внизу надпись TCP SEGMENT DATA (1byte), сделаем так, заодно освобождаем оперативную память от находящейся там строки, дело в том что при данном способе строки хранятся в контроллере в двух экземплярах, сначала строка при прошивке вкомпиливается во флеш память (та которая 256 кб), затем, при запуске бодро копируются в оперативку и висят там до выключения питания, короче говоря место занимают, делаем так
PSTR("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnnection: close\r\n\r\n" )
строка перемещается в память программ(можете проверить), но обычным путем ее оттуда уже не добыть, поэтому описана функция
void write_p(const char *progmem_s,EthernetClient cl){
char c;
char Buf[512];
uint8_t Count=0;
while ((c = pgm_read_byte_near(progmem_s++))) {
Buf[Count]=c;
Count++;
}
cl.write(Buf,Count);
}
которая может скопировать за раз 512 байт из памяти программ в память данных и передать одним пакетом, в результате получаем пакет длинной 118 байтов где помещается весь ответ, не пугайтесь сильно такого большого значения 512(можно и поменьше), это конечно налагает некоторые ограничения, этот буфер существует только в функции void write_p,создается в момент входа в функцию в стеке и уничтожается при выходе, это необходимо иметь ввиду оставляя необходимое количество свободной памяти иначе не будет работать, учитывая что таких моментов там много , можно наскрести наверное около килобайта бесхозной памяти.в архиве файл которого коснулись данные правки,попозже будет остальное.
Вложения
server_ajax.rar
(5.27 КБ) 233 скачивания
Ответить