Ардуїно: швидші альтернативи digitalread () та digitalwrite ()?


13

Які найшвидші альтернативи виклику функцій Arduino digitalread()і digitalwrite()? Рішення, специфічні для AVR, або чіпи, прийнятні.


3
Читаючи це і ваше останнє запитання, здається, ви хочете зробити щось досить швидко. Я думаю, що детальну інформацію про те, що це таке, і як швидко може бути корисним.
Олі Глазер

@ Олі, гарна ідея, дякую. Поточний проект - це система налаштування RC-передавачів. Це добре працює, але я хотів би зробити декодування сигналу RC PWM ефективним, щоб я міг використовувати той самий фреймворк для інших проектів. Ось запис про те, що я мав досі: eastbay-rc.blogspot.com/2011/11/…
Марк Харрісон

Відповіді:


18

Доступ до цифрових портів безпосередньо!

Я перевірив 3 методи

  • digitalWrite (контактний, низький); digitalWrite (контактний, ВИСОКИЙ);
  • CLR (PORTB, 0); SET (PORTB, 0);
  • PORTB | = _BV (0); ПОРТБ & = ~ (_BV (0));

[...]

введіть тут опис зображення

Як бачимо, для цифрового написання цифрового протоколу потрібно близько 56 циклів, а пряма адресація порту займає 2 цикли. Це велика різниця у часі для програм, які мають багато операцій вводу-виводу!



2

Як було запропоновано вище, перейдіть до цифрових портів безпосередньо. Але зі стилем!

Записуючи жорстко закодовані значення безпосередньо в апаратні регістри, ви втрачаєте читабельність та портативність.

Я опублікував на Github інструмент, який я назвав HWA, який дозволяє використовувати об’єктно-орієнтований інтерфейс до обладнання, яке не потребує компілятора C ++ і виробляє двійковий код високої ефективності.

HWA є: https://github.com/duparq/hwa


1
"Бінарний код високої ефективності" звучить набагато авторитетніше разом із фактичними вимірюваннями.
Дмитро Григор’єв

2

Люди на Arduino.SE це вже обговорювали та перевіряли. Як виявляється, digitalWriteFast()покращення в порівнянні з регулярним не значно digitalWrite(). Однак прямий доступ до портів приблизно в 35-40 разів швидший, ніж digitalWrite().


0

Використовуйте ChipKit Uno32. Це набагато швидше, ніж Arduinos на базі AVR. Він також буде вирішувати ваші проблеми з тимчасовим терміном.


1
Я не думаю, що покупка швидшого обладнання є найкращою відповіддю тут, принаймні, поки ви не досягнете меж свого поточного обладнання та не вирішите, що вам потрібно щось швидше.
Джон L

1
Чому голоси? Він хотів якнайшвидшого рішення, а не просто швидшого, яке я забезпечив. Чи може хтось запропонувати швидше рішення на основі Arduino?
Леон Геллер

12
Тому що ChipKit - це не ардуїно, а сумісна з ардуїно платформа. Це означає, що хоча перемикання портів відбувається швидше, велика ймовірність переписати деякі бібліотеки. Бібліотеки Ethernet, XBee, SD карт можуть взагалі не працювати. Крім того, Марк спеціально просить альтернативні виклики функцій digitalRead / Write, а не для нової платформи (doh).
Ганс

2
Заміна апаратури ніколи не є хорошим рішенням. По крайней мере, ви пропустите гарне навчання і ніколи не дізнаєтесь, що було б ефективно використовувати обладнання.
Rick_2047

1
@ Rick_2047 Я б не сказав "ніколи" - якщо вимога нова або розширена або кількість збільшується, це може мати сенс шукати альтернативи. Але я погоджуюся з тим, що сліпо кидати апаратне забезпечення при грубій неефективності програмного забезпечення є непрофіційним - іноді це навіть не працює, оскільки системи більш високої продуктивності можуть додавати власні накладні витрати, а іноді і закінчуватися повільніше, ніж простіші для деяких завдань. Дійсно немає заміни для вивчення платформи, якою ви користуєтесь або плануєте використовувати.
Кріс Страттон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.