Страница 138 из 326

Re: Arduino Mega Server

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

Re: Arduino Mega Server

Добавлено: Пн апр 18, 2016 8:15 pm
Анатолий
UPD: Ещё одна важная весч...забыл написать....в scripts.js

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

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

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

*** Сообщение запрещено. Сообщение похоже на спам. ***

Re: Arduino Mega Server

Добавлено: Вт апр 19, 2016 7:38 am
alexsis_76
Посмотрел сегодня коды AMS честно говоря немного не по себе, вот от чего, сначала открываем 2 сокета, затем браузер спрашивает GET и начинается куча пакетов размером 1 байт полезной нагрузки передается по одному символу, т е первый пакет H второй T третий T и т д,представляете да, блин в шоке, затем начинают грузится картинки, вместо того чтобы грузить сразу по сектору в 512 байт , грузим по 128, надо что то делать :)

Re: Arduino Mega Server

Добавлено: Вт апр 19, 2016 9:23 am
Alex
Посмотрел сегодня коды AMS честно говоря немного не по себе, вот от чего, сначала открываем 2 сокета, затем браузер спрашивает GET и начинается куча пакетов размером 1 байт полезной нагрузки передается по одному символу, т е первый пакет H второй T третий T и т д,представляете да, блин в шоке, затем начинают грузится картинки, вместо того чтобы грузить сразу по сектору в 512 байт , грузим по 128, надо что то делать
Ни одного слова не понял. Постарайтесь сформулировать попонятнее — тема актуальная и интересны все дельные предложения по ускорению сетевой работы.

Re: Arduino Mega Server

Добавлено: Вт апр 19, 2016 9:46 am
alexsis_76
Alex вот сдесь
Безымянный_1.JPG
Безымянный_1.JPG (346.99 КБ) 13267 просмотров
это сетевой сканер видите в самом верху пакеты 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, освободив кучку оперативки.

Re: Arduino Mega Server

Добавлено: Ср апр 20, 2016 12:48 pm
alexsis_76
Нашел еще одну бяку, ту самую,завтра исправлю, поставил размер пакета картинок 512 картинки стали грузится повеселее.

Re: Arduino Mega Server

Добавлено: Чт апр 21, 2016 11:16 am
alexsis_76
подредактировал код получилось так
Безымянный_444.JPG
Безымянный_444.JPG (160.04 КБ) 13169 просмотров
я думаю вполне хороше для контроллера с 16 мгц,код можно еще перетрясти для оптимизации, попрятать глобальные буфера и строки, а так же убрать cl.print.

Re: Arduino Mega Server

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

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

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

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

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

И так далее...

Re: Arduino Mega Server

Добавлено: Пт апр 22, 2016 9:01 am
nick7zmail
Согласен с Алексом...выложите пожалуйста ваши оптимизации...думаю неплохо бы их было включить в релиз амс 0.15...тут, наверное, все за ускорение работы)

Отправлено с моего Xperia Z через Tapatalk

Re: Arduino Mega Server

Добавлено: Пт апр 22, 2016 9:47 am
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,создается в момент входа в функцию в стеке и уничтожается при выходе, это необходимо иметь ввиду оставляя необходимое количество свободной памяти иначе не будет работать, учитывая что таких моментов там много , можно наскрести наверное около килобайта бесхозной памяти.в архиве файл которого коснулись данные правки,попозже будет остальное.