Неужели библиотека Arduino такая медленная?
У меня есть план управлять модулем камеры 5MP с помощью arduino Due. Но мне интересно, смогу ли я использовать библиотеки arduino, которые включают digitalRead, digitalWrite и т. д. Но некоторые люди говорят, что это плохая идея. В частности, я обнаружил, что люди записывали значения в регистры вместо использования библиотеки, когда они управляли ov7670 с помощью Uno.
Вопреки этому, ArduCam использует библиотеки, даже для OV5642!. Вот ссылка https://github.com/ArduCAM/Arduino/blob/master/ArduCAM/examples/mini/ArduCAM_Mini_OV5642_Video_Streaming/ArduCAM_Mini_OV5642_Video_Streaming.ino
Так что, может ли кто-нибудь дать мне знать, нормально ли использовать такую библиотеку и никогда не использовать регистр напрямую? Под «регистром» я подразумеваю регистр ардуино, а не камеры.
Я предполагаю, что системные часы и существование FIFO повлияют на ответ. Но я все еще не знаю, как оценить их влияние аналитически.
@Nownuri, 👍0
Обсуждение2 ответа
Если у вас нет действительно большого количества операций чтения/записи и очень жестких временных ограничений, я сомневаюсь, что вы получите какое-либо существенное преимущество в плане скорости.
Одновременный доступ к битам в порту, а не по отдельности, безусловно, более эффективен как с точки зрения времени, так и пространства, но это может ухудшить читаемость в зависимости от того, насколько вам комфортно отказаться от библиотек Arduino.
Вы также можете взглянуть на эту ветку.
Обратите внимание, что максимальный выигрыш достигается только тогда, когда все контакты, которые вам нужно прочитать или записать, принадлежат одному и тому же регистру.
Вы можете использовать ЛЮБУЮ и ВСЕ библиотеки (если их ЛИЦЕНЗИИ это позволяют) или вообще не использовать ни одной библиотеки.
Важнее то, соответствует ли результат вашим требованиям.
Для некоторых видов задач даже очень медленная библиотека достаточно быстра. Для некоторых видов задач может справиться только высокооптимизированная библиотека. Некоторые задачи настолько сложны, что ни один Arduino не сможет их решить даже при максимальных усилиях и полной оптимизации кода и аппаратных ресурсов. (Ну, для некоторых задач даже лучшие современные суперкомпьютеры недостаточно хороши)
Многое зависит от того, что именно вы планируете делать с такой камерой - если вам нужны простые элементы управления (вроде START, STOT, изменение чувствительности...), возможно, подойдет что угодно. Если же вы хотите создать автономную систему, управляемую системой Vison, которая будет учиться на опыте и распознавать все выражения вашего лица, то Arduino с необходимой вычислительной мощностью вообще не существует.
Просто попробуйте найти любой проект, отдаленно похожий на ваш, посмотрите, что они используют и что они говорят об этом (отлично, едва пригодно, мы посчитали это невозможным) и попробуйте библиотеку/подход, основанный на этом. Если это как-то работает, сделайте это лучше и тоже станьте знаменитостью :) Если это вообще не работает и не дает никаких полезных результатов, возможно, попробуйте что-то другое.
Многое можно сделать, если расширить возможности Arduino с помощью внешних модулей (коммерческих или самодельных), будь то в виде шилда или в виде совершенно другой платформы.
- Как получить исходные файлы для библиотек Arduino?
- Ошибка: "недопустимое использование нестатической функции-члена" при вызове функции из моего собственного класса-метода
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Существуют ли библиотеки сглаживания сигналов для Arduino?
- Wire.h не найден!
- Датчик Arduino Uno DHT11 Не удалось прочитать данные с датчика DHT
- Библиотека FastLED: Как настроить яркость одного пикселя в абсолютном масштабе?
- Как эта строка кода определяет, подключен ли последовательный интерфейс?
Я не вижу в этой библиотеке никаких вызовов digitalWrite., @Gerben