Vaihtoehdot Wire-kirjastolle I2C: lle

Etsin (kohtuullisen helppokäyttöisiä ja hyvin testattuja) vaihtoehtoja Wire kirjasto. Wire toimii erittäin hyvin, mutta: Tarvitsen vain Arduinon toimimaan I2C-isäntänä ja kirjasto Wire näyttää olevan todellinen haaska resurssit:

Tavoitteenani on lähettää tietoja kokonaisuutena (esim. 32 tai 64 tavua). Nämä tiedot ovat jo SRAM-taulukossa. Kun käytät kirjastoa Wire, soitat funktioon TwoWire::write, joka kopioi tietosi toiseen puskuriin. Sen jälkeen Wire käyttää kirjastoa TWI, jossa twi_writeTo kopioi tiedot uudelleen 3. puskuri. Se on vähän kömpelö, eikö olekin?

Olen nähnyt DSSCircuits / I2C-Master-Library -kirjaston, mutta en ole varma kuinka kypsä se on, koska 3 vuoden ikäisen alkuperäisen sitoumuksen jälkeen ei ole tehty mitään sitoutumista.

Kommentit

  • Onko sinulla todellakin ram-käyttöongelmat? Joko optimointi ennen kuin siitä tulee ongelma, on usein hukkaan menevää työtä.
  • Kaikki tulee kysymykseen siitä, että haluamme saada sen toimimaan pian ja / tai kannettavasti vs haluavat saada sen toimimaan optimaalisesti . Voit tietysti saada ATmega-ohjelmoijan ' käyttöoppaan ja kirjoittaa oheislaitteelle rekisteröi itsesi.
  • dsscircuits ' Arduino I2C -kirjaston verkkosivulla on viisi I2C-versiota kirjasto, jota github-linkkisi on tarkoitettu. Se on todennäköisesti hyvä lähtökohta ajatelluillesi versioille. Jos Wirella on ollut korjauksia tammikuun 2012 jälkeen, saatat sinun on lisättävä ne I2C: hen.
  • > Vaihtoehdot I2C: n Wire-kirjastolle kirjoita oma. i2c on yksi helpoimmista protokollista, jotka on helppo kirjoittaa tyhjästä.

Vastaa

En näe mitään vastaväitteitä käyttämään DSS-piirien I2C-pääkirjastoa .

Sitä ei ehkä ole päivitetty pari vuotta, mutta jos se toimii, se ei ” minun ei tarvitse olla. Ei ole, että mikro-ohjainten kirjastojen on tuettava uusia tulostinohjaimia, video-ohjaimia jne.

Jos se toimii, se toimii.

Piiriä ei ole muutettu , ja ainoa todellinen syy päivityksiin on nykyään, jos IDE muuttuu (tai kääntäjä muuttuu) siten, että se aiheuttaa kääntövirheitä. Tällaisia asioita on tapahtunut melko äskettäin esimerkiksi PROGMEMin tiukempien sääntöjen kanssa.

Kommentit

  • Tämä kirjasto näytti erittäin lupaavalta, mutta huomaa, että kyllä vain AVR-kohteet. Koska Arduino-ytimet on kehitetty useille arkkitehtuureille, tämä kirjasto ei " toimi vain " mille tahansa Arduino-yhteensopivalle levylle. Esimerkiksi se ei ole yhteensopiva Adafruit ' STM32F405-pohjaisen sulka

Answer

Myös Procyon AVR -kirjasto kannattaa tarkistaa. Se on nyt vähän vanha, mutta erittäin ammattimainen ja tavallaan minimalistinen. Ei paljon riippuvuuksia, pitäisi olla hienoa käyttää vain I2C-moduulia. AVR I2C -osiossa on tuskin mitään uutta.

Vastaa

Cosa TWI -luokka on hyvin erilainen lähestymistapa I2C-laiteohjaintukeen. Se ei käytä ylimääräistä SRAM-muistia puskureihin ollenkaan. Jos laiteohjain ei estä, sen on käsiteltävä tarvittava puskurointi. Myös Cosa TWI -luokka tukee tyypillistä vuorovaikutusta I2C-laitteiden kanssa, kuten isäntä / orja, ”kirjoita rekisteri-lukutiedot” -mallit ja tapahtumia käytettäessä monisäikeistä ketjutusta.

Ohjelmisto- ja laitteisto Arduino-TWI -kirjasto on käytettävissä. Se käyttää Arduino-GPIO-kirjastoa ja sitä voidaan käyttää AVR- ja SAM-pohjaisilla levyillä.

Joitakin esimerkkejä: TWI-skanneri , DS3231 Reaaliaikainen kello / kalenteri , I2C LCD-sovitin ja PCF8574 .

Vastaa

Tein itselleni 2 libia helpomman käytön ja johdonmukaisten puheluiden vuoksi:

yksi AVR-kohteille:
cI2C

toinen, joka käyttää samoja toimintoja kaikille muille kohteille (mikä on pohjimmiltaan Wire-kirjaston kääre):
WireWrapper

Molemmat ovat saatavilla IDE-kirjastonhallinnassa.
Molemmat toimivat pääkäyttäjinä käyttämättä keskeytyksiä ja testataan eri kohteilla, joilla on eri orjat:
– UNO, Nano for cI2C
– Zero, Due & ESP8266 WireWrapperille

Vastaa

Voit käyttää täysin erilaista lähestymistapaa ylimpään kysymykseen.Pyytämällä vaihtoehtoja olet antanut syyn tähän: päästä eroon käyttämättömästä koodista binaarissa. Voit poistaa käyttämättömän koodin käyttämättä tosiasiallisesti vaihtoehtoista kirjastoa. Muista, että voit kehottaa kääntäjää ja linkittäjää sulkemaan käyttämättömän koodin pois käännetystä binaarista. Käytä vain kääntölippuja:

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

Rach-toiminto on omassa osiossaan.

LDFLAGS += -Wl,-gc-sections 

Tämä käskee GCC: tä lähettämään -gc-jaksot-lipun linkittimelle, joka poistaa käyttämättömät osat. Ja voilla! Käyttämättömät osat poistetaan.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *