Почему ESP8266 медленнее, чем Arduino nano?
Я использую один и тот же скрипт (и только стандартную проводную и последовательную библиотеку), один из которых загружен в Arduino nano, а другой — в ESP8266. Однако, несмотря на то, что ESP8266 работает на частоте 160 МГц, что в 10 раз быстрее, чем nano, для завершения цикла требуется 3,5 мс, по сравнению с 2,5 мс, чем у nano.
Как такое могло быть? почему ESP8266 был медленнее?
1 ответ
Лучший ответ:
Однако, несмотря на то, что ESP8266 работает на частоте 160 МГц, что в 10 раз быстрее, чем nano, для завершения цикла требуется 3,5 мс, тогда как у nano – 2,5 мс.
На это есть ряд причин. Главное:
- В ESP8266 нет аппаратного обеспечения I2C, поэтому для эмуляции I2C приходится использовать программный «бит-бэнг». Это медленнее для выполнения.
- ESP8266 также должен управлять оборудованием Wi-Fi, что отнимает часть вычислительной мощности от пользователя.
В результате операции I2C выполняются медленнее, а временные интервалы циклов и т. д. добавляются к "джиттеру".
произойдет ли то же самое (провод) с esp32?
Нет (или не так много). ESP32 имеет аппаратный I2C, поэтому для его эмуляции не нужно использовать бит-бэнг, поэтому он будет быстрее. Кроме того, он двухъядерный, и одно ядро используется для «управления системой», включая управление Wi-Fi и Bluetooth, а второе ядро используется для выполнения вашего скетча, поэтому прерывания не происходит (или мало1). из-за того, что Wi-Fi замедляет работу скетча.
1. Два ядра, обращающиеся к одной и той же области ОЗУ, вызывают некоторую конкуренцию, поскольку только одно ядро может получить доступ к одному и тому же блоку ОЗУ одновременно, поэтому это не идеально. Вы все равно можете получить небольшие задержки, но они будут незначительными по сравнению с обработкой, необходимой для кода WiFi ESP8266.
- Что быстрее на esp8266: 64-битная математика или математика с плавающей запятой?
- ESP8266-01 неправильные настройки управления потоком
- Как читать и записывать EEPROM в ESP8266
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Как заставить 5-вольтовое реле работать с NodeMCU
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
- ESP8266 не подключается к Wi-Fi
Это зависит от того, что делает скрипт. На практике 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