Страница 93 из 119
Re: Arduino Mega Server для esp8266
Добавлено: Сб сен 02, 2017 11:05 pm
serghei
Вот и я про то же. Редко , но бывает карту передергиваю несколько раз в гнезде, пока запустится. AMS стартует всегда , только когда открываю страницы , на второй зависает. На Дуе постоянно открыты две сразу и никогда не отваливается.
Во вторник заберу еще две платы с батарейкой ( 75 дней летела в самолете , я про неё уже и забыл). Но это уже в своей теме продолжу.
Re: Arduino Mega Server для esp8266
Добавлено: Вс сен 03, 2017 10:37 am
Alex
Удалось запустить SD карту, обсуждение ESP32 перенёс в соответствующую тему
viewtopic.php?f=19&t=4032&p=58856#p58856
Re: Arduino Mega Server для esp8266
Добавлено: Вт сен 19, 2017 1:21 am
Alex
Актуальный вопрос с тормознутостью сетевой работы ESP8266. Кто-нибудь может объяснить почему функция
Код: Выделить всё
cl.write(s.c_str());
cl.write(s.c_str(), s.length());
на ESP8266 работает со скоростью примерно 200 Б/с, то есть в 300 (!) раз медленнее чем на других контроллерах?
А функция
Вообще тормозит так, что её невозможно использовать?
Понятно, что эти функции криво написаны, но как это лечить?
Re: Arduino Mega Server для esp8266
Добавлено: Вт сен 19, 2017 1:20 pm
dmw
А библиотеку ESP8266WebServer.h не пробовали для сравнения?
Хоть там тоже через currentClient.write(header.c_str(), header.length()) внутри библиотеки все делается, но всеже вдруг там какието оптимизаторы могли быть задействованы?
Плюс вот тут например:
https://github.com/tretyakovsa/Sonoff_WiFi_switch все файлы в /data архивированы в .gz что дает вроде как браузеру пересылать немного меньше байтов. Теоретически должно повысить скорость загрузки страниц.
Re: Arduino Mega Server для esp8266
Добавлено: Вт сен 19, 2017 1:50 pm
Alex
А библиотеку ESP8266WebServer.h не пробовали для сравнения?
Я этот вопрос уже не первый раз поднимаю и никто из местных «профессионалов С и ассемблера» не может сказать ничего. А всего-то надо поправить библиотечную функцию. Замедление отдачи в сеть не на проценты и даже не в разы, а аж в 300 (!) раз.
И ещё раз призываю любителей микрочипа и загрузчиков показать свою квалификацию на деле.
Сам я утыкаюсь в функции в файле 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 перестанет тормозить. И все же этим смогут воспользоваться.
Re: Arduino Mega Server для esp8266
Добавлено: Вт сен 19, 2017 2:41 pm
alexsis_76
вот такие конструкции while(true) всегда вызывают настороженность,бесконечный цикл попробуйте вставить туда отладочный код.
Re: Arduino Mega Server для esp8266
Добавлено: Вт сен 19, 2017 2:48 pm
Alex
Сразу же вопрос: я попытался вставить отладочный маркер в функцию
Код: Выделить всё
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);
}
Что это вообще такое и почему не работает отладка в первой функции?
Re: Arduino Mega Server для esp8266
Добавлено: Вт сен 19, 2017 3:00 pm
alexsis_76
Что это вообще такое и почему не работает отладка в первой функции?
этому коду не передается управление(обычно по этому и не работает)
может вы не правильно интерпретируете код?
а что это такое
template <typename T>
Re: Arduino Mega Server для esp8266
Добавлено: Вт сен 19, 2017 3:13 pm
Alex
этому коду не передается управление(обычно по этому и не работает)
может вы не правильно интерпретируете код?
а что это такое
template <typename T>
Это как раз я у вас хотел спросить

Я так понимаю, что это шаблон для подстановки любого типа во входные параметры функции.
Что этому коду не передаётся управление — я тоже об этом думал, но другого кода для write в этой библиотеке нет!
Вы очень меня обяжете, если откроете файл WiFiClient.h и укажете, где всё-таки происходит передача строки клиенту.
Re: Arduino Mega Server для esp8266
Добавлено: Вт сен 19, 2017 3:19 pm
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);
}
видимо так