Arduino Mega Server для esp8266
Модератор: Alex
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server для esp8266
В стандартных драйверах ESP8266 версии 2.0.0
Специально для вас запаковал библиотеку отдельно
Специально для вас запаковал библиотеку отдельно
- Вложения
-
- ESP8266WiFi.zip
- ESP8266WiFi
- (180.26 КБ) 139 скачиваний
-
- Сообщения: 791
- Зарегистрирован: Пт янв 22, 2016 10:08 am
- Благодарил (а): 6 раз
- Поблагодарили: 63 раза
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server для esp8266
Ок. А где в шаблоне передаётся строка и почему она передаётся в 300 раз медленнее, чем надо и куда копать дальше?потому что это шаблон
а это настоящая функция
И ещё вопрос: если в шаблоне есть вызов
Код: Выделить всё
Serial.println(“MARKER”);
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server для esp8266
Опытным путём выяснил, что шаблон используется при передаче файлов с карты памяти.
А при передаче строки используется конструкция
Где искать код реализации этой функции? Если в библиотеке его нет (или я плохо искал?)
А при передаче строки используется конструкция
Код: Выделить всё
_client->write(reinterpret_cast<const char*>(buf), size);
-
- Сообщения: 791
- Зарегистрирован: Пт янв 22, 2016 10:08 am
- Благодарил (а): 6 раз
- Поблагодарили: 63 раза
Re: Arduino Mega Server для esp8266
а это видимо и есть вызов по щаблону_client->write(reinterpret_cast<const char*>(buf), size);
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server для esp8266
Маркер в шаблоне отрабатывает только при передаче файлов, при передаче строки этот же маркер в шаблоне не отрабатывает.а это видимо и есть вызов по щаблону
Вывод: при передаче строки код шаблона не задействуется.
Или я что-то не так понимаю? И как найти реализацию этой функции при передаче строки?
-
- Сообщения: 791
- Зарегистрирован: Пт янв 22, 2016 10:08 am
- Благодарил (а): 6 раз
- Поблагодарили: 63 раза
Re: Arduino Mega Server для esp8266
да там вроде других кодов нету,только этот , все остальные ссылаются на него
явно приводится к const char
то же самое
и то же только читает данные из памяти программ кусками по WIFICLIENT_MAX_PACKET_SIZE
если найду платку с esp, загружу коды можно будет поподробнее.
а в чем проявляются тормоза?
долго отдается html?
СпойлерПоказать
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);
}
{
if (!_client || !size)
{
return 0;
}
return _client->write(reinterpret_cast<const char*>(buf), size);
}
СпойлерПоказать
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);
}
{
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;
}
{
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;
}
если найду платку с esp, загружу коды можно будет поподробнее.
а в чем проявляются тормоза?
долго отдается html?
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server для esp8266
Да, какой-то загадочный код в этой библиотеке. Всё указывает на эту функцию, но при передаче строки маркеры не реагируют, а строка передаётся! Это вообще первый случай когда я не могу идентифицировать код функции.
Ещё у меня вопрос: где начинаются тормоза — при чтении исходного массива символов или при передаче их в сеть. У меня такое впечатление, что работа идёт не кусками из буфера, а посимвольно, но это только предположение.
А чтобы проверить это нужно найти код функции — а как раз это не получается.
Кстати! Я комментировал этот шаблон — строки всё равно передаются! Это однозначно говорит о том, что вызывается какой-то другой код. Какой?!!!
Ещё у меня вопрос: где начинаются тормоза — при чтении исходного массива символов или при передаче их в сеть. У меня такое впечатление, что работа идёт не кусками из буфера, а посимвольно, но это только предположение.
А чтобы проверить это нужно найти код функции — а как раз это не получается.
Кстати! Я комментировал этот шаблон — строки всё равно передаются! Это однозначно говорит о том, что вызывается какой-то другой код. Какой?!!!
-
- Сообщения: 791
- Зарегистрирован: Пт янв 22, 2016 10:08 am
- Благодарил (а): 6 раз
- Поблагодарили: 63 раза
Re: Arduino Mega Server для esp8266
нашел nodemcu,это будет на ней работать,если будет то попробую отладку.
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server для esp8266
Дистрибутив для ESP8266 должен работать, только вызов
нужно заменить на
пример кода cl.write() можно посмотреть в дистрибутиве RobotDyn (всё есть на сайте).
Только проверять нужно cl.write() которые передают строки, cl.write() которые передают файлы работают нормально!!!
Код: Выделить всё
cl.println()
Код: Выделить всё
cl.write()
Только проверять нужно cl.write() которые передают строки, cl.write() которые передают файлы работают нормально!!!