Які найшвидші альтернативи виклику функцій 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. Він також буде вирішувати ваші проблеми з тимчасовим терміном.