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.