A Wire könyvtár alternatívái az I2C-hez

A (div meglehetősen könnyen használható és jól tesztelt) alternatívákat keresem a Wire könyvtár. A Wire nagyon jól működik, de: Csak arra van szükségem, hogy az Arduino I2C mesterként működjön, és a Wire könyvtár úgy tűnik, hogy a erőforrások:

Célom az adatok összesített küldése (pl. 32 vagy 64 bájt). Ezek az adatok már egy tömbben ülnek az SRAM-ban. Most, amikor a Wire könyvtárat használja, meghívja a TwoWire::write függvényt, amely az adatait egy második pufferbe másolja. Ezt követően a Wire a TWI könyvtárat használja, ahol twi_writeTo az adatokat ismét egy 3. puffer. Ez “kissé nehézkes, nem”?

Láttam a DSSCircuits / I2C-Master-Library fájlt, de nem vagyok benne biztos mennyire érett, mert a mostani 3 éves kezdeti elkötelezettség után még nem volt semmilyen kötelezettségvállalás.

Megjegyzések

  • Van ramhasználati problémák? Valaminek az optimalizálása, mielőtt az problémává válna, gyakran felesleges erőfeszítés.
  • Mindez arra a kérdésre vezethető vissza, hogy hamarosan és / vagy hordozhatóan vs, hogy optimálisan működjenek . Természetesen szabadon megkaphatja az ATmega programozó ' kézikönyvét, és írhat a perifériára regisztrálja magát.
  • dsscircuits ' Arduino I2C master library weboldal az I2C öt változatát mutatja be könyvtár, amelyre a github linked vonatkozik. Valószínűleg jó kiindulópont a szem előtt tartott verziókhoz. Ha a Wire javításokat hajtott végre 2012. január óta, akkor hozzá kell adni őket az I2C-hez.
  • > Az I2C Wire könyvtárának alternatívái írják meg a sajátjukat. Az i2c az egyik könnyebb protokoll a nulláról.

Válasz

Nem látok kifogást a DSS áramkörök I2C Master Library használatára.

Lehet, hogy pár éve nem frissítették, de ha működik, akkor nem ” nem kell. Nem mintha a mikrovezérlők könyvtárainak támogatniuk kellene az új nyomtató-illesztőprogramokat, video-illesztőprogramokat stb.

Ha működik, akkor működik.

A chip nem változott , és a frissítések egyetlen igazi oka manapság az, ha az IDE úgy változik (vagy a fordító változik), hogy fordítási hibákat vezet be. Ilyen dolgok meglehetősen nemrég történtek, például a PROGMEM szigorúbb szabályokkal.

Megjegyzések

  • Ez a könyvtár nagyon ígéretesnek tűnt, de vegye figyelembe, hogy mégis csak az AVR célokat támogatja. Mivel az Arduino magokat különféle architektúrákhoz fejlesztették ki, ez a könyvtár nem csak " fog működni " bármely Arduino-kompatibilis táblánál. Például nem kompatibilis az Adafruit ' STM32F405 alapú tollal

Válasz

Szintén érdemes ellenőrizni a Procyon AVR könyvtárat . Most egy kicsit régi, de nagyon profi és kicsit minimalista. Nem sok függőség, csak az I2C modult kell használni. Alig van újdonság az AVR I2C részben.

Válasz

A Cosa TWI osztály egészen más megközelítés az I2C eszközillesztők támogatásához. A pufferekhez egyáltalán nem használ extra SRAM-ot. Ha egy eszközillesztő nem blokkolja, akkor a szükséges pufferelést kell kezelnie. A Cosa TWI osztály is támogatja az I2C eszközökkel folytatott tipikus interakciókat, mint például a master / slave, a “register-read data read” minták és a tranzakciókat többszálú szálak használata esetén.

Szoftveres és hardveres Arduino-TWI könyvtár áll rendelkezésre. Az Arduino-GPIO könyvtárat használja, és AVR és SAM alapú táblákon használható.

Néhány példa: TWI szkenner , DS3231 Valós idejű óra / naptár , I2C LCD-adapter PCF8574-szel .

Válasz

Magam készítettem 2 lib-et a könnyebb használat és a konzisztens hívások érdekében:

egyet AVR-célokhoz:
cI2C

egy másik, amely ugyanazokat a függvényeket használja az összes többi célhoz (ami alapvetően a Wire könyvtár burkolója):
WireWrapper

Mindkettő elérhető az IDE könyvtárkezelőn belül.
Mindkettő masterként működik, megszakítás nélkül, és különböző célpontokon tesztelik, különböző rabszolgákkal:
– UNO, Nano a cI2C számára
– nulla, esedékes & ESP8266 a WireWrapper számára

Válasz

Teljesen más megközelítést alkalmazhat a legfelső kérdésre.Kérjen alternatívákat, amire okot adott: megszabaduljon a bináris bináris kódtól. El lehet távolítani a fel nem használt kódot anélkül, hogy ténylegesen alternatív könyvtárat használna. Ne feledje, hogy utasíthatja a fordítót és a linkelőt, hogy zárja ki a fel nem használt kódot a lefordított bináris fájlból. Csak használjon fordítási jelzőket:

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

A Rach függvény a saját szakaszában lesz.

LDFLAGS += -Wl,-gc-sections 

Ez arra utasítja a GCC-t, hogy küldje el a -gc-szakaszok jelzőt a linkelőnek, amely eltávolítja a fel nem használt szakaszokat. És voilla! A fel nem használt szakaszokat eltávolítja.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük