Soru:
I2C için Tel kitaplığına alternatifler
fuenfundachtzig
2015-05-10 01:50:08 UTC
view on stackexchange narkive permalink

Wire kitaplığına alternatifler (kullanımı oldukça kolay ve iyi test edilmiş) arıyorum. Wire çok iyi çalışıyor, ancak: Sadece Arduino'nun I2C yöneticisi olarak hareket etmesine ihtiyacım var ve Wire kitaplığı gerçek bir kaynak israfı gibi görünüyor:

Amacım blok halinde veri göndermek (örneğin 32 veya 64 bayt). Bu veriler zaten SRAM'de bir dizide bulunuyor. Artık Wire kitaplığını kullandığınızda, verilerinizi 2. bir arabelleğe kopyalayan TwoWire :: write işlevini çağırırsınız. Daha sonra Wire , twi_writeTo 'un verileri tekrar 3. bir arabelleğe kopyaladığı TWI kitaplığını kullanır. Bu biraz hantal, değil mi?

DSSCircuits / I2C-Master-Library 'yi gördüm ama ne kadar olgun olduğundan emin değilim çünkü henüz şu anda 3 yaşında olan ilk kaydetmeden sonraki tüm taahhütler.

Gerçekten ram kullanım problemleriniz mi var? Bir şeyi sorun haline gelmeden optimize etmek genellikle boşa harcanan bir çabadır.
Her şey, * yakında * ve / veya * taşınabilir şekilde * çalışmasını istemekle * en iyi şekilde * çalışmasını istemekle ilgilidir. Elbette ATmega programcı kılavuzunu almakta ve çevre birim kayıtlarına kendiniz yazmakta özgürsünüz.
dsscircuits'in [Arduino I2C ana kitaplığı] (http://www.dsscircuits.com/articles/86-articles/66-arduino-i2c-master-library) web sayfası, github bağlantınızın kullanıldığı I2C kitaplığının beş revizyonunu gösterir. Muhtemelen aklınızdaki revizyonlar için iyi bir başlangıç ​​noktasıdır. Wire, Ocak 2012'den beri düzeltmeler yaptıysa, bunları I2C'ye eklemeniz gerekebilir.
> I2C için Wire kitaplığına alternatifler kendiniz yazın. i2c, sıfırdan yazılması en kolay protokollerden biridir.
Beş yanıtlar:
Nick Gammon
2015-08-22 10:51:40 UTC
view on stackexchange narkive permalink

DSS Circuits I2C Master Library kullanmak konusunda herhangi bir itiraz görmüyorum.

Birkaç yıldır güncellenmemiş olabilir, ancak çalışırsa, Olmasına gerek yok. Mikro denetleyiciler için kitaplıkların yeni yazıcı sürücülerini, video sürücülerini vb. Desteklemesi gerekmiyor gibi değil.

Çalışırsa çalışır.

Çip değişmemiştir ve Bu günlerde güncellemelerin tek gerçek nedeni, IDE'nin derleme hataları ortaya çıkaracak şekilde değişmesidir (veya derleyici değişir). Örneğin, PROGMEM gibi daha sıkı kurallara sahipken bu tür şeyler oldukça yakın zamanda gerçekleşti.

Bu kütüphane çok umut verici görünüyordu, ancak yalnızca AVR hedeflerini desteklediğini unutmayın. Arduino çekirdekleri çeşitli mimariler için geliştirildiğinden, bu kütüphane herhangi bir Arduino uyumlu kart için "sadece çalışmayacaktır". Örneğin, Adafruit'un STM32F405 tabanlı Tüy ile ** uyumlu değildir **
Mikael Patel
2015-12-20 16:18:30 UTC
view on stackexchange narkive permalink

Cosa TWI sınıfı, I2C aygıt sürücüsü desteğine çok farklı bir yaklaşımdır. Tamponlar için herhangi bir ekstra SRAM kullanmaz. Bir aygıt sürücüsü engellemiyorsa, gerekli arabelleğe alma işlemini gerçekleştirmelidir. Ayrıca Cosa TWI sınıfı, master / slave gibi I2C cihazlarıyla tipik etkileşimi destekler, "yazma yazmacı-okuma verileri" modelleri ve çoklu iş parçacığı kullanılırken işlemler.

Bir yazılım ve donanım Arduino-TWI kitaplığı mevcuttur. Arduino-GPIO kütüphanesini kullanır ve AVR ve SAM tabanlı kartlarda kullanılabilir.

Bazı örnekler: TWI Tarayıcı, DS3231 Gerçek Zamanlı Saat / Takvim, I2C LCD Adaptörü, PCF8574 ile.

Flanker
2016-03-19 21:17:54 UTC
view on stackexchange narkive permalink

Ayrıca Procyon AVR kitaplığı da kontrol edilmeye değer. Şimdi biraz eski ama çok profesyonel ve biraz minimalist. Çok fazla bağımlılık yok, sadece I2C modülünü kullanmak iyi olmalı. O zamandan beri AVR I2C bölümünde yeni hiçbir şey yok.

SMFSW
2017-03-15 21:58:54 UTC
view on stackexchange narkive permalink

Daha kolay kullanım ve tutarlı aramalar için kendim 2 kitaplık yaptım:

AVR hedefleri için biri:
cI2C

aynı işlevleri kullanan bir başkası diğer tüm hedefler için (temelde Wire kitaplığı için bir sarmalayıcıdır):
WireWrapper

Her ikisi de IDE kitaplık yöneticisi içinde mevcuttur.
İkisi de ana olarak çalışır kesme kullanmadan ve farklı bağımlı birimlerle farklı hedeflerde test edilmiştir:
- UNO, Nano for cI2C
- Zero, Due & ESP8266 for WireWrapper

Damago
2017-11-22 04:35:41 UTC
view on stackexchange narkive permalink

En çok sorulan soru için tamamen farklı bir yaklaşım kullanabilirsiniz. Alternatifleri sormak için buna sebep verdiniz: ikili dosyada kullanılmayan kodlardan kurtulmak. Kullanılmayan kodu gerçekten alternatif kitaplık kullanmadan kaldırabilirsiniz. Derleyiciye ve bağlayıcıya kullanılmayan kodu derlenmiş ikiliden hariç tutmaları için talimat verebileceğinizi lütfen unutmayın. Yalnızca derleme işaretlerini kullanın:

  CFLAGS + = -Wl, -staticCFLAGS + = -fonksiyon-sectionCFLAGS + = -Wl, - gc-section  

Rach işlevi kendi bölümünde olacaktır.

  LDFLAGS + = -Wl, -gc-bölümler  

Bu, GCC'ye -gc-bölümler bayrağını kullanılmayan bölümleri kaldıracak olan bağlayıcıya göndermesini söyler. Ve voilla! Kullanılmayan bölümler kaldırılır.



Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...