Programovanie Arduino (a derivátov) bez Arduino IDE #3

Programovanie Arduino (a derivátov) bez Arduino IDE #3 
Richard Fabo Autor  Richard Fabo
  259 zobrazení
1
 0
Arduino a...
 Fórum

Prepínať sa do terminálu a spúšťať príkazy kompilácie je otrava. Radšej si to zakomponujeme do iného IDE. A aby to nebolo stále len o Emacse, tak to budem aplikovať v Geany.

Obsah minulej časti + čo je to Makefile?

V minulej časti sme si stručne ukázali, ako využiť arduino-cli na zostavenie a nahratie programu pre (nielen) Arduino z príkazového riadku. S nahrávaním takýmto spôsobom by sme sa ešte zmierili, ale spúšťať kompiláciu, pamätať si čísla riadkov, v ktorých je chyba, a potom tam ručne skákať, to by bol krok späť, s porovnaním s originálnym Arduino IDE. Ani zadávanie celého príkazu nie je pohodlné, hoci aj s využitím histórie shellu. Preto si na to spravíme skript - a hoci by mohol byť aj nejaký klasický bash-ový, využijeme na to tzv. Makefile.

Múdra definícia vraví, že: "Makefile je súbor obsahujúci pravidlá a akcie určené na automatizáciu procesu kompilácie a spustenia programov v rámci vývojového prostredia. Tento súbor definuje závislosti medzi zdrojovými kódmi a objektovými súbormi, ako aj príkazy potrebné na kompiláciu a linkovanie programu. Makefile je často používaný v projektoch napísaných v jazykoch C a C++, ale môže byť použitý aj pre iné programovacie jazyky."

Nevýhodou Makefile je trochu odlišná syntax, ktorá je špecificky navrhnutá na definovanie cieľov a akcií, ktoré majú byť vykonané pri kompilácii projektu. Avšak je možné použiť bash príkazy aj v Makefile súbore, aby sa dosiahla väčšia flexibilita a zložitejšie operácie pri automatizácii kompilácie projektov.

Makefile s využitím arduino-cli

Tak si rovno ukážme, ako taký súbor Makefile vyzerá. Je treba poznamenať, že názov súboru musí byť Makefile, s veľkým "M" na začiatku.

