Страница 94 из 119
Re: Arduino Mega Server для esp8266
Добавлено: Вт сен 19, 2017 3:25 pm
Alex
В стандартных драйверах ESP8266 версии 2.0.0
Специально для вас запаковал библиотеку отдельно
Re: Arduino Mega Server для esp8266
Добавлено: Вт сен 19, 2017 3:26 pm
alexsis_76
отлично уже смотрю
Re: Arduino Mega Server для esp8266
Добавлено: Вт сен 19, 2017 3:29 pm
Alex
потому что это шаблон
а это настоящая функция
Ок. А где в шаблоне передаётся строка и почему она передаётся в 300 раз медленнее, чем надо и куда копать дальше?
И ещё вопрос: если в шаблоне есть вызов
то почему он не должен работать?
Re: Arduino Mega Server для esp8266
Добавлено: Вт сен 19, 2017 4:02 pm
Alex
Опытным путём выяснил, что шаблон используется при передаче файлов с карты памяти.
А при передаче строки используется конструкция
Код: Выделить всё
_client->write(reinterpret_cast<const char*>(buf), size);
Где искать код реализации этой функции? Если в библиотеке его нет (или я плохо искал?)
Re: Arduino Mega Server для esp8266
Добавлено: Вт сен 19, 2017 4:13 pm
alexsis_76
_client->write(reinterpret_cast<const char*>(buf), size);
а это видимо и есть вызов по щаблону
Re: Arduino Mega Server для esp8266
Добавлено: Вт сен 19, 2017 4:26 pm
Alex
а это видимо и есть вызов по щаблону
Маркер в шаблоне отрабатывает только при передаче файлов, при передаче строки этот же маркер в шаблоне не отрабатывает.
Вывод: при передаче строки код шаблона не задействуется.
Или я что-то не так понимаю? И как найти реализацию этой функции при передаче строки?
Re: Arduino Mega Server для esp8266
Добавлено: Ср сен 20, 2017 6:53 am
alexsis_76
да там вроде других кодов нету,только этот , все остальные ссылаются на него
size_t WiFiClient::write(const uint8_t *buf, size_t size)
{
if (!_client || !size)
{
return 0;
}
return _client->write(reinterpret_cast<const char*>(buf), size);
}
явно приводится к const char
size_t WiFiClient::write2(const uint8_t *buf, size_t size) // add
{
if (!_client || !size)
{
return 0;
}
return _client->write(reinterpret_cast<const char*>(buf), size);
}
то же самое
и
size_t WiFiClient::write_P(PGM_P buf, size_t size)
{
if (!_client || !size)
{
return 0;
}
char chunkUnit[WIFICLIENT_MAX_PACKET_SIZE + 1];
chunkUnit[WIFICLIENT_MAX_PACKET_SIZE] = '\0';
size_t remaining_size = size;
while (buf != NULL && remaining_size > 0) {
size_t chunkUnitLen = WIFICLIENT_MAX_PACKET_SIZE;
if (remaining_size < WIFICLIENT_MAX_PACKET_SIZE) chunkUnitLen = remaining_size;
// due to the memcpy signature, lots of casts are needed
memcpy_P((void*)chunkUnit, (PGM_VOID_P)buf, chunkUnitLen);
buf += chunkUnitLen;
remaining_size -= chunkUnitLen;
// write is so overloaded, had to use the cast to get it pick the right one
_client->write((const char*)chunkUnit, chunkUnitLen);
}
return size;
}
то же только читает данные из памяти программ кусками по WIFICLIENT_MAX_PACKET_SIZE
если найду платку с esp, загружу коды можно будет поподробнее.
а в чем проявляются тормоза?
долго отдается html?
Re: Arduino Mega Server для esp8266
Добавлено: Ср сен 20, 2017 7:09 am
Alex
Да, какой-то загадочный код в этой библиотеке. Всё указывает на эту функцию, но при передаче строки маркеры не реагируют, а строка передаётся! Это вообще первый случай когда я не могу идентифицировать код функции.
Ещё у меня вопрос: где начинаются тормоза — при чтении исходного массива символов или при передаче их в сеть. У меня такое впечатление, что работа идёт не кусками из буфера, а посимвольно, но это только предположение.
А чтобы проверить это нужно найти код функции — а как раз это не получается.
Кстати! Я комментировал этот шаблон — строки всё равно передаются! Это однозначно говорит о том, что вызывается какой-то другой код. Какой?!!!
Re: Arduino Mega Server для esp8266
Добавлено: Ср сен 20, 2017 7:45 am
alexsis_76
нашел nodemcu,это будет на ней работать,если будет то попробую отладку.
Re: Arduino Mega Server для esp8266
Добавлено: Ср сен 20, 2017 7:56 am
Alex
Дистрибутив для ESP8266 должен работать, только вызов
нужно заменить на
пример кода cl.write() можно посмотреть в дистрибутиве RobotDyn (всё есть на сайте).
Только проверять нужно cl.write() которые передают строки, cl.write() которые передают файлы работают нормально!!!