Arduino Mega Server
Модератор: Alex
- uni
- Сообщения: 191
- Зарегистрирован: Вс июл 26, 2015 9:21 pm
- Откуда: Екатеринбург
- Благодарил (а): 4 раза
- Поблагодарили: 7 раз
- Контактная информация:
Re: Arduino Mega Server
Метод sclient.write() судя по всему оперирует одним байтом. Должен быть другой метод (переопределённый может быть), который оперирует буфером. Также в драйвере файловой системы должна быть возможность чтения буфера, а не одного символа. Тогда цикл можно будет сделать не побайтный (как, видимо, сейчас), а кусками размером с буфер.
Вообще, скетчи - это зло. Нужно писать на чистом C++, где среда разработки может подсказать что и как. Как только нужно профилирование кода - ардуинщики не знают куда копать.
Вообще, скетчи - это зло. Нужно писать на чистом C++, где среда разработки может подсказать что и как. Как только нужно профилирование кода - ардуинщики не знают куда копать.
Россия навсегда!
-
- Сообщения: 28
- Зарегистрирован: Сб июн 06, 2015 6:04 pm
- Благодарил (а): 9 раз
- Поблагодарили: 3 раза
Re: Arduino Mega Server
Заменить всякие дигитал реад и врайт на что то более быстрое для работы с портами, помоему либа называется digitalIO
А и еще заменить в этой функции запись на блок на не по 1 килобайту, где то в инете встречал, но уже не помню где
Отправлено с моего P780 через Tapatalk
А и еще заменить в этой функции запись на блок на не по 1 килобайту, где то в инете встречал, но уже не помню где

Отправлено с моего P780 через Tapatalk
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Проблема начинает проясняться.
Файлы читаются со скоростью 25 КБ в секунду, а отдаются со скоростью 4.1 КБ в секунду. То есть дело не в чтении файлов. Проблема в отдаче функцией
sclient.write();
Можно каким-то способом увеличить скорость работы сетевого интерфейса или W5100 с большей скоростью работать не может?
И что со всем этим делать?
Файлы читаются со скоростью 25 КБ в секунду, а отдаются со скоростью 4.1 КБ в секунду. То есть дело не в чтении файлов. Проблема в отдаче функцией
sclient.write();
Можно каким-то способом увеличить скорость работы сетевого интерфейса или W5100 с большей скоростью работать не может?
И что со всем этим делать?
- uni
- Сообщения: 191
- Зарегистрирован: Вс июл 26, 2015 9:21 pm
- Откуда: Екатеринбург
- Благодарил (а): 4 раза
- Поблагодарили: 7 раз
- Контактная информация:
Re: Arduino Mega Server
В arduino_libs нужно положить все используемые модули (заголовочники). Используемый метод чтения с SD-карты нужно заменить другим, как и подсказано в описании класса (и на что я указывал выше):Можно каким-то способом увеличить скорость работы сетевого интерфейса или W5100 с большей скоростью работать не может?
Код: Выделить всё
int File::read() {
if (_file)
return _file->read();
return -1;
}
// buffered read for more efficient, high speed reading
int File::read(void *buf, uint16_t nbyte) {
if (_file)
return _file->read(buf, nbyte);
return 0;
}
Где описание класса EthernetClient?
Россия навсегда!
- uni
- Сообщения: 191
- Зарегистрирован: Вс июл 26, 2015 9:21 pm
- Откуда: Екатеринбург
- Благодарил (а): 4 раза
- Поблагодарили: 7 раз
- Контактная информация:
Re: Arduino Mega Server
Попробуйте заменить код:
на
Код: Выделить всё
if (webFile) {
while(webFile.available()) {
sclient.write(webFile.read());
}
webFile.close();
}
Код: Выделить всё
// send web page to client
const MAX_BUFFER_SIZE = 32;
uint16_t rsize;
uint8_t buff[ MAX_BUFFER_SIZE ];
if ( webFile ) {
while( webFile.available() ) {
rsize = webFile.read( buff, MAX_BUFFER_SIZE );
sclient.write( buff, rsize );
}
webFile.close();
}
- Рейтинг: 2.33%
Россия навсегда!
-
- Сообщения: 216
- Зарегистрирован: Ср май 28, 2014 12:42 pm
- Откуда: Санкт-Петерург
- Благодарил (а): 76 раз
- Поблагодарили: 28 раз
Re: Arduino Mega Server
Возможно будут полезны вот эти ссылки:
http://ua9uqb.livejournal.com/162691.ht ... ad=1272451
http://aterentiev.livejournal.com/123718.html
http://ua9uqb.livejournal.com/162691.ht ... ad=1272451
http://aterentiev.livejournal.com/123718.html
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Докладываю о результатах.
Время загрузки тестовых страниц сократилось примерно на 30%, что очень круто.
С 13 секунд до 5 и с 18 секунд до 12. Но всё равно ещё очень велико. Есть ли какие-нибудь ещё способы увеличить скорость? Например увеличить буфер до 64 или более?
Что непонятно. По тестам скорость отдачи стала 43 КБ/сек, то есть увеличилась в 10 раз, скорость загрузки возросла только на 30%. Как это?
А вообще, uni, вы — гений и вам плюс в карму.
Время загрузки тестовых страниц сократилось примерно на 30%, что очень круто.
С 13 секунд до 5 и с 18 секунд до 12. Но всё равно ещё очень велико. Есть ли какие-нибудь ещё способы увеличить скорость? Например увеличить буфер до 64 или более?
Что непонятно. По тестам скорость отдачи стала 43 КБ/сек, то есть увеличилась в 10 раз, скорость загрузки возросла только на 30%. Как это?
А вообще, uni, вы — гений и вам плюс в карму.

