Spørgsmål:
Alternativer til Wire-biblioteket til I2C
fuenfundachtzig
2015-05-10 01:50:08 UTC
view on stackexchange narkive permalink

Jeg leder efter (rimelig nem at bruge og velafprøvede) alternativer til Wire biblioteket. Wire fungerer meget godt, men: Jeg har kun brug for Arduino til at fungere som I2C-master, og Wire -biblioteket ser ud til at være et virkelig spild af ressourcer:

Mit mål er at sende data en bloc (f.eks. 32 eller 64 bytes). Disse data sidder allerede i en matrix i SRAM. Når du nu bruger Wire -biblioteket, kalder du til TwoWire :: skriv -funktionen, der kopierer dine data til en 2. buffer. Bagefter bruger Wire biblioteket TWI , hvor twi_writeTo kopierer dataene igen i en 3. buffer. Det er lidt klodset, er det ikke?

Jeg har set DSSCircuits / I2C-Master-Library, men jeg er ikke sikker på, hvor moden det er, fordi der ikke har været enhver forpligtelse efter den oprindelige forpligtelse, som nu er 3 år gammel.

Har du faktisk problemer med rambrug? Optimering af noget, før det bliver et problem, er ofte en spildt indsats.
Det hele kommer ned på spørgsmålet om at ønske at få det til at fungere * snart * og / eller * bærbart * mod at ønske at få det til at fungere * optimalt *. Du har selvfølgelig frihed til at få ATmega-programmørhåndbogen og skrive til de perifere registre selv.
dsscircuits '[Arduino I2C masterbibliotek] (http://www.dsscircuits.com/articles/86-articles/66-arduino-i2c-master-library) webside viser fem revisioner af I2C-biblioteket, som dit github-link er beregnet til. Det er sandsynligvis et ok udgangspunkt for de revisioner, du har i tankerne. Hvis Wire har haft rettelser siden januar 2012, skal du muligvis tilføje dem til I2C.
> Alternativer til Wire-biblioteket til I2C skriv dit eget. i2c er en af ​​de lettere protokoller at skrive fra bunden.
Fem svar:
Nick Gammon
2015-08-22 10:51:40 UTC
view on stackexchange narkive permalink

Jeg kan ikke se nogen indvendinger mod at bruge DSS Circuits I2C Master Library.

Det er muligvis ikke blevet opdateret i et par år, men hvis det fungerer fungerer det ikke behøver ikke at være det. Det er ikke som om biblioteker til mikrocontrollere skal understøtte nye printerdrivere, videodrivere osv.

Hvis det fungerer, fungerer det.

Chippen har ikke ændret sig, og den eneste virkelige årsag til opdateringer i disse dage er, hvis IDE ændres (eller compileren ændres) på en sådan måde, at det introducerer kompileringsfejl. Sådanne ting er sket for nylig med ting som f.eks. PROGMEM, der har strammere regler.

Dette bibliotek så meget lovende ud, men bemærk det understøtter kun AVR-mål. Da Arduino-kerner er udviklet til en række forskellige arkitekturer, fungerer dette bibliotek ikke "bare" for ethvert Arduino-kompatibelt kort. For eksempel er den ** ikke ** kompatibel med Adafruit's STM32F405-baserede fjer
Mikael Patel
2015-12-20 16:18:30 UTC
view on stackexchange narkive permalink

Cosa TWI klasse er en meget anden tilgang til I2C enhedsdriverunderstøttelse. Det bruger slet ikke nogen ekstra SRAM til buffere. Hvis en enhedsdriver ikke blokerer, skal den håndtere den nødvendige buffering. Også Cosa TWI-klassen understøtter typisk interaktion med I2C-enheder såsom master / slave, "skriv registerlæste data" -mønstre og transaktioner ved brug af multi-threading.

Et software- og hardware Arduino-TWI -bibliotek er tilgængeligt. Det bruger Arduino-GPIO-biblioteket og kan bruges på AVR- og SAM-baserede kort.

Nogle eksempler: TWI-scanner, DS3231 Realtidsur / kalender, I2C LCD-adapter med PCF8574.

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

Det er også værd at kontrollere Procyon AVR-bibliotek. Det er lidt gammelt nu, men meget professionelt og lidt minimalistisk. Ikke meget afhængigheder, det skal være fint at kun bruge I2C-modulet. Der er næppe noget nyt i AVR I2C-delen siden.

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

Jeg lavede selv 2 libs til lettere brug og konsistente opkald:

en til AVR-mål:
cI2C

en anden ved hjælp af de samme funktioner til alle andre mål (som grundlæggende er en indpakning til Wire-biblioteket):
WireWrapper

Begge er tilgængelige i IDE-biblioteksadministratoren.
De arbejder begge som master uden brug af afbrydelse og testes på forskellige mål med forskellige slaver:
- UNO, Nano til cI2C
- Nul, Due & ESP8266 til WireWrapper

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

Du kan bruge en helt anden tilgang til det øverste spørgsmål. At bede om alternativer, du har givet grund til dette: at slippe af med ubrugt kode i binær. Du kan opnå fjernelse af ubrugt kode uden faktisk at bruge alternativt bibliotek. Husk, at du kan instruere kompilatoren og linkeren om at udelukke ubrugt kode fra den kompilerede binær. Brug bare kompilationsflag:

  CFLAGS + = -Wl, -staticCFLAGS + = -ffunction-sektionerCFLAGS + = -Wl, - gc-sektioner  

Rach-funktionen vil være i sin egen sektion.

  LDFLAGS + = -Wl, -gc-sektioner  

Dette fortæller GCC at sende flaget -gc-sektioner til linkeren, som fjerner ubrugte sektioner. Og voilla! Ubrugte sektioner fjernes.



Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 3.0-licens, den distribueres under.
Loading...