Caut alternative (rezonabil de ușor de utilizat și bine testate) la Wire
biblioteca. Wire
funcționează foarte bine, dar: Am nevoie doar de Arduino pentru a acționa ca master I2C și biblioteca Wire
pare a fi o adevărată risipă de resurse:
Scopul meu este să trimit date în bloc (de exemplu, 32 sau 64 de octeți). Aceste date se află deja într-o matrice în SRAM. Acum, când utilizați biblioteca Wire
, apelați funcția TwoWire::write
care vă copiază datele într-un al doilea buffer. Ulterior, Wire
folosește biblioteca TWI
unde twi_writeTo
copiază din nou datele într-un Al treilea tampon. „E cam ciudat, nu-i așa?
Am văzut DSSCircuits / I2C-Master-Library , dar nu sunt sigur cât de matur este, deoarece nu a existat nici un commit după commit inițial, care are acum 3 ani.
Comentarii
- Chiar ai probleme de utilizare a ramului? Optimizarea ceva înainte de a deveni o problemă este adesea un efort irosit.
- Totul se rezumă la întrebarea de a dori să-l facă să funcționeze în curând și / sau portabil vs dorind să-l facă să funcționeze optim . Desigur, sunteți liber să obțineți manualul ATmega programator ' și să scrieți la periferic vă înregistrați.
- dsscircuits ' pagina web Arduino I2C master afișează cinci revizuiri ale I2C bibliotecă pentru care este linkul dvs. github. Probabil este un punct de plecare ok pentru reviziile pe care le aveți în minte. Dacă Wire a avut corecții din ianuarie 2012, s-ar putea trebuie să le adăugați la I2C.
- > Alternative la biblioteca Wire pentru I2C scrieți-vă propria dvs. i2c este unul dintre protocoalele mai ușor de scris de la zero.
Răspuns
Nu văd nicio obiecție la utilizarea Biblioteca masteră DSS Circuits I2C .
Este posibil să nu fi fost actualizată de câțiva ani, dar dacă funcționează, nu funcționează ” Nu trebuie să fie. Nu este ca și cum bibliotecile pentru microcontrolere ar trebui să accepte noi drivere de imprimantă, drivere video etc.
Dacă funcționează, funcționează.
Cipul nu s-a schimbat , și singurul motiv real pentru actualizări în aceste zile este dacă IDE se modifică (sau se modifică compilatorul) în așa fel încât să introducă erori de compilare. Astfel de lucruri s-au întâmplat destul de recent cu lucruri precum PROGMEM care are reguli mai stricte, de exemplu.
Comentarii
- Această bibliotecă părea foarte promițătoare, dar rețineți că da acceptă doar ținte AVR. Deoarece nucleele Arduino au fost dezvoltate pentru o varietate de arhitecturi, această bibliotecă nu va " funcționa doar " pentru orice placă compatibilă Arduino. De exemplu, este nu compatibil cu Adafruit ' Feather bazat pe STM32F405
Răspuns
De asemenea, merită verificat biblioteca AVR Procyon . Acum este cam vechi, dar foarte profesional și cam minimalist. Nu prea multe dependențe, ar trebui să fie bine să folosiți doar modulul I2C. De atunci, nu există nimic nou în partea AVR I2C.
Răspuns
Clasa Cosa TWI este o abordare foarte diferită a suportului pentru driverul de dispozitiv I2C. Nu folosește deloc SRAM suplimentar pentru buffere. Dacă un driver de dispozitiv nu este blocant, acesta trebuie să gestioneze tamponarea necesară. De asemenea, clasa Cosa TWI acceptă interacțiunea tipică cu dispozitivele I2C, cum ar fi master / slave, „scrie date de citire a registrului” – modele și tranzacții atunci când se utilizează multi-threading.
Este disponibil un software și hardware biblioteca Arduino-TWI . Folosește biblioteca Arduino-GPIO și poate fi utilizat pe plăci bazate pe AVR și SAM.
Câteva exemple: Scanner TWI , DS3231 Ceas / Calendar în timp real , Adaptor LCD I2C cu PCF8574 .
Răspuns
Am făcut eu două libere pentru o utilizare mai ușoară și apeluri constante:
una pentru țintele AVR:
cI2C
altul utilizând aceleași funcții pentru toate celelalte ținte (care este practic un wrapper pentru biblioteca Wire):
WireWrapper
Ambele sunt disponibile în managerul de bibliotecă IDE.
Ambele funcționează ca master fără a utiliza întreruperi și sunt testate pe diferite ținte cu sclavi diferiți:
– UNO, Nano pentru cI2C
– Zero, Due & ESP8266 pentru WireWrapper
Răspuns
Puteți utiliza o abordare complet diferită a întrebării de top.Solicitând alternative, ați dat motive pentru aceasta: scăpați de codul neutilizat din binar. Puteți elimina codul neutilizat fără a utiliza efectiv o bibliotecă alternativă. Rețineți că puteți instrui compilatorul și linkerul să excludă codul neutilizat din binarul compilat. Folosiți doar steaguri de compilare:
CFLAGS += -Wl,-static CFLAGS += -ffunction-sections CFLAGS += -Wl,--gc-sections
Funcția Rach va fi în propria secțiune.
LDFLAGS += -Wl,-gc-sections
Aceasta îi spune GCC să trimită semnalizatorul -gc-sections către linker, care va elimina secțiunile neutilizate. Și voilă! Secțiunile neutilizate sunt eliminate.