Fråga:
Alternativ till Wire-biblioteket för I2C
fuenfundachtzig
2015-05-10 01:50:08 UTC
view on stackexchange narkive permalink

Jag letar efter (rimligt lättanvänd och väl testad) alternativ till Wire -biblioteket. Wire fungerar mycket bra, men: Jag behöver bara Arduino för att fungera som I2C-master och Wire -biblioteket verkar vara ett verkligt slöseri med resurser:

Mitt mål är att skicka ut data en bloc (t.ex. 32 eller 64 byte). Dessa data sitter redan i en array i SRAM. Nu när du använder biblioteket Wire ringer du till TwoWire :: skriv -funktionen som kopierar dina data till en andra buffert. Därefter använder Wire biblioteket TWI där twi_writeTo kopierar data igen till en tredje buffert. Det är lite klumpigt, eller hur?

Jag har sett DSSCircuits / I2C-Master-Library men jag är inte säker på hur mogen det är eftersom det inte har varit eventuellt åtagande efter det ursprungliga åtagandet som är tre år nu.

Har du faktiskt problem med ramanvändning? Att optimera något innan det blir ett problem är ofta en slöseri.
Allt kommer ner till frågan om att vilja få det att fungera * snart * och / eller * bärbart * jämfört med att få det att fungera * optimalt *. Du står naturligtvis fritt att skaffa ATmega-programmerarhandboken och skriva till kringregisterna själv.
dsscircuits '[Arduino I2C masterbibliotek] (http://www.dsscircuits.com/articles/86-articles/66-arduino-i2c-master-library) webbsida visar fem versioner av I2C-biblioteket som din github-länk är avsedd för. Det är förmodligen en ok utgångspunkt för de ändringar du har i åtanke. Om Wire har haft korrigeringar sedan januari 2012 kan du behöva lägga till dem i I2C.
> Alternativ till Wire-biblioteket för I2C skriv ditt eget. i2c är ett av de enklare protokollen att skriva från grunden.
Fem svar:
Nick Gammon
2015-08-22 10:51:40 UTC
view on stackexchange narkive permalink

Jag ser ingen invändning mot att använda DSS Circuits I2C Master Library.

Det kanske inte har uppdaterats på ett par år, men om det fungerar fungerar det inte behöver inte vara. Det är inte som om bibliotek för mikrokontroller måste stödja nya skrivardrivrutiner, videodrivrutiner etc.

Om det fungerar fungerar det.

Chipet har inte förändrats och den enda verkliga anledningen till uppdateringar idag är om IDE ändras (eller kompilatorn ändras) på ett sådant sätt att det introducerar kompileringsfel. Sådana saker har hänt ganska nyligen med till exempel att PROGMEM har strängare regler.

Detta bibliotek såg väldigt lovande ut, men notera att det bara stöder AVR-mål. Eftersom Arduino-kärnor har utvecklats för en mängd olika arkitekturer kommer detta bibliotek inte bara att fungera för något Arduino-kompatibelt kort. Det är till exempel ** inte ** kompatibelt med Adafruit STM32F405-baserade fjäder
Mikael Patel
2015-12-20 16:18:30 UTC
view on stackexchange narkive permalink

Cosa TWI -klassen är ett helt annat sätt att stödja I2C-enhetsdrivrutinen. Det använder inte extra SRAM för buffertar alls. Om en enhetsdrivrutin inte blockerar måste den hantera den nödvändiga buffringen. Cosa TWI-klassen stöder också typisk interaktion med I2C-enheter som master / slave, "skriv registerläsdata" -mönster och transaktioner när du använder multi-threading.

Det finns ett Arduino-TWI -bibliotek med programvara och hårdvara. Den använder Arduino-GPIO-biblioteket och kan användas på AVR- och SAM-baserade kort.

Några exempel: TWI Scanner, DS3231 Realtidsklocka / kalender, I2C LCD-adapter med PCF8574.

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

Även Procyon AVR-bibliotek är värt att kolla. Det är lite gammalt nu men väldigt professionellt och ganska minimalistiskt. Inte mycket beroende, det borde vara bra att bara använda I2C-modulen. Det finns knappast något nytt i AVR I2C-delen sedan.

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

Jag gjorde själv två libs för enklare användning och konsekventa samtal:

en för AVR-mål:
cI2C

en annan med samma funktioner för alla andra mål (som i grunden är ett omslag för Wire-biblioteket):
WireWrapper

Båda finns i IDE-bibliotekshanteraren.
De fungerar båda som master utan att använda avbrott och testas på olika mål med olika slavar:
- UNO, Nano för cI2C
- Zero, Due & ESP8266 för WireWrapper

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

Du kan använda en helt annan metod för den översta frågan. Fråga efter alternativ som du har gett anledning till detta: bli av med oanvänd kod i binären. Du kan uppnå borttagning av oanvänd kod utan att använda alternativt bibliotek. Tänk på att du kan instruera kompilatorn och länkaren att utesluta oanvänd kod från den kompilerade binären. Använd bara kompileringsflaggor:

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

Rach-funktionen kommer att finnas i sitt eget avsnitt.

  LDFLAGS + = -Wl, -gc-sektioner  

Detta ber GCC att skicka flaggan -gc-sektioner till länken som tar bort oanvända sektioner. Och voilla! Oanvända sektioner tas bort.



Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...