Alternativen zur Drahtbibliothek für I2C

Ich suche nach (relativ einfach zu verwendenden und gut getesteten) Alternativen zu Wire Bibliothek. Wire funktioniert sehr gut, aber: Ich brauche nur das Arduino als I2C-Master und die Wire Bibliothek scheint eine echte Verschwendung zu sein Ressourcen:

Mein Ziel ist es, Daten en bloc (z. B. 32 oder 64 Bytes) zu versenden. Diese Daten befinden sich bereits in einem Array im SRAM. Wenn Sie jetzt die Bibliothek Wire verwenden, rufen Sie die Funktion TwoWire::write auf, die Ihre Daten in einen zweiten Puffer kopiert. Anschließend verwendet Wire die Bibliothek TWI, in der twi_writeTo die Daten erneut in a kopiert 3. Puffer. Das ist ein bisschen klobig, nicht wahr?

Ich habe die DSSCircuits / I2C-Master-Library gesehen, bin mir aber nicht sicher Wie ausgereift es ist, weil es nach dem ersten Commit, der jetzt 3 Jahre alt ist, kein Commit mehr gegeben hat.

Kommentare

  • Haben Sie tatsächlich Probleme bei der RAM-Nutzung? Etwas zu optimieren, bevor es zu einem Problem wird, ist oft eine vergebliche Anstrengung.
  • Es kommt alles auf die Frage an, ob es bald und / oder portabel vs wollen, dass es optimal funktioniert . Natürlich können Sie das Handbuch des ATmega-Programmierers ' herunterladen und an das Peripheriegerät schreiben registriert sich selbst.
  • dsscircuits ' Die Arduino I2C-Masterbibliothek zeigt fünf Revisionen des I2C Bibliothek, für die Ihr Github-Link bestimmt ist. Dies ist wahrscheinlich ein guter Ausgangspunkt für die Überarbeitungen, an die Sie denken. Wenn Wire seit Januar 2012 Korrekturen vorgenommen hat, können Sie dies tun Sie müssen zu I2C hinzugefügt werden.
  • > Alternativen zur Wire-Bibliothek für I2C schreiben Sie Ihre eigenen. i2c ist eines der einfacheren Protokolle, die von Grund auf neu geschrieben werden können.

Antwort

Ich sehe keine Einwände zur Verwendung von DSS Circuits I2C-Masterbibliothek .

Es wurde möglicherweise einige Jahre lang nicht aktualisiert, aber wenn es funktioniert, funktioniert es nicht. “ muss nicht sein. Es ist nicht so, dass Bibliotheken für Mikrocontroller neue Druckertreiber, Videotreiber usw. unterstützen müssen.

Wenn es funktioniert, funktioniert es.

Der Chip hat sich nicht geändert und der einzige wirkliche Grund für Aktualisierungen in diesen Tagen ist, wenn sich die IDE (oder der Compiler) so ändert, dass Kompilierungsfehler auftreten. Solche Dinge sind vor relativ kurzer Zeit passiert, zum Beispiel mit PROGMEM, das strengere Regeln hat.

Kommentare

  • Diese Bibliothek sah sehr vielversprechend aus, aber beachten Sie, dass dies der Fall ist unterstützt nur AVR-Ziele. Da Arduino-Kerne für eine Vielzahl von Architekturen entwickelt wurden, funktioniert diese Bibliothek nicht " nur " für ein Arduino-kompatibles Board. Zum Beispiel ist es nicht kompatibel mit Adafruit ' STM32F405-basierter Feder

Answer

Auch Procyon AVR-Bibliothek ist eine Überprüfung wert. Es ist jetzt ein bisschen alt, aber sehr professionell und ein bisschen minimalistisch. Nicht viele Abhängigkeiten, sollte in Ordnung sein, nur I2C-Modul zu verwenden. Seitdem gibt es im AVR I2C-Teil kaum etwas Neues.

Antwort

Die Cosa TWI -Klasse ist ein ganz anderer Ansatz zur Unterstützung von I2C-Gerätetreibern. Es wird überhaupt kein zusätzlicher SRAM für Puffer verwendet. Wenn ein Gerätetreiber nicht blockiert, muss er die erforderliche Pufferung durchführen. Die Cosa TWI-Klasse unterstützt auch die typische Interaktion mit I2C-Geräten wie Master / Slave, „Write Register-Read Data“ -Muster und Transaktionen bei Verwendung von Multithreading.

Eine Software und Hardware Arduino-TWI -Bibliothek ist verfügbar. Es verwendet die Arduino-GPIO-Bibliothek und kann auf AVR- und SAM-basierten Karten verwendet werden.

Einige Beispiele: TWI-Scanner , DS3231 Echtzeituhr / Kalender , I2C-LCD-Adapter mit PCF8574 .

Antwort

Ich habe selbst 2 Bibliotheken erstellt, um die Verwendung zu vereinfachen und konsistente Aufrufe zu ermöglichen:

eine für AVR-Ziele:
cI2C

ein anderer, der dieselben Funktionen für alle anderen Ziele verwendet (was im Grunde ein Wrapper für die Drahtbibliothek ist):
WireWrapper

Beide sind im IDE-Bibliotheksmanager verfügbar.
Beide arbeiten als Master ohne Interrupt und werden auf verschiedenen Zielen mit verschiedenen Slaves getestet:
– UNO, Nano für cI2C
– Null, fällig & ESP8266 für WireWrapper

Antwort

Sie können die oberste Frage ganz anders angehen.Wenn Sie nach Alternativen fragen, haben Sie dies begründet: Nicht verwendeten Code in der Binärdatei entfernen. Sie können nicht verwendeten Code entfernen, ohne eine alternative Bibliothek zu verwenden. Bitte beachten Sie, dass Sie den Compiler und Linker anweisen können, nicht verwendeten Code aus der kompilierten Binärdatei auszuschließen. Verwenden Sie einfach Kompilierungsflags:

CFLAGS += -Wl,-static CFLAGS += -ffunction-sections CFLAGS += -Wl,--gc-sections 

Die Rach-Funktion befindet sich in einem eigenen Abschnitt.

LDFLAGS += -Wl,-gc-sections 

Dies weist GCC an, das Flag -gc-section an den Linker zu senden, der nicht verwendete Abschnitte entfernt. Und voilla! Nicht verwendete Abschnitte werden entfernt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.