Arduino a knižnica STL (C++)

Takže používate Arduino a zaujíma vás, či môžete vo svojom kóde použiť knižnicu Cpp STL. Dobrá správa je:

áno, je to možné! Aj keď niektoré funkcie budú stále chýbať alebo niektoré iné budú obmedzené, vo svojich programoch Arduino budete môcť používať veci ako std::vector a std::string.

Aby to fungovalo, budete musieť použiť staršiu verziu Arduino IDE.

  • napríklad verziu : 1.6.1

Pre Arduino je k dispozícii aj ďalšia knižnica STL s názvom ArduinoSTL. Problém je v tom, že táto knižnica nefunguje s najnovšími verziami Arduino IDE2. Takže ak chcete, aby to fungovalo, budete musieť prejsť na nižšiu verziu vášho Arduino IDE.

Jazyk Arduino je podmnožinou C/C++ s niektorými objektovo orientovanými programovacími funkciami. Môžete napríklad vytvárať triedy v Arduine, nebudete však môcť používať výnimky a nové/vymazané výrazy. Ako je to teda možné, ak sme predtým povedali, že nie? Začalo to vývojom uClibc++. uClibc++ je knižnica Cpp vytvorená tak, aby mohla používať štandardnú knižnicu Cpp vo vstavaných systémoch.

A niekoľko vývojárov tiež pracovalo na portovaní tejto knižnice na Arduino. Knižnica, ktorú tu použijeme, sa nazýva StandardCPlusPlus. V podstate vám umožňuje používať („falošný“) STL v Arduine, stačí stiahnuť a nainštalovať knižnicu do vášho prostredia Arduino. Takže aj keď nemôžete natívne používať STL, môžete získať niektoré z jeho funkcií z externej knižnice.

Dôležitá poznámka:

Používanie STL na vašom počítači a na Arduino (čo je vstavaný systém) zjavne nie je to isté, takže neočakávajte, že všetko bude fungovať rovnako! Pamäť Flash a SRAM na Arduine sú asi niekoľko kilobajtov, zatiaľ čo na vašich počítačoch hovoríme v gigabajtoch. Viete si teda predstaviť, že pri vývoji knižnice došlo k určitým kompromisom.

Poďme nainštalovať a používať knižnicu StandardCPlusPlus vo vašom prostredí Arduino.

  • Najprv prejdite na stránku StandardCPlusPlus GitHub a kliknite na „Klonovať alebo stiahnuť“ (zelené tlačidlo vpravo) > „Stiahnuť ZIP“.
  • Na počítači prejdite do priečinka Arduino (predpokladám, že ste už nainštalovali Arduino). Môže sa nachádzať v priečinku Documents/Arduino alebo v podobnom priečinku – pokiaľ ste nezvolili vlastnú cestu.
  • Rozbaľte knižnicu pomocou 7-zip, winraru alebo akéhokoľvek iného nástroja na prácu s archívmi. Umiestnite nový priečinok (ktorý by sa mal volať StandardCPlusPlus-master) do priečinka knižnice/priečinku Arduino.

Teraz, aby ste to otestovali, spustite Arduino IDE alebo ho reštartujte, ak už bolo otvorené pri inštalácii knižnice. Vytvorte veľmi jednoduchý náčrt iba s jedným importným riadkom.

Kliknutím na „Overiť“ skompilujte svoj kód.

Ak sa v tomto bode objavia nejaké chyby, znamená to, že vaša inštalácia nebola vykonaná správne. Je možné, že ste neumiestnili priečinok StandardCPlus-master/ na správne miesto alebo ste zabudli rozbaliť archív.

Uistite sa, že ste dodržali všetky kroky a skúste to znova. Tiež som urobil tutoriál s doskou Arduino Uno. Malo by to fungovať aj v prípade iných dosiek, ako sú Mega alebo Nano, ale ak používate dosky ako Due alebo Zero, môžete naraziť na nejaké problémy.

Nie všetky funkcie Cpp STL boli prenesené a väčšina z nich v tu skutočnosti funguje trochu inak. Mali by ste ich však používať bez akýchkoľvek problémov alebo rozdielov v syntaxi, pretože rozhranie je skutočne podobné. Pozrime sa na príklad niektorých funkcií Arduino STL.

Tu je základný príklad, ako použiť std::vector v náčrte Arduina, aby ste získali dynamické pole takmer akéhokoľvek typu údajov.

Ak už poznáte std::vector, môžete vidieť, že spôsob použitia je rovnaký, ako keď programujete na počítači (ale nezabudnite, že implementácia vnútorne určite nie je totožná). V tomto príklade najprv deklarujeme vektor, potom ho naplníme hodnotami a vytlačíme ich. Potom vektor vymažeme a skontrolujeme, či je prázdny. Vyskúšajte tento príklad na svojom Arduine a sledujte výsledok otvorením sériového monitora:

Upozornenie: kvôli obmedzenému priestoru nebudete môcť na Arduine vytvárať obrovské polia a vektory. Majte to na pamäti skôr, ako sa pokúsite vytvoriť 10 000 dvojitý vektor.

Prepíšme cyklus for v predchádzajúcom príklade, tentoraz pomocou std::iterátora. Tiež inicializujeme vektor priamo namiesto použitia funkcie push_back().

Začnime jednoduchým príkladom std::string.

Poznámka: Ak chcete vytlačiť std::string pomocou Serial.println(), musíte použiť C reprezentáciu reťazca s funkciou c_str(). Je to podobné, ako keď chcete použiť printf(). Tiež si nezamieňajte std::string s objektom Arduino String.

Pokračujme v našom predchádzajúcom kóde na std::vector, ale tentoraz pomocou kolekcie std::string.

A výstup:

Povedzme „Ahoj“ pomocou cout.

Najprv musíte zahrnúť „serstream“. Na vašom počítači by ste použili „iostream“. Pred použitím std::cout musíte Arduinu povedať, ktoré hardvérové ​​sériové rozhranie potrebuje použiť. Tu používame „Serial“ pre sériové rozhranie USB. V závislosti od vašej aplikácie to môže byť napríklad „Serial1“ alebo akýkoľvek iný HardwareSerial, ktorý chcete použiť.

Vráťme sa k nášmu príkladu s vektormi, iterátormi a reťazcami a nahraďte Serial.print() za std::cout.

V tomto návode ste videli, ako nainštalovať a používať externú knižnicu – StandardCPlusPlus, založenú na uClibc++ – na získanie niektorých funkcií STL do vášho kódu Arduino. Experimentovali ste s vektorom, iterátorom, reťazcom, cout. Tie sú veľmi bežné v akomkoľvek kóde Cpp, ktorý používa STL.

Existuje mnoho ďalších užitočných funkcií STL, ktoré môžete použiť s touto knižnicou Arduino:

  • bitset
  • queue
  • map
  • set
  • map

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *

Nemôžete kopírovať obsah tejto stránky