@VadZher, спасибо за отклик. У меня Айфонов нет, так что в случае чего - даже проверить посмотреть не на чем.
Единственное отмечу:
- Для всех (почти всех) страниц алгоритмы и скрипты получения данных не менялись. При открытии страницы (таба) в устройство отправляется список параметров, чтьи значения хотелось бы получить. Далее сервер их отдает в сокет, который слушает браузер. Так что по большому счету ничего тут измениться не должно бы.. Может субъективное восприятие? Могу не отрисовывать элементы страницы, пока не получены значения для отображения. Но поскольку механизм то останется тот же - пауза будет в виде пустой страницы, только потом отображение с данными...
Страница с текстами. Ранее при загрузке страницы выполнялся запрос к контроллеру на получение каждой из 36 строк. Получили одну - запросили другую и так далее. Это могло затянуться секунд на 10, пока не получишь все строки, к тому же - для длинных строк требовало выделение больших буферов памяти, что либо приводило к ее фрагментации, либо просто память кончалась и происходила перезагрузка контроллера.
В последней версии все строки хранятся в файлах в папке, доступной по Web -- загрузка строк происходит обычным HTTP-запросом файлов, содержащих строки. На андроиде и на компе у этих запросов стоят заголовки no-cache, чтобы запрашивалась актуальная версия с контроллера, а не то что браузер сохранил в кэше. По-видимому айфоны (и сафари) - игнорируют все эти заголовки запроса данных не из кэша и отдают браузеру кэшированное содержимое - отсюда и "старые" версии содержимого строк.
Для сбора статистики - кто-нибудь еще заметил замедление загрузки страниц? По сравнению с какой версией?
- Про паузу перед отображением строки - пос сравнению с какой версией?
Вот, скажем, в версии 1.13 все строки хранились в EEPROM, суммарно все строки не могли быть длиннее примерно 2K.
Из EEPROM содержимое строки загружается практически мгновенно. К тому же, они просто хранились в оперативной памяти в буфере. Доступ мгновенный.
Потом кто-то захотел иметь длинные строки. Длинные строки в EEPROM не запихнешь, в памяти тоже особо не похранишь - ее всегда мало. Поэтому хранение самих строк было перенесено в файловую систему. Загрузка строки из файла занимает больше времени. К тому же операция синхронная. Поэтому пока контроллер открывает файл и читает его содержимое - ничего другого не выполняется. Эффект замирает.
Кстати, я у себя особо замираний не замечал. Но у меня вемос например на 160Mhz скомпилирован вместо стандартных 80MHz...
Далее следующий момент. Часть строк ограничена макросом {S} по времени, когда ее можно показывать. Поэтому загруженная строка проверяется и если ее не время отображать - загружается другая строка. Что тоже требует времени. Отсюда паузы перед отображением.
Есть идеи как это все организовать по другому? Держа в уме при этом ограниченный размер оперативной памяти?
Ну, разве что, для ESP32, где памяти поболее - все же кэшировать их в оперативную память... Подумаю над этим моментом...
Про рисование - у меня всё отображается точно. Даже на телефоне, где сетка рисуется мелко, и то примерно тык пальцем и отображение на матрице попадает именно в то место, куда хотел. А у вас при этом - точка на экране соответствует точке, зажигаемой на матрице? Или на экране в одном месте, а на матрице - со сдвигом? Хотя по коду такое, думаю, невозможно...
А если матрица маленькая и клеточки на страничке крупные - касание попадает в желаемую или все равно сдвиг? Может на айфонах с калибровкой экрана что-то не то и координаты касания передаются со смещением?
А есть возможность к этому устройству как-то подключить мышку и тыкать ее острым кончиком стрелки в нужную клетку? Соответствует позиция куда тыкали позиции, которая закрасилась?
Никогда не куплю себе айфон и продукцию эппл. Судя по многочисленным отзывам в моем окружении - глюкалово то еще. Единственное о чем хорошие отзывы - камера...
Это вам еще повезло, что контроллер стабильно, как вы говорите работает.
Я у себя не могу побороть проблему. Проявляется по разному на разных экземплярах контроллеров. И в зависимости от условий компиляции скетча тоже.
Может проявиться - после старта прошивки в демо-режим может отсутствовать вывод на матрицу - мерцать только первый диод на матрице на всех эффектах. Но если запустить бегущую строку - на время её показа отображение на матрице нормализуется. Пробежала - опять всё замерло.
А может такое проявиться только на некоторых эффектах. На всех все показывается, только к примеру "Мерцание" - только первый светодиод мигает...
А может наоборот - все эффекты показываются нормально, но на отображении некоторых бегущих строк (только некоторых!). все замирает и начинает мерцать первый диод. Вот заметил что в этих строках макрос {D} или {S}. Хотя некоторые строки с макросом {S} в комбинации с {R} отображаются без проблем.
А может наоборот - все строки отображаться нормально кроме строки с макросом {R}.
Я уже голову сломал не могу осознать причину поведения.
Можно вставить несколько пустых строк в коде и пересобрать прошивку - и проблема уйдет. А может и не уйдет.
Можно вставить какой-нибудь пустой не нужный оператор типа String s; s.reserve(20); и проблема уйдет. А может и не уйдет.А можно просто взять кусочек кода, и поменять его местами с другим никак не связанным кусочком кода - просто поменять их местами, передвинув на 10 строк выше/ниже. И проблема уйдет. Можно изменить какое-нибудь значение настроек компиляции в меню "Инструменты". Например поставить "С++ Exception" в 'Enabled'. Или "Stack protection" в "Enabled". Тоже может изменить вышеописанное поведение...
Еще встречал (с бегущей строкой) - есть функция в коде для ее отображения на матрицу, и в ней некоторая последовательность строк кода - все работает ровненько. Потом берем эти несколько строк и переносим в функцию. Там где были строки вызываем эту функцию. Параметров у функции нет. Всё. Дикие тормоза, рывки в бегущей строке.
Чего-то я не понимаю в программировании микроконтроллеров...
Поэтому - соберете прошивку - проверяйте каждый эффект, каждую строку - работает ли, не зависает ли и так далее.
Я не знаю что с этим делать. Та же бегущая строка - у кого-то плавно, у кого-то дергается.
Более того у меня - сегодня все работает плавно. Завтра включишь тот же контроллер, ничего не меняя, прошивку не обновляя, всё как было вчера. Только строка бежит с подергиваниями. Послезавтра может снова нормально все быть... Причин не знаю...
Вот - свежий пример. Контроллер работает несколько часов. Не перегружался.Строки с макросом {D} и{S} - не отображаются. Мигает только первый светодиод. Прошла еще пара часов. Строки с макросами {D}и{S} стали прекрасно отображаться, как и все прочие строки...