Trochu si to rozoberme:

  • PROGRAM ?= $(wildcard ./*.ino) : Vytvoríme si premennú PROGRAM, do ktorej si načítame názov súbor s príponou ino (môže byť len jeden taký súbor v adresári s Makefile, inak ho treba explicitne definovať).
  • PORT ?= $(shell ls /dev/ttyACM* | /usr/bin/grep -o '/dev/ttyACM.*') :ttyACM je systémový súborový symbolický odkaz, ktorý sa používa na komunikáciu s USB zariadeniami pripojenými k počítaču cez sériový port (niekedy je to i ttyUSB, ale to som videl hádam iba raz v živote).
  • FQBN ?= arduino:avr:uno : Je plný kvalifikovaný názov dosky, ako sme si o ňom hovorili v 2. časti seriálu.
  • ARDUINO-CLI-BIN ?= home/richard.arduino15/arduino-cli : Je cesta k binárke arduino-cli.

kompiler-verify ?= $(ARDUINO-CLI-BIN) compile -b
kompiler-verbose ?= $(ARDUINO-CLI-BIN) compile -v -b
kompiler-upload ?= $(ARDUINO-CLI-BIN) upload -v -b

Sú len také pomocné premenné, aby sme nemuseli tie reťazce písať celé v neskorších receptoch. Tie sa totiž konštruujú tak, aby boli ľahko upraviteľné práve zmenami premenných.

all, vebose, upload, fqbn
Sú konkrétne "recepty". To časti kódu, ktoré sa vykonajú, ak zavoláme z príkazového riadku príkaz make.
all: sa vykoná, ak je make bez parametrov, verbose, ak je príkaz make verbose atď.

Zásadná informácia: príkazy v rámci receptov musia byť odsadené tabulátorom. Teda nie medzerami! Dobrý textový editor na to upozorní.

V recepte upload sú tieto zaujímavosti:

  • @ pred bash príkazom spôsobí, že sa príkaz vykoná, ale nezobrazí sa samotný príkaz (teda @echo "Upload >>>" vypíše "Upload >>>", ale nie samotný príkaz echo).
  • Ak je príkaz viacriadkový, ako ten if, tak riadky sú zakončené znakom ; pre oddelenie jednotlivých príkazov v rámci jedného riadku a znakom \ pre pokračovanie príkazu na ďalšom riadku. Týmto zabezpečuje správne vykonanie príkazov v Makefile. Použitie týchto znakov je štandardnou praxou pri písaní Makefile a zvyšuje prehľadnosť a prenositeľnosť kódu.

A ešte:

V Makefile znamená ?= priradenie do premennej, ale iba ak ešte nebola definovaná. Ak premenná už má hodnotu, nedôjde k prepísaniu. Tento operátor je užitočný na definovanie predvolených hodnôt pre premenné v prípade, že by užívateľ nezadal žiadnu hodnotu.

Volanie make z (nejakého) IDE

Osobne používam roky Emacs, ale poznám aj Geany, ktoré je nenáročné, rýchle a má veľa pluginov a podporuje všakovaké jazyky.

Obr. 0: Info o Geany

V nastavení zostavovania, ak už máme otvorený náš ino súbor - menu Zostaviť ⟶ Nastaviť príkazy pre zostavenie si nastavíme príkazy pre Zostavenie (build, build verbose), Nahratie (upload), a duplicitne môžme i Spustenie (tiež upload). Viď obrázok nižšie.

Obr. 1: Nastavenie príkazov pre zostavenie

Ďalším fotkám stačí len komentár. Ešte dodám, že ak nastane pri kompilácii chyba, tak kliknutie na ňu nás teleportuje na príslušný riadok.

Obr. 2: Prebiehajúca kompilácia v spodnej časti obrazovky

Obr. 3: Súbor Makefile v 2. tabe

Obr. 4: Geany bez rušivých prvkov so "zbalenými" funkciami

V iných IDE sa to určite nastavuje nejako obdobne. A určite je možné k tomu nastaviť i klávesovú skratku. Napr. ja som si z čias Turbo Pascal-u a Turbo C zvykol mať F9 na kompiláciu.

Obsah ďalšej časti

V budúcej časti si ukážeme malú odlišnosť pri práci s Rasperry Pi Pico.

 

Máte aj vy zaujímavú konštrukciu, alebo článok?

Máte aj vy zaujímavú konštrukciu, alebo článok a chceli by ste sa o to podeliť s viac ako 200.000 čitateľmi? Tak neváhajte a dajte nám vedieť, radi ju uverejníme a to vrátane obrazových a video príloh. Rovnako uvítame aj autorov teoretických článkov, či autorov zaujímavých videí z oblasti elektroniky / elektrotechniky.

Kontaktujte nás!

ElektroLab potrebuje aj vašu pomoc / ElektroLab also needs your help
Podpor nás!   Support us!


Páčil sa Vám článok? Pridajte k nemu hodnotenie, alebo podporte jeho autora.
 

       

Komentáre k článku



Komentár môžete adresovať buď diskutujúcemu priamo pomocou tlačidla „Odpovedať“, alebo ho môžete adresovať všeobecne do poľa nižšie.

Zatiaľ nebol pridaný žiadny komentár k článku. Pridáte prvý? Berte prosím na vedomie, že za obsah komentára je zodpovedný užívateľ, nie prevádzkovateľ týchto stránok.
Pre komentovanie sa musíte prihlásiť.

Vaša reklama na tomto mieste



Vyhľadajte niečo na našom blogu

Máte záujem o reklamu?

PCBWay Promo

Máte záujem o reklamu?

PCBWay Promo

Máte záujem o reklamu?

PCBWay Promo

🎨 Rezistor
Pásiky: 4
Výsledok: 0.00 Ω ±1%
🔗 Zdieľať widget

💡 Vedeli ste, že…


Webwiki Button