- uni
- Сообщения: 191
- Зарегистрирован: Вс июл 26, 2015 9:21 pm
- Откуда: Екатеринбург
- Благодарил (а): 4 раза
- Поблагодарили: 7 раз
- Контактная информация:
Re: Arduino Mega Server
Размер буфера я взял с потолка. Вообще, этот размер зависит от свободной ОЗУ. Если есть место, то можно поставить и 512 байт. Нужно вынести определение буфера в глобальные переменные, тогда при компиляции будет видно влезает ли буфер в ОЗУ или нет. Его нельзя оставлять локально определённым.
П.С. Максимальный размер буфера зависит от того, какой размер страницы используется в драйвере sd-карты для чтения. Это нужно смотреть в коде драйвера. В драйвере PetitFS используется размер 512 байт.
Если поставить размер 513 байт, к примеру, то скорость может упасть, т.к. будут читаться две страницы по 512 байт, но во второй используется только 1 байт. Это если читается размер страницы в 512 байт.
Поскольку используется один SPI (насколько я понял), то время работы с картой перемежается со временем работы с Ethernet. Т.е. всё время чтения с карточки Ethernet в ожидании. Тут нужно правильно всё считать просто. Мысленно представить последовательность работы по SPI и логически посчитать.Что непонятно. По тестам скорость отдачи стала 43 КБ/сек, то есть увеличилась в 10 раз, скорость загрузки возросла только на 30%. Как это?
П.С. Максимальный размер буфера зависит от того, какой размер страницы используется в драйвере sd-карты для чтения. Это нужно смотреть в коде драйвера. В драйвере PetitFS используется размер 512 байт.
Если поставить размер 513 байт, к примеру, то скорость может упасть, т.к. будут читаться две страницы по 512 байт, но во второй используется только 1 байт. Это если читается размер страницы в 512 байт.
Россия навсегда!
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
На Меге по моему 2 SPI и теоретически, наверное, можно было бы задействовать оба. Но это такие дебри, что даже думать в эту сторону не хочется.
Теперь хотелось бы выявить второго в очереди тех, кто тормозит загрузку от момента нажатия кнопки до загрузки страницы.
Что-то практических методов выявления виновника №2 мне не приходит в голову.
Теперь хотелось бы выявить второго в очереди тех, кто тормозит загрузку от момента нажатия кнопки до загрузки страницы.
Что-то практических методов выявления виновника №2 мне не приходит в голову.
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Информация к размышлению.
Файлы весят 50 КБ (5 штук). При скорости передачи в 43 КБ/сек для их передачи требуется 1.1 секунды. С накладными расходами, пускай 4 секунды. Реально загружается за 12 секунд.
Вопрос. На что уходит 8 секунд и как это выявить?
Файлы весят 50 КБ (5 штук). При скорости передачи в 43 КБ/сек для их передачи требуется 1.1 секунды. С накладными расходами, пускай 4 секунды. Реально загружается за 12 секунд.
Вопрос. На что уходит 8 секунд и как это выявить?