Jakie są najszybsze alternatywy dla wywoływania funkcji Arduino digitalread()
i digitalwrite()
? Dopuszczalne są rozwiązania specyficzne dla AVR lub chipów.
Jakie są najszybsze alternatywy dla wywoływania funkcji Arduino digitalread()
i digitalwrite()
? Dopuszczalne są rozwiązania specyficzne dla AVR lub chipów.
Odpowiedzi:
Uzyskaj bezpośredni dostęp do portów cyfrowych!
Testowałem 3 metody
- digitalWrite (pin, LOW); digitalWrite (pin, WYSOKI);
- CLR (PORTB, 0); ZESTAW (PORTB, 0);
- PORTB | = _BV (0); PORTB & = ~ (_BV (0));
[...]
Jak widać, digitalWrite zajmuje około 56 cykli, a bezpośrednie adresowanie portów zajmuje 2 cykle. To duża różnica w czasie dla programów, które mają dużo operacji IO!
Ta biblioteka jest dobrą alternatywą: http://code.google.com/p/digitalwritefast/
Jak sugerowano powyżej, uzyskaj bezpośredni dostęp do portów cyfrowych. Ale ze stylem!
Zapisując na stałe wartości bezpośrednio w rejestrach sprzętowych, tracisz czytelność i przenośność.
W Github opublikowałem narzędzie, które nazwałem HWA, które pozwala na użycie zorientowanego obiektowo interfejsu do sprzętu, który nie wymaga kompilatora C ++ i wytwarza wysokowydajny kod binarny.
Jest tam HWA: https://github.com/duparq/hwa
Ludzie z Arduino.SE już to omówili i przetestowali. Jak się okazuje, digitalWriteFast()
poprawa jest niewielka w porównaniu do zwykłych digitalWrite()
. Bezpośredni dostęp do portu jest jednak około 35-40 razy szybszy niż digitalWrite()
.
Użyj ChipKit Uno32. Jest znacznie szybszy niż Arduinos oparte na AVR. Zajmie się również twoimi problemami z czasem.