Arduino işlevlerini çağıran en hızlı alternatifleri nelerdir digitalread()ve digitalwrite()? AVR'ye veya çipe özgü çözümler kabul edilebilir.
Arduino işlevlerini çağıran en hızlı alternatifleri nelerdir digitalread()ve digitalwrite()? AVR'ye veya çipe özgü çözümler kabul edilebilir.
Yanıtlar:
Dijital bağlantı noktalarına doğrudan erişin!
Test ettiğim 3 yöntem
- digitalWrite (pin, DÜŞÜK); digitalWrite (pin, YÜKSEK);
- CLR (PORTB, 0); SET (PORTB, 0);
- PORTB | = _BV (0); PORTB & = ~ (_BV (0));
[...]
Gördüğünüz gibi, digitalWrite'ın tamamlanması yaklaşık 56 döngü sürerken, doğrudan Bağlantı Noktası adreslemesi 2 döngü sürer. Çok fazla IO işlemi olan programlar için bu büyük bir zaman farkı!
Bu kütüphane iyi bir alternatiftir: http://code.google.com/p/digitalwritefast/
Yukarıda önerildiği gibi, dijital bağlantı noktalarına doğrudan erişin. Ama stil ile!
Sabit kodlanmış değerleri doğrudan donanım kayıtlarına yazarak okunabilirliği ve taşınabilirliği kaybedersiniz.
Github'da, C ++ derleyicisi gerektirmeyen ve yüksek verimli ikili kod üreten donanıma nesne tabanlı bir arabirim kullanmanızı sağlayan HWA adlı bir araç yayınladım.
HWA orada: https://github.com/duparq/hwa
Arduino.SE halkı bunu zaten tartıştı ve test etti. Anlaşıldığı üzere, digitalWriteFast()normalden daha fazla gelişme değil digitalWrite(). Bununla birlikte, doğrudan port erişimi yaklaşık 35-40 kat daha hızlıdır digitalWrite().
ChipKit Uno32'yi kullanın . AVR tabanlı Arduinos'dan çok daha hızlı. Ayrıca zamanlama sorunlarınızla ilgilenecektir.