• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Откуда-то берется левый код в веб-странице

Legion12

New member
Всем снова привет:(

Процесс засовывания веб-страницы в ESP у меня выглядит так:
Код:
const char mainPage[] PROGMEM = R"======(
//вебстраничка
)======";
Во время очередного теста прямо посреди кода веб-страницы вылез баг:
1586761548396.png


Обалдела, посмотрела в консоль через хром - прмо посреди кода вклинилось и вместе с кодом отправляется:

HTML:
       <canvas id = "lines3" width = "300" height = "4" style =" vertical-align: middle; margin: 0 auto; padding: 0;">
  <!--текст будет отображен только в том случае, если браузер пользователя не имеет поддержки элемента <canvas> -->
    Этот элемент не поддерживается. 
                           </canvas>
                <br>
#line 316 "D:\\Test_prog_v2\\Test_prog_v2.ino" function ShowMenu();
#line 349 "D:\\Test_prog_v2\\Test_prog_v2.ino" function grow();
#line 431 "D:\\Test_prog_v2\\Test_prog_v2.ino" function peakDraw();
#line 438 "D:\\Test_prog_v2\\Test_prog_v2.ino" function op();
#line 440 "D:\\Test_prog_v2\\Test_prog_v2.ino" function msg(e);
#line 466 "D:\\Test_prog_v2\\Test_prog_v2.ino" function btn_reset();
#line 481 "D:\\Test_prog_v2\\Test_prog_v2.ino" function button1Click();
#line 485 "D:\\Test_prog_v2\\Test_prog_v2.ino" function button2Click();
#line 489 "D:\\Test_prog_v2\\Test_prog_v2.ino" function button3Click();                
            <table style=" width:300px;">
Если разбирать что в строке, то:
#line 481 - указатель на строку кода в среде ардуино, соответствует действительности,

"D:\\Test_prog_v2\\Test_prog_v2.ino" - путь к файлу ардуино

function button1Click(); - функция внутри веб-страницы, которая на этой строке находится.

Причем с каждой новой прошивкой эти строки в разные места веб-страницы вставляются. Систему появления бага выявить не удалось, ни в пределах кода веб-страницы, ни в пределах кода программы для ESP, комбинации с другими веб-страницами (зачастую больше и объемнее) вызывают это от случая к случаю.

Кто-нибудь с таким сталкивался?...
 

Victor

Administrator
Команда форума
Кто-нибудь с таким сталкивался?...
попробуйте отключить все расширения браузера - возможно, что дополнительный код находится не в прошивке, а добавляется "на лету" каким-то расширением, они часто этим грешат, вставляя, например, рекламные блоки
 

Legion12

New member
попробуйте отключить все расширения браузера - возможно, что дополнительный код находится не в прошивке, а добавляется "на лету" каким-то расширением, они часто этим грешат, вставляя, например, рекламные блоки
Никакой связи, проверено на разных браузерах:((( Да и... откуда браузер знает строки кода из среды ардуины....
 

CodeNameHawk

Moderator
Команда форума
Похоже на наложение памяти, какой размер страницы, как выводиться и.т.д.
Выведите содержимое mainPage в Serial.
Попробуйте пересобрать в АрдуиноИде, если собираете не в нем.
 

Legion12

New member
Похоже на наложение памяти, какой размер страницы, как выводиться и.т.д.
Выведите содержимое mainPage в Serial.
Попробуйте пересобрать в АрдуиноИде, если собираете не в нем.
Можно немного подробнее - что такое "наложение" памяти?
Страница в виде html-файла - 23кб. Есть страница больше - 34кб, с ней такой проблемы по какой-то неведомой нет...
 

CodeNameHawk

Moderator
Команда форума
Например, в памяти расположены две переменные, допустим каждая длиною 100 байт.
И теперь при записи в первую переменную 150 байт, 50 байт окажутся во второй переменной.
Проверить длину данных - задача программиста.
 

Legion12

New member
Проблема решена... Косяк был в коде вебстраницы, в строчке подключения к вебсокету.

Вот при таком написании вылезал указанный баг:
JavaScript:
 var socket = new WebSocket('ws://192.168.11.4:91'); // подключение к веб-сокету ip:port
А вот так он покушал за милую душу, и проблема исчеза:
JavaScript:
 var address='ws://192.168.11.4:91';
 var socket = new WebSocket(address); // подключение к веб-сокету ip:port
Почему - не знаю. Кто расскажет - буду крайне признательна :(
 

NeoroN

Member
Проблема решена... Косяк был в коде вебстраницы, в строчке подключения к вебсокету.

Вот при таком написании вылезал указанный баг:
JavaScript:
 var socket = new WebSocket('ws://192.168.11.4:91'); // подключение к веб-сокету ip:port
А вот так он покушал за милую душу, и проблема исчеза:
JavaScript:
 var address='ws://192.168.11.4:91';
var socket = new WebSocket(address); // подключение к веб-сокету ip:port
Почему - не знаю. Кто расскажет - буду крайне признательна :(
Косяк был совсем в другом - в некорректной работе PROGMEM с заданной длинной вебстраницы, поменяли длинну вебстраницы, баг перестал проявляться, но не ушел. Еще раз поменяете - вернется.
Это отладочные строки из PROGMEM:
#line 489 "D:\\Test_prog_v2\\Test_prog_v2.ino" function button3Click();
 

Legion12

New member
Косяк был совсем в другом - в некорректной работе PROGMEM с заданной длинной вебстраницы, поменяли длинну вебстраницы, баг перестал проявляться, но не ушел. Еще раз поменяете - вернется.
Это отладочные строки из PROGMEM:
#line 489 "D:\\Test_prog_v2\\Test_prog_v2.ino" function button3Click();
Проверяла, неоднократно, с разными веб-страницами разной длины - бага нет, то есть абсолютно. Он не возникает посреди подгружаемой из PROGMEM страницы, если синтаксис такой, как указано.

Если строчка останется в виде:
JavaScript:
var socket = new WebSocket('ws://192.168.11.4:91'); // подключение к веб-сокету ip:port
то никакая другая корректировка страницы на объем кода не поможет.
 
Сверху Снизу