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.