Які найшвидші альтернативи виклику функцій Arduino digitalread()і digitalwrite()? Рішення, специфічні для AVR, або чіпи, прийнятні.
Які найшвидші альтернативи виклику функцій Arduino digitalread()і digitalwrite()? Рішення, специфічні для AVR, або чіпи, прийнятні.
Відповіді:
Доступ до цифрових портів безпосередньо!
Я перевірив 3 методи
- digitalWrite (контактний, низький); digitalWrite (контактний, ВИСОКИЙ);
- CLR (PORTB, 0); SET (PORTB, 0);
- PORTB | = _BV (0); ПОРТБ & = ~ (_BV (0));
[...]
Як бачимо, для цифрового написання цифрового протоколу потрібно близько 56 циклів, а пряма адресація порту займає 2 цикли. Це велика різниця у часі для програм, які мають багато операцій вводу-виводу!
Ця бібліотека є хорошою альтернативою: http://code.google.com/p/digitalwritefast/
Як було запропоновано вище, перейдіть до цифрових портів безпосередньо. Але зі стилем!
Записуючи жорстко закодовані значення безпосередньо в апаратні регістри, ви втрачаєте читабельність та портативність.
Я опублікував на Github інструмент, який я назвав HWA, який дозволяє використовувати об’єктно-орієнтований інтерфейс до обладнання, яке не потребує компілятора C ++ і виробляє двійковий код високої ефективності.
Люди на Arduino.SE це вже обговорювали та перевіряли. Як виявляється, digitalWriteFast()покращення в порівнянні з регулярним не значно digitalWrite(). Однак прямий доступ до портів приблизно в 35-40 разів швидший, ніж digitalWrite().
Використовуйте ChipKit Uno32. Це набагато швидше, ніж Arduinos на базі AVR. Він також буде вирішувати ваші проблеми з тимчасовим терміном.