Arduino Mega Server для esp8266

Модератор: Alex

Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server для esp8266

Сообщение Alex » Вт сен 19, 2017 3:25 pm

В стандартных драйверах ESP8266 версии 2.0.0 :)

Специально для вас запаковал библиотеку отдельно
Вложения
ESP8266WiFi.zip
ESP8266WiFi
(180.26 КБ) 139 скачиваний
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server для esp8266

Сообщение alexsis_76 » Вт сен 19, 2017 3:26 pm

отлично уже смотрю
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server для esp8266

Сообщение Alex » Вт сен 19, 2017 3:29 pm

потому что это шаблон
а это настоящая функция
Ок. А где в шаблоне передаётся строка и почему она передаётся в 300 раз медленнее, чем надо и куда копать дальше?

И ещё вопрос: если в шаблоне есть вызов

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

Serial.println(“MARKER”); 
то почему он не должен работать?
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server для esp8266

Сообщение Alex » Вт сен 19, 2017 4:02 pm

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

А при передаче строки используется конструкция

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

_client->write(reinterpret_cast<const char*>(buf), size); 
Где искать код реализации этой функции? Если в библиотеке его нет (или я плохо искал?)
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server для esp8266

Сообщение alexsis_76 » Вт сен 19, 2017 4:13 pm

_client->write(reinterpret_cast<const char*>(buf), size);
а это видимо и есть вызов по щаблону
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server для esp8266

Сообщение Alex » Вт сен 19, 2017 4:26 pm

а это видимо и есть вызов по щаблону
Маркер в шаблоне отрабатывает только при передаче файлов, при передаче строки этот же маркер в шаблоне не отрабатывает.

Вывод: при передаче строки код шаблона не задействуется.

Или я что-то не так понимаю? И как найти реализацию этой функции при передаче строки?
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server для esp8266

Сообщение alexsis_76 » Ср сен 20, 2017 6:53 am

да там вроде других кодов нету,только этот , все остальные ссылаются на него
СпойлерПоказать
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?
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server для esp8266

Сообщение Alex » Ср сен 20, 2017 7:09 am

Да, какой-то загадочный код в этой библиотеке. Всё указывает на эту функцию, но при передаче строки маркеры не реагируют, а строка передаётся! Это вообще первый случай когда я не могу идентифицировать код функции.

Ещё у меня вопрос: где начинаются тормоза — при чтении исходного массива символов или при передаче их в сеть. У меня такое впечатление, что работа идёт не кусками из буфера, а посимвольно, но это только предположение.

А чтобы проверить это нужно найти код функции — а как раз это не получается.

Кстати! Я комментировал этот шаблон — строки всё равно передаются! Это однозначно говорит о том, что вызывается какой-то другой код. Какой?!!!
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server для esp8266

Сообщение alexsis_76 » Ср сен 20, 2017 7:45 am

нашел nodemcu,это будет на ней работать,если будет то попробую отладку.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server для esp8266

Сообщение Alex » Ср сен 20, 2017 7:56 am

Дистрибутив для ESP8266 должен работать, только вызов

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

cl.println()
нужно заменить на

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

cl.write()
пример кода cl.write() можно посмотреть в дистрибутиве RobotDyn (всё есть на сайте).

Только проверять нужно cl.write() которые передают строки, cl.write() которые передают файлы работают нормально!!!
Ответить