Стал искать информацию по ускорению работы esp8266 и никакой информации не нашел. Стал копать глубже и нашел информацию о том что можно заменить digitalWrite() записью в порт например PORTA=B00001010 но это на ардуино.... Вот и у меня возник вопрос.... можно както разогнать esp8266 аналогичными действиями?
Всё можно. Скорость GPIO (и его контроллера) ограничена внутренней шиной ESP8266 тактируемой от кварца (26 MHz). На шине работает FIFO. При передаче кодов управления регистрами GPIO процессор успевает сделать несколько тактов (исполнить более 6 команд на asm при 160 MHz) пока отрабатывает только очередь FIFO шины. Сам контролер GPIO тоже тактируется низкой частотой и имеет разные времена отрабатывания команд записи непосредственно в выходной регистр или в регистры Set/Clear оперирующими с уже выходным регистром управления пинами.
По умолчанию компилятор, при обращении к volatile переменным (с ней объявлены все обращения к портам в ESP8266) вставляет команду memw, которая ждет завершений/опустошений FIFO и операций кэша, но процессорного кеша команд у ESP8266 нет
(есть буфер в IARM для работы c последовательной Flash, названный в постонародии так-же - "кэшем", но это совершенно другой "кэш"). Т.е. эта команда просто тормозит работу в случае ESP8266 и сильно увеличивает размер кода, да время отработки во всех драйверах. У компилятора есть опция отключения автоматической вставки данной команды.
Частично, по ранее собранным данным вот тут автор дает замеры I/O операций:
ESP8266 GPIO output performance « collector {dt.:Sammler} |
Но там автор не всё собрал и разобрал... На форуме есть и более точные, уточняющие измерения и что надо проделать, чтобы ускорить работу операций с GPIO.
Но всё это не для Arduino поклонников и давалось несколько лет назад.
Концепция Arduino IDE для ESP8266 не рассчитывает на качество и скорость - её задачи другие и ограничены медленными операциями, типа переключения светодиода или лампочки один раз в секунду.
2. Выполнение функции digitalWrite() занимает 5 микросекунд.
Это зависит и от "кеша" контроллера Flash. Первое обращение к функциям в flash происходит с задержкой на чтение Flash в буфер "кэша" IRAM. И если у вас ещё вставлены медленные установки для Flash, типа DIO и 40 MHz, то может выйти и больше 5 мкс, вместо вполне возможных и реализуемых коммутаций пинов с дискретностью в 26 MHz контроллером GPIO в ESP8266 (но это не для Arduino IDE).
Для более быстрых шевелений GPIO используют не медленный GPIO контролер, а SPI или I2S. Там уже ограничения строба переключения пина к сотне MHz.
На то есть примеры генерации видео сигнала с модуляцией на FM частоте канала около 100 MHz телевидения на GPIO ESP8266, как и обработка считывания и передачи на пинах ESP8266 сигналов USB1.1
Чтобы этого достичь, необходимо отказаться от концепций Arduino.
Ну а т.к. ардуинщики привыкли к кормлению самыми ужасными реализациями кода и библиотек, то вы не в том разделе задаете такие вопросы. Тем более паровоз ESP8266 уже ушел давно на свалку истории, никто из более грамотных не будет ничего переписывать в Arduino IDE.
Эта возможность предоставляется вам, в качестве обучения, т.к. всё необходимое уже описано и разобрано ранее, но никому из более грамотных разработчиков не потребовалось и не потребуется Arduino, тем более на устаревший чип.