Почему ESP8266 медленнее, чем Arduino nano?

Я использую один и тот же скрипт (и только стандартную проводную и последовательную библиотеку), один из которых загружен в Arduino nano, а другой — в ESP8266. Однако, несмотря на то, что ESP8266 работает на частоте 160 МГц, что в 10 раз быстрее, чем nano, для завершения цикла требуется 3,5 мс, по сравнению с 2,5 мс, чем у nano.

Как такое могло быть? почему ESP8266 был медленнее?

, 👍1

Обсуждение

Это зависит от того, что делает скрипт. На практике ESP8266 почти всегда будет быстрее. Исключением может быть I2C (библиотека Wire, как в вашем тесте). Процессор Arduino Nano AVR имеет аппаратную поддержку I2C; ESP8266 должен использовать гораздо более медленный метод «битового удара»., @StarCat

@StarCat, произойдет ли то же самое (провод) с esp32?, @ShoutOutAndCalculate

Это зависит. Пожалуйста, покажите нам код., @the busybee

@ShoutOutAndCalculate, ESP32 имеет аппаратную поддержку I2C, поэтому он должен работать быстрее., @StarCat

@StarCat Спасибо! Так что мне не нужно будет делать подтягивающий резистор на ESP 32, как у ESP 8266, верно?, @ShoutOutAndCalculate

Вы можете использовать внутренние подтяжки, но, по общему мнению, они слишком слабы для быстрой работы I2C и что внешние подтяжки лучше (около 4,7 кОм)., @StarCat


1 ответ


Лучший ответ:

3

Однако, несмотря на то, что ESP8266 работает на частоте 160 МГц, что в 10 раз быстрее, чем nano, для завершения цикла требуется 3,5 мс, тогда как у nano – 2,5 мс.

На это есть ряд причин. Главное:

  1. В ESP8266 нет аппаратного обеспечения I2C, поэтому для эмуляции I2C приходится использовать программный «бит-бэнг». Это медленнее для выполнения.
  2. ESP8266 также должен управлять оборудованием Wi-Fi, что отнимает часть вычислительной мощности от пользователя.

В результате операции I2C выполняются медленнее, а временные интервалы циклов и т. д. добавляются к "джиттеру".

произойдет ли то же самое (провод) с esp32?

Нет (или не так много). ESP32 имеет аппаратный I2C, поэтому для его эмуляции не нужно использовать бит-бэнг, поэтому он будет быстрее. Кроме того, он двухъядерный, и одно ядро используется для «управления системой», включая управление Wi-Fi и Bluetooth, а второе ядро используется для выполнения вашего скетча, поэтому прерывания не происходит (или мало1). из-за того, что Wi-Fi замедляет работу скетча.


1. Два ядра, обращающиеся к одной и той же области ОЗУ, вызывают некоторую конкуренцию, поскольку только одно ядро может получить доступ к одному и тому же блоку ОЗУ одновременно, поэтому это не идеально. Вы все равно можете получить небольшие задержки, но они будут незначительными по сравнению с обработкой, необходимой для кода WiFi ESP8266.

,