Obsah:

AVRSH: Shell příkazového tlumočníka pro Arduino/AVR .: 6 kroků (s obrázky)
AVRSH: Shell příkazového tlumočníka pro Arduino/AVR .: 6 kroků (s obrázky)

Video: AVRSH: Shell příkazového tlumočníka pro Arduino/AVR .: 6 kroků (s obrázky)

Video: AVRSH: Shell příkazového tlumočníka pro Arduino/AVR .: 6 kroků (s obrázky)
Video: Geany - прошивка AVR под Linux ( графический интерфейс ) 2024, Červenec
Anonim
AVRSH: Shell příkazového tlumočníka pro Arduino/AVR
AVRSH: Shell příkazového tlumočníka pro Arduino/AVR

Chtěli jste někdy být „přihlášeni“ke svému mikrokontroléru AVR? Přemýšleli jste někdy o tom, že by bylo skvělé „kočičit“registr, abyste viděli jeho obsah? Vždy jste chtěli způsob, jak zapnout a vypnout jednotlivé periferní subsystémy vašeho AVR nebo Arduina v * reálném čase *? Já také, proto jsem napsal AVR Shell, shell podobný UNIXu. Je to jako UNIX, protože to připomíná účet shellu, který jste si koupili a koupili, na kterém spustíte své kolizní roboty irc nick, a také společný příkaz nebo dva. Má také souborový systém, který se podobá extixům UNIX, pomocí externí EEPROM, ale to se stalo projektem samo o sobě, takže tento modul uvolním samostatně pod jiným instrukčním programem, až bude připraven k produkci. Zde je seznam věcí, které můžete v současné době dělat s AVR Shell:

  • Přečtěte si všechny své datové směrovací registry (DDRn), porty a piny v reálném čase
  • Zapisujte do všech svých DDRn, portů a pinů a zapněte motory, LED diody nebo čidla v reálném čase
  • Seznam všech známých registrů v systému
  • Vytvářejte a ukládejte hodnoty do uživatelem definovaných proměnných zálohovaných pomocí EEPROM.
  • Vytvořte heslo root a ověřte se proti němu (používá se pro přístup k telnetu)
  • Přečtěte si nakonfigurovanou rychlost hodin CPU
  • Změňte rychlost hodin procesoru nastavením předzesilovače
  • Spouštění a zastavování 16bitových časovačů pro časování různých věcí
  • Napájení a/nebo vypnutí periferních subsystémů: Analogově digitální převodníky (ADC), Sériové periferní rozhraní (SPI), Dvouvodičové rozhraní (TWI/I2C), UART/USART. Užitečné, když chcete snížit spotřebu energie mikrokontroléru nebo povolit určité funkce.
  • Napsáno v C ++ s opakovaně použitelnými objekty.

Tento návod vás provede instalací, používáním a přizpůsobením avrsh.

Krok 1: Co budete potřebovat

Co budete potřebovat
Co budete potřebovat

Tento instruktáž nevyžaduje mnoho, kromě toho, že:

  • Máte Arduino nebo ATmega328P. Mohly by fungovat i jiné AVR, ale možná budete muset upravit kód tak, aby uváděl všechny registry, které jsou pro váš MCU jedinečné. Jména musí odpovídat pouze tomu, co je uvedeno v souboru záhlaví jedinečného pro váš MCU. Mnoho názvů registrů je mezi AVR stejných, takže se počet najetých kilometrů může při přenosu lišit.
  • Najděte způsob, jak se připojit k sériovému USART vašeho Arduino/AVR. Systém byl nejrozsáhlejší testován pomocí AVR Terminal, aplikace pro Windows, která vytváří sériové připojení přes váš port USB nebo COM. Funguje s Arduinos pomocí USB připojení a jakýmkoli AVR pomocí USB-BUB od Moderndevice.com. Mezi další možnosti terminálu patří: Putty, minicom (Linux a FreeBSD), obrazovka (Linux/FreeBSD), Hyperterminal, Teraterm. Zjistil jsem, že tmel a teraterm při připojování posílají nějaké odpadky, takže váš první příkaz může být zkomolený.
  • Nechejte si nainstalovat a spustit firmware AVR Shell, který si můžete stáhnout z těchto stránek, nebo vždy získat nejnovější verzi na BattleDroids.net.

