Alternativer til Wire-bibliotek til I2C

Jeg leder efter (rimelig nem at bruge og velprøvet) alternativer til Wire bibliotek. 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 TwoWire::write -funktionen, der kopierer dine data til en 2. buffer. Bagefter bruger Wire biblioteket TWI, hvor twi_writeTo kopierer dataene igen til en 3. buffer. At “lidt klodset, er det ikke?

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

Kommentarer

  • Har du faktisk problemer med rambrug? Optimering af noget, før det bliver til et problem, er ofte en spildt indsats.
  • Det hele handler om spørgsmålet om at få det til at fungere snart og / eller bærbart vs ønsker at få det til at fungere optimalt . Du er selvfølgelig fri til at få ATmega-programmøren ' s manual og skrive til den perifere enhed registrerer dig selv.
  • dsscircuits ' Arduino I2C masterbibliotek webside viser fem versioner af I2C bibliotek, som dit github-link er beregnet til. Det er sandsynligvis et ok udgangspunkt for de ændringer, du har i tankerne. Hvis Wire har haft rettelser siden januar 2012, kan du muligvis skal tilføje dem til I2C.
  • > Alternativer til Wire-biblioteket til I2C skriv din egen. i2c er en af de lettere protokoller at skrive fra bunden.

Svar

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

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

Hvis det fungerer, fungerer det.

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

Kommentarer

  • Dette bibliotek så meget lovende ud, men bemærk det gør understøtter kun AVR-mål. Da Arduino-kerner er udviklet til en række forskellige arkitekturer, vil dette bibliotek ikke " bare arbejde " til ethvert Arduino-kompatibelt kort. For eksempel er den ikke kompatibel med Adafruit ' s STM32F405-baseret fjer

Svar

Også Procyon AVR-bibliotek værd at tjekke. 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.

Svar

Cosa TWI -klassen 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.

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

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

Svar

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

en til AVR-mål:
cI2C

en anden, der bruger 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
– Zero, Due & ESP8266 for WireWrapper

Svar

Du kan bruge en helt anden tilgang til det øverste spørgsmål.At bede om alternativer, du har givet grund til dette: slippe af med ubrugt kode i binærfilen. 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,-static CFLAGS += -ffunction-sections CFLAGS += -Wl,--gc-sections 

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

LDFLAGS += -Wl,-gc-sections 

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *