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.