Chcete -li nainstalovat terminál AVR, stačí jej rozbalit a spustit. Chcete -li nainstalovat firmware AVR Shell, stáhněte jej a buď přímo nahrajte hexadecimální soubor a připojte svůj sériový terminál rychlostí 9600 baudů, nebo jej zkompilovejte pomocí „make“a poté „make program“pro nahrání hexu. Všimněte si, možná budete muset změnit nastavení AVRDUDE tak, aby odráželo váš COM port. Poznámka: Atribut PROGMEM je v aktuální implementaci AVR GCC pro C ++ nefunkční a toto je známá chyba. Pokud jej zkompilováte, očekávejte mnoho varovných zpráv s hlášením „varování: do oblasti paměti programu lze umístit pouze inicializované proměnné“. Kromě toho, že je toto varování otravné, je neškodné. Protože C ++ na integrované platformě není na seznamu priorit AVR GCC, není známo, kdy to bude opraveno. Pokud se podíváte na kód, uvidíte, kde jsem provedl práci na snížení tohoto varování implementací vlastních atributových příkazů. Docela jednoduché. Stáhněte si a nainstalujte vše, co byste mohli potřebovat, a poté převraťte stránku a začneme pracovat.

Krok 2: Registry pro čtení a zápis

Registry pro čtení a zápis
Registry pro čtení a zápis

Shell AVR byl napsán především pro přístup k některým senzorům, které jsem připojil ke svému AVR. Začalo to jednoduchou LED diodou, poté přešlo na světelné senzory, teplotní senzory a nakonec na dva ultrazvukové snímače. avrsh může nastavit digitální komponenty těchto senzorů zápisem do registrů, které je ovládají. Manipulace s registry AVR za běhu Chcete -li získat seznam všech známých registrů ve vašem Arduinu, zadejte:

tiskové registry a získáte výtisk takto

Vím o následujících registrech:

TIFR0 PORTC TIFR1 PORTD TIFR2 DDRD PCIFR DDRB EIFR DDRC EIMSK PINB EECR PINC EEDR PIND SREG EEARL GPIOR0 EEARH GPIOR1 GTCCR GPIOR2 TCCR0A TCCR0B TCNT0 OCR0A OCR0B SPCR SPDR ACSR SMCR MCUSR MCUCR SPMCSR WDTCSR CLKPR PRR OSCCAL PCICR EICRA PCMSK0 PCMSK1 TIMSK0 TIMSK1 TIMSK2 ADCL ADCH ADCSRA ADCSRB ADMUX DIDR0 DIDR1 TCCR1A TCCR1B TCCR1C TCNT1L TCNT1H ICR1L ICR1H OCR1AL OCR1AH OCR1BL OCR1BH TCCR2A TCCR2B TCNT2 OCR2A OCR2B ASSR TWBR TWSR TWAR TWDR TWCR TWAMR UCSR Chcete -li zjistit, jak jsou jednotlivé bity nastaveny v libovolném registru, použijte příkaz cat nebo echo

kočka %GPIOR0 Zde žádám tlumočníka příkazů, aby zobrazil nebo zopakoval obsah registru I/O General Purpose I/O Register #0. Všimněte si znaku procenta (%) před názvem registru. Potřebujete to, abyste shellu naznačili, že se jedná o vyhrazené klíčové slovo identifikující registr. Typický výstup z příkazu echo vypadá takto

GPIOR0 (0x0) nastaveno na [00000000] Výstup zobrazuje název registru, hexadecimální hodnotu nalezenou v registru a binární reprezentaci registru (každý bit ukazuje jako 1 nebo 0). Chcete -li nastavit konkrétní bit v libovolném registru, použijte operátor „index“. Řekněme například, že chci 3. bit na 1

%GPIOR0 [3] = 1 a shell vám odpoví, že je to akce a výsledek

GPIOR0 (0x0) nastaveno na [00000000] (0x8) nastaveno na [00001000] Nezapomeňte na znak procenta, abyste řekli shellu, že pracujete s registrem. Všimněte si také, že nastavením 3. bitu jsou to 4 bity, protože naše AVR používají index založený na nule. Jinými slovy, počítáním do 3. bitu počítáte 0, 1, 2, 3, což je 4. místo, ale 3. bit. Trochu můžete vymazat stejným způsobem nastavením bitu na nulu. Nastavením bitů, jako je tento, můžete měnit fungování AVR za běhu. Například změnou hodnoty shody časovače CTC nalezené v OCR1A. Také vám umožní nahlédnout do konkrétních nastavení, která byste museli programově zkontrolovat ve svém kódu, například hodnotu UBBR pro vaši přenosovou rychlost. Práce s DDRn, PORTn a PINn I/O piny jsou také přiřazeny k registrům a lze je nastavit úplně stejným způsobem, ale pro práci s těmito typy registrů byla vytvořena speciální syntaxe. V kódu existuje normální proces, řekněme, zapnutí LED nebo jiného zařízení, které vyžaduje digitální vysokou nebo nízkou úroveň. Vyžaduje nastavení registru Data Direction, aby indikoval, že pin je pro výstup, a poté zapsání 1 nebo 0 na konkrétní bit ve správném portu. Za předpokladu, že máme LED diodu připojenou k digitálnímu pinu 13 (PB5) a chceme ji zapnout, postupujte takto, když běží váš AVR

nastavit pin pb5 outputwrite pin pb5 high Výstup, kromě možnosti vidět rozsvícení LED, by vypadal takto

root@ATmega328p> nastavit výstup pin pb5 Nastavit pb5 pro výstupní kořen@ATmega328p> zapsat pin pb5 high Zapsat logiku vysoko na pin pb5 "Root@ATmega328p>" je výzva prostředí, která označuje, že je připravena přijímat příkazy od vás. Chcete -li vypnout LED, jednoduše byste na kolík zapsali nízkou úroveň. Pokud chcete číst digitální vstup z pinu, použijte příkaz read. Pomocí našeho výše uvedeného příkladu

root@ATmega328p> číst pin pb5Pin: pb5 je VYSOKÝ Alternativně stačí zopakovat registr pinů, který ovládá tento pinový port. Pokud například máme přepínače dip připojené k digitálnímu pinu 7 a 8 (PD7 a PD8), můžete odeslat příkaz

echo %PIND a shell by pak zobrazil obsah tohoto registru a ukázal vám všechny stavy vstupu/výstupu připojených zařízení a zda byl stav přepínače zapnutý nebo vypnutý.

Krok 3: Pojistky pro čtení a psaní

Pojistky na čtení a psaní
Pojistky na čtení a psaní

Pojistky jsou speciální typy registrů. Řídí vše od rychlosti hodin vašeho mikrokontroléru až po to, jaké metody programování jsou k dispozici pro ochranu paměti EEPROM proti zápisu. Někdy budete muset tato nastavení změnit, zvláště pokud vytváříte samostatný systém AVR. Nejsem si jistý, že byste měli změnit nastavení pojistky na Arduinu. Buďte opatrní s pojistkami; Pokud je nastavíte nesprávně, můžete se zablokovat. V předchozím pokynu jsem ukázal, jak můžete číst a nastavovat pojistky pomocí programátoru a avrdude. Zde vám ukážu, jak přečíst pojistky za běhu, abyste zjistili, jak je vaše MCU skutečně nastavilo. Všimněte si, že toto není nastavení času kompilace, které získáte z definic, ale skutečné pojistky, jak je MCU čte za běhu. Z tabulky 27-9 v datovém listu ATmega328P (datová kniha, více podobné) jsou bity Fuse Low Byte následující:

CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0Zajímavou věcí je, že u pojistek 0 znamená naprogramovaný a 1 znamená, že konkrétní bit není naprogramován. Trochu protiintuitivní, ale jakmile to víte, víte to.

  • CKDIV8 nastaví dělení hodin vašeho procesoru na 8. ATmega328P pochází z továrny naprogramované tak, aby používalo svůj interní oscilátor na 8 MHz s naprogramovaným CKDIV8 (tj. Nastaveno na 0), čímž získáte konečnou frekvenci F_CPU nebo CPU 1 MHz. U Arduina se to změnilo, protože jsou nakonfigurovány tak, aby používaly externí oscilátor na 16 MHz.
  • Když je CKOUT naprogramován, budou vaše hodiny CPU vystupovat na PB0, což je digitální pin 8 na Arduinos.
  • SUT [1..0] určuje čas spuštění vašeho AVR.
  • CKSEL [3..0] nastavuje zdroj hodin, jako je interní RC oscilátor, externí oscilátor atd.

Když si přečtete své pojistky, vrátí se vám v šestnáctkové soustavě. Toto je formát, který potřebujete, pokud chcete zapisovat pojistky pomocí avrdude. Na mém arduinu je to, co dostanu, když čtu spodní pojistkový bajt:

root@ATmega328p> přečtěte lfuseLower Fuse: 0xffVšechny bity jsou tedy nastaveny na 1. Udělal jsem stejný postup na klonu Arduino a získal stejnou hodnotu. Při kontrole jednoho z mých samostatných systémů AVR jsem dostal 0xDA, což je hodnota, kterou jsem nastavil před nějakou dobou při konfiguraci čipu. Stejný postup se používá pro kontrolu pojistek High Fuse Byte, Extended Fuse Byte a Lock. Byty kalibrace a pojistky podpisu byly v kódu deaktivovány pomocí direktivy preprocesoru #if 0, kterou můžete změnit, pokud se cítíte skoupě.

Krok 4: Další příkazy

Další příkazy
Další příkazy

Existuje několik dalších příkazů, které výchozí interpret příkazů chápe jako užitečné. Můžete zobrazit všechny implementované a budoucí příkazy vydáním nápovědy nebo nabídky na výzvu. Rychle je zde uvedu, protože jsou většinou samozřejmé. Nastavení frekvence hodin CPU Můžete zjistit, jaký byl váš firmware nakonfigurován pro použití jako nastavení hodin CPU pomocí příkazu fcpu:

root@ATmega328p> Frekvence fcpuCPU: 16000000To je 16 milionů nebo 16 milionů herzů, běžněji známých jako 16 MHz. To můžete kdykoli změnit z jakéhokoli důvodu pomocí příkazu hodin. Tento příkaz má jeden argument: předzesilovač, který se použije při dělení rychlosti hodin. Příkaz hodin rozumí těmto hodnotám předřazeného snímače:

  • ckdiv2
  • ckdiv4
  • ckdiv8
  • ckdiv16
  • ckdiv32
  • ckdiv64
  • ckdiv128
  • ckdiv256

Pomocí příkazu:

hodiny ckdiv2 když je vaše rychlost procesoru 16 MHz, vaše hodinová rychlost se změní na 8 MHz. Použití prescaleru ckdiv64 s počátečním taktem 16 MHz bude mít za následek konečný takt 250 KHz. Proč bys na Zemi chtěl zpomalit svůj MCU? Za prvé, nižší rychlost hodin spotřebovává méně energie a pokud máte v MCU vybitou baterii v projektové skříni, možná ji nebudete potřebovat k provozu na nejvyšší rychlost, a proto můžete snížit rychlost a snížit spotřebu energie, což zvyšuje životnost baterie. Také, pokud používáte hodiny pro jakýkoli druh problémů s časováním s jiným MCU, řekněme, implementací softwarového UART nebo něčeho podobného, možná budete chtít nastavit konkrétní hodnotu, se kterou snadno dosáhnete pěkné dokonce přenosové rychlosti s nižší chybovost. Zapnutí a vypnutí periferních podsystémů Na základě stejné poznámky jako o snížení spotřeby energie zmíněné výše můžete chtít dále snížit spotřebu vypnutím některých vestavěných periferií, které nepoužíváte. Tlumočník příkazů a shell mohou aktuálně zapínat a vypínat následující periferie:

  • Analogově digitální převodník (ADC). Tato periferie se používá, pokud máte analogový snímač poskytující data (jako je teplota, světlo, zrychlení atd.) A potřebujete jej převést na digitální hodnotu.
  • Sériové periferní rozhraní (SPI). Sběrnice SPI se používá ke komunikaci s dalšími zařízeními podporujícími SPI, jako jsou externí paměti, ovladače LED, externí ADC atd. Části SPI se používají pro programování ISP nebo alespoň kolíky, takže při vypínání buďte opatrní pokud programujete přes ISP.
  • Dvouvodičové rozhraní. Některá externí zařízení používají ke komunikaci sběrnici I2C, i když jsou rychle nahrazována zařízeními s podporou SPI, protože SPI má větší propustnost.
  • USART. Toto je vaše sériové rozhraní. Pokud jste k AVR připojeni přes sériové připojení, pravděpodobně to nechcete vypnout! Přidal jsem to sem jako kostru pro přenos na zařízení, která mají více USART jako ATmega162 nebo ATmega644P.
  • Všechno. Tento argument příkazu powerup nebo powerdown zapne všechna uvedená periferie nebo je všechny vypne jedním příkazem. Znovu použijte tento příkaz moudře.

root@ATmega328p> powerdown twiPowerdown twi Complete.root@ATmega328p> powerup twiPowerup of twi Complete.

Spouštěcí a zastavovací časovače Shell má vestavěný 16bitový časovač, který je k dispozici k použití. Časovač spustíte příkazem časovače:

spuštění časovačea zastavte časovač argumentem stop

zastavení časovačeTento časovač nebude v rozporu s interním časovačem USART. Pokud vás tento druh krvavých detailů zajímá, podívejte se na kód pro podrobnosti implementace časovače USART

root@ATmega328p> spuštění časovače Spuštěno timer.root@ATmega328p> stop časovače Uplynulý čas: ~ 157 sekund Ověření Shell může do EEPROM uložit 8místné heslo. Tento mechanismus hesel byl vytvořen pro podporu možností přihlášení k telnetu, ale mohl být rozšířen tak, aby chránil další věci. Prostřednictvím mechanizmu ověřování můžete například vyžadovat určité příkazy, například změnu hodnot registru. Nastavte heslo pomocí příkazu heslo

root@ATmega328p> passwd blah Napište heslo root do EEPROMAutorizujte proti heslu (nebo vyžadujte autorizaci programově prostřednictvím kódu) pomocí příkazu auth. Pamatujte, že pokud se pokusíte změnit heslo uživatele root a již je nastaveno heslo uživatele root, musíte se autorizovat proti starému heslu, než jej budete moci změnit na nové heslo.

root@ATmega328p> passwd blinky Nejprve se musíte autorizovat.root@ATmega328p> auth blahAuthorized.root@ATmega328p> passwd blinky Napište NOVÉ heslo root do EEPROMSamozřejmě budete muset načíst soubor avrsh.eep, pokud vymažete firmware, aby se obnovily vaše staré hodnoty a proměnné. Soubor Makefile pro vás vytvoří soubor EEPROM. Proměnné Shell rozumí pojmu uživatelem definovaných proměnných. Kód to omezuje na 20, ale můžete to změnit, pokud chcete, změnou definování MAX_VARIABLES v script.h. Můžete uložit libovolnou 16bitovou hodnotu (tj. Libovolné číslo až 65, 536) do proměnné, kterou chcete později vyvolat. Syntaxe je podobná registrům, kromě označení dolaru ($) se používá k označení proměnných prostředí. Seznam všech vašich proměnných pomocí příkazu print variables

tisk proměnných Uživatelem definované proměnné: Název indexu -> Hodnota (01): $ ZDARMA $ -> 0 (02): $ ZDARMA $ -> 0 (03): $ ZDARMA $ -> 0 (04): $ ZDARMA $ -> 0 (05): $ ZDARMA $ -> 0 (06): $ ZDARMA $ -> 0 (07): $ ZDARMA $ -> 0 (08): $ ZDARMA $ -> 0 (09): $ ZDARMA $ -> 0 (10): $ ZDARMA $ -> 0 (11): $ ZDARMA $ -> 0 (12): $ ZDARMA $ -> 0 (13): $ ZDARMA $ -> 0 (14): $ ZDARMA $ -> 0 (15): $ ZDARMA $ -> 0 (16): $ ZDARMA $ -> 0 (17): $ ZDARMA $ -> 0 (18): $ ZDARMA $ -> 0 (19): $ ZDARMA $ -> 0 (20): $ ZDARMA $ -> 0 Dokončeno. Nastavit proměnnou

$ newvar = 25 $ časový limit = 23245Získejte hodnotu dané proměnné

root@ATmega328p> echo $ newvar $ newvar 25Můžete vidět, jaké všechny proměnné, které jste aktuálně vytvořili, pomocí příkazu print, který již znáte

Uživatelem definované proměnné: Název indexu -> Hodnota (01): newvar -> 25 (02): časový limit -> 23245 (03): $ ZDARMA $ -> 0 (04): $ ZDARMA $ -> 0 (05): $ ZDARMA $ -> 0 (06): $ ZDARMA $ -> 0 (07): $ ZDARMA $ -> 0 (08): $ ZDARMA $ -> 0 (09): $ ZDARMA $ -> 0 (10): $ ZDARMA $ -> 0 (11): $ ZDARMA $ -> 0 (12): $ ZDARMA $ -> 0 (13): $ ZDARMA $ -> 0 (14): $ ZDARMA $ -> 0 (15): $ ZDARMA $ -> 0 (16): $ ZDARMA $ -> 0 (17): $ ZDARMA $ -> 0 (18): $ ZDARMA $ -> 0 (19): $ ZDARMA $ -> 0 (20): $ ZDARMA $ -> 0 Dokončeno. Název $ FREE $ pouze naznačuje, že umístění proměnné je bezplatné a dosud mu nebyl přiřazen název proměnné.

Krok 5: Přizpůsobení prostředí

Přizpůsobení prostředí
Přizpůsobení prostředí

Pokud chcete, můžete hackovat kód a přizpůsobit si ho svým vlastním potřebám. Kdybych věděl, že tento kód uvolním, vytvořil bych samostatnou třídu překladače příkazů a strukturu příkazů a jednoduše bych iteroval prostřednictvím volání ukazatele funkce. Snížilo by to množství kódu, ale jak to stojí, shell analyzuje příkazový řádek a volá příslušnou metodu shellu. Chcete -li přidat vlastní příkazy, proveďte následující: 1. Přidejte svůj příkaz do seznamu analýzy Analyzátor příkazů provede analyzujte příkazový řádek a zadejte příkaz a všechny argumenty samostatně. Argumenty jsou předávány jako ukazatele na ukazatele nebo pole ukazatelů, jakkoli s nimi chcete pracovat. To se nachází v shell.cpp. Otevřete shell.cpp a najděte metodu ExecCmd třídy AVRShell. Možná budete chtít přidat příkaz do paměti programu. Pokud tak učiníte, přidejte příkaz do progmem.h a progmem.cpp. Příkaz můžete přidat do programové paměti přímo pomocí makra PSTR (), ale vygenerujete další varování výše uvedeného typu. Opět se jedná o známou chybu, která pracuje s C ++, ale můžete to obejít přidáním příkazu přímo do souborů progmem.*, Jak jsem to udělal. Pokud vám nevadí přidání do vašeho použití SRAM, můžete přidat příkaz, jak jsem ilustroval pomocí příkazu „hodiny“. Řekněme, že chcete přidat nový příkaz s názvem „newcmd“. Přejděte na AVRShell:: ExecCmd a najděte vhodné místo pro vložení následujícího kódu:

else if (! strcmp (c, "newcmd")) cmdNewCmd (args);Tím se přidá váš příkaz a zavolá metoda cmdNewCmd, kterou napíšete v dalším kroku. 2. Napište vlastní kód příkazu Do stejného souboru přidejte kód vlastního příkazu. Toto je definice metody. Stále budete chtít přidat deklaraci do shellu.h. Stačí jej připojit k ostatním příkazům. V předchozím příkladu může kód vypadat nějak takto

voidAVRShell:: cmdNewCmd (char ** args) {sprintf_P (buff, PSTR ("Váš příkaz je %s / r / n", args [0]); WriteRAM (buff);}Tady je několik věcí. Za prvé, „buff“je vyrovnávací paměť pole se 40 znaky poskytovaná v kódu pro vaše použití. Používáme verzi paměti sprintf s programovou pamětí, protože jí předáváme PSTR. Pokud chcete, můžete použít běžnou verzi, ale ujistěte se, že nepředáte formát v PSTR. Argumenty jsou také v poli args. Pokud jste zadali „newcmd arg1 arg2“, můžete tyto argumenty získat pomocí předplatného args [0] a args [1]. Můžete předat maximálně MAX_ARGS argumentů, jak jsou definovány v kódu. Pokud potřebujete znovu předat více argumentů najednou, můžete tuto hodnotu při překompilování změnit. WriteLine a WriteRAM jsou globální funkce, které vrací stejnojmenné metody UART. Druhý argument této funkce je implicitní. Pokud nic nepředáte, bude poté napsán příkazový řádek. Pokud jako 2. argument zadáte 0, výzva nebude napsána. To je užitečné, pokud chcete zapsat několik samostatných řetězců na výstup, než se uživateli vrátí příkazový řádek. 3. Nechte shell spustit příkazový kód Už jste řekli shell exekutorovi, aby provedl metodu cmdNewCmd při nastavování nového příkazu, ale přidejte jej do souboru shell.h, aby byl pochopen objektem shell. Stačí jej přidat pod poslední příkaz nebo před první příkaz nebo kdekoli jinde. A je to. Znovu zkompilujte a nahrajte firmware do svého Arduina a váš nový příkaz je k dispozici z shellu na výzvu.

Krok 6: Shrnutí

Měli byste vědět, jak nainstalovat a připojit se k vašemu AVR/Arduino a získat živou výzvu na běžícím mikrokontroléru. Znáte několik příkazů, které budou za běhu načítat běhové údaje z MCU nebo nastavovat hodnoty do MCU. Také vám bylo ukázáno, jak přidat svůj vlastní vlastní kód pro vytvoření vlastních jedinečných příkazů do shellu a dále jej přizpůsobit pro své vlastní potřeby. Můžete dokonce vykuchat překladač příkazů tak, aby obsahoval pouze vaše vlastní příkazy, pokud to vyhovuje vašim potřebám. Doufám, že se vám tento instruktáž líbil a že prostředí AVR Shell může být pro vás užitečné, ať už jako interpret příkazů v reálném čase nebo jako učební proces při implementaci vlastního. Jako vždy se těším na jakékoli komentáře nebo návrhy, jak lze tento instruktáž vylepšit! Bavte se s AVR!

Doporučuje: