Arduino Mega Server для esp8266
Модератор: Alex
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: Arduino Mega Server для esp8266
Вот и я про то же. Редко , но бывает карту передергиваю несколько раз в гнезде, пока запустится. AMS стартует всегда , только когда открываю страницы , на второй зависает. На Дуе постоянно открыты две сразу и никогда не отваливается.
Во вторник заберу еще две платы с батарейкой ( 75 дней летела в самолете , я про неё уже и забыл). Но это уже в своей теме продолжу.
Во вторник заберу еще две платы с батарейкой ( 75 дней летела в самолете , я про неё уже и забыл). Но это уже в своей теме продолжу.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server для esp8266
Удалось запустить SD карту, обсуждение ESP32 перенёс в соответствующую тему
viewtopic.php?f=19&t=4032&p=58856#p58856
viewtopic.php?f=19&t=4032&p=58856#p58856
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server для esp8266
Актуальный вопрос с тормознутостью сетевой работы ESP8266. Кто-нибудь может объяснить почему функция
на ESP8266 работает со скоростью примерно 200 Б/с, то есть в 300 (!) раз медленнее чем на других контроллерах?
А функция
Вообще тормозит так, что её невозможно использовать?
Понятно, что эти функции криво написаны, но как это лечить?
Код: Выделить всё
cl.write(s.c_str());
cl.write(s.c_str(), s.length());
А функция
Код: Выделить всё
cl.print(s);
Понятно, что эти функции криво написаны, но как это лечить?
-
- Сообщения: 469
- Зарегистрирован: Вт мар 12, 2013 1:22 am
- Благодарил (а): 41 раз
- Поблагодарили: 81 раз
Re: Arduino Mega Server для esp8266
А библиотеку ESP8266WebServer.h не пробовали для сравнения?
Хоть там тоже через currentClient.write(header.c_str(), header.length()) внутри библиотеки все делается, но всеже вдруг там какието оптимизаторы могли быть задействованы?
Плюс вот тут например: https://github.com/tretyakovsa/Sonoff_WiFi_switch все файлы в /data архивированы в .gz что дает вроде как браузеру пересылать немного меньше байтов. Теоретически должно повысить скорость загрузки страниц.
Хоть там тоже через currentClient.write(header.c_str(), header.length()) внутри библиотеки все делается, но всеже вдруг там какието оптимизаторы могли быть задействованы?
Плюс вот тут например: https://github.com/tretyakovsa/Sonoff_WiFi_switch все файлы в /data архивированы в .gz что дает вроде как браузеру пересылать немного меньше байтов. Теоретически должно повысить скорость загрузки страниц.
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server для esp8266
Я этот вопрос уже не первый раз поднимаю и никто из местных «профессионалов С и ассемблера» не может сказать ничего. А всего-то надо поправить библиотечную функцию. Замедление отдачи в сеть не на проценты и даже не в разы, а аж в 300 (!) раз.А библиотеку ESP8266WebServer.h не пробовали для сравнения?
И ещё раз призываю любителей микрочипа и загрузчиков показать свою квалификацию на деле.
Сам я утыкаюсь в функции в файле WiFiClient.cpp
Код: Выделить всё
virtual size_t write(const uint8_t *buf, size_t size);
size_t write_P(PGM_P buf, size_t size);
template <typename T>
size_t write(T& source, size_t unitSize);
Код: Выделить всё
template <typename T>
inline size_t WiFiClient::write(T& source, size_t unitSize) {
std::unique_ptr<uint8_t[]> buffer(new uint8_t[unitSize]);
size_t size_sent = 0;
while(true) {
size_t left = source.available();
if (!left)
break;
size_t will_send = (left < unitSize) ? left : unitSize;
source.read(buffer.get(), will_send);
size_t cb = write(buffer.get(), will_send);
size_sent += cb;
if (cb != will_send) {
break;
}
}
return size_sent;
}
Код: Выделить всё
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);
}
и просто не знаю в чём дело и куда копать дальше.
Замедление в 300 раз, Карл. Ещё раз призываю совместно решить эту проблему — в результате АМС на ESP8266 перестанет тормозить. И все же этим смогут воспользоваться.
-
- Сообщения: 792
- Зарегистрирован: Пт янв 22, 2016 10:08 am
- Благодарил (а): 6 раз
- Поблагодарили: 63 раза
Re: Arduino Mega Server для esp8266
вот такие конструкции while(true) всегда вызывают настороженность,бесконечный цикл попробуйте вставить туда отладочный код.
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server для esp8266
Сразу же вопрос: я попытался вставить отладочный маркер в функцию
компилятор его прекрасно проглотил, но в сериале ничего не выводится (в любом месте этой функции). Хотя тот же маркер прекрасно работает тут
Что это вообще такое и почему не работает отладка в первой функции?
Код: Выделить всё
template <typename T>
inline size_t WiFiClient::write(T& source, size_t unitSize) {
std::unique_ptr<uint8_t[]> buffer(new uint8_t[unitSize]);
size_t size_sent = 0;
while(true) {
size_t left = source.available();
if (!left)
break;
size_t will_send = (left < unitSize) ? left : unitSize;
source.read(buffer.get(), will_send);
size_t cb = write(buffer.get(), will_send);
size_sent += cb;
if (cb != will_send) {
break;
}
}
return size_sent;
}
Код: Выделить всё
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);
}
-
- Сообщения: 792
- Зарегистрирован: Пт янв 22, 2016 10:08 am
- Благодарил (а): 6 раз
- Поблагодарили: 63 раза
Re: Arduino Mega Server для esp8266
этому коду не передается управление(обычно по этому и не работает)Что это вообще такое и почему не работает отладка в первой функции?
может вы не правильно интерпретируете код?
а что это такое
template <typename T>
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server для esp8266
Это как раз я у вас хотел спроситьэтому коду не передается управление(обычно по этому и не работает)
может вы не правильно интерпретируете код?
а что это такое
template <typename T>

Что этому коду не передаётся управление — я тоже об этом думал, но другого кода для write в этой библиотеке нет!
Вы очень меня обяжете, если откроете файл WiFiClient.h и укажете, где всё-таки происходит передача строки клиенту.
-
- Сообщения: 792
- Зарегистрирован: Пт янв 22, 2016 10:08 am
- Благодарил (а): 6 раз
- Поблагодарили: 63 раза
Re: Arduino Mega Server для esp8266
а где их взять?
потому что это шаблон
а это настоящая функция
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);
}
видимо так
?Что это вообще такое и почему не работает отладка в первой функции
потому что это шаблон
а это настоящая функция
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);
}
видимо так