Sadržaj:

AVRSH: ljuska naredbenog tumača za Arduino/AVR .: 6 koraka (sa slikama)
AVRSH: ljuska naredbenog tumača za Arduino/AVR .: 6 koraka (sa slikama)

Video: AVRSH: ljuska naredbenog tumača za Arduino/AVR .: 6 koraka (sa slikama)

Video: AVRSH: ljuska naredbenog tumača za Arduino/AVR .: 6 koraka (sa slikama)
Video: CS50 2014 – 4-я неделя 2024, Srpanj
Anonim
AVRSH: ljuska naredbenog tumača za Arduino/AVR
AVRSH: ljuska naredbenog tumača za Arduino/AVR

Jeste li ikada htjeli biti "prijavljeni" na svoj AVR mikrokontroler? Jeste li ikada pomislili da bi bilo super "mačiti" registar da vidite njegov sadržaj? Jeste li oduvijek željeli način uključivanja i isključivanja pojedinih perifernih podsustava vašeg AVR-a ili Arduina u * stvarnom vremenu *? I ja sam, pa sam napisao AVR ljusku, ljusku sličnu UNIX-u. Nalik je UNIX-u jer podsjeća na ljuska račun koji ste izišli i kupili da biste pokrenuli irc nick bote za sukob, kao i da ima naredbu ili dvije zajedničke. Također ima datotečni sustav koji podsjeća na UNIX extfs, koristeći vanjski EEPROM, ali to je postao projekt za sebe pa ću taj modul izdvojiti zasebno pod različitim instrukcijama kada bude spreman za proizvodnju. Evo popisa stvari koje trenutno možete raditi s AVR ljuskom:

  • Pročitajte sve svoje registre smjerova podataka (DDRn), portove i pinove u stvarnom vremenu
  • Pišite na sve svoje DDRn-ove, portove i pinove za uključivanje motora, LED-a ili senzore za čitanje u stvarnom vremenu
  • Navedite sve poznate registre u sustavu
  • Stvaranje i pohranjivanje vrijednosti u korisnički definiranim varijablama uz sigurnosnu kopiju EEPROM-a.
  • Izradite root lozinku i provjerite autentičnost prema njoj (koristi se za pristup telnetu)
  • Pročitajte konfiguriranu brzinu takta CPU -a
  • Promijenite brzinu takta procesora postavljanjem predmjerača
  • Pokretanje i zaustavljanje 16-bitnih mjerača vremena za mjerenje vremena
  • Uključivanje i/ili isključivanje perifernih podsustava: analogno-digitalni pretvarači (ADC), serijsko periferno sučelje (SPI), dvožično sučelje (TWI/I2C), UART/USART. Korisno kada želite smanjiti potrošnju energije mikrokontrolera ili omogućiti određene funkcije.
  • Napisano na C ++ s objektima za višekratnu upotrebu.

Ovo uputstvo će proći kroz instalaciju, upotrebu i prilagođavanje avrsh -a.

Korak 1: Što će vam trebati

Što će vam trebati
Što će vam trebati

Ovo uputstvo ne zahtijeva mnogo osim što trebate:

  • Imajte Arduino ili ATmega328P. Drugi AVR -i bi mogli funkcionirati, ali možda ćete morati izmijeniti kôd kako biste naveli sve registre koji su jedinstveni za vaš MCU. Imena se samo moraju podudarati s onim što je navedeno u datoteci zaglavlja jedinstvenoj za vaš MCU. Mnogi nazivi registra isti su među AVR -ovima, pa se vaša kilometraža može razlikovati prilikom prijenosa.
  • Imajte način povezivanja sa serijskim USART -om vašeg Arduina/AVR -a. Sustav je najopsežnije testiran s AVR Terminalom, Windows aplikacijom koja uspostavlja serijsku vezu putem vašeg USB ili COM priključka. Radi s Arduinosom putem USB veze i bilo kojim AVR-om koristeći USB-BUB s Moderndevice.com. Ostale opcije terminala uključuju: Putty, minicom (Linux i FreeBSD), zaslon (Linux/FreeBSD), Hyperterminal, Teraterm. Otkrio sam da kit i teraterm šalju malo smeća prilikom povezivanja pa bi vaša prva naredba mogla biti iskrivljena.
  • Instalirajte i pokrenite firmver ljuske AVR, koji možete preuzeti sa ovih stranica, ili uvijek nabavite najnoviju verziju na BattleDroids.net.

Da biste instalirali AVR terminal, samo ga raspakirajte i pokrenite. Da biste instalirali firmver AVR Shell, preuzmite ga ili izravno prenesite heksadecimalnu datoteku i povežite serijski terminal na 9600 bauda ili je sami sastavite s "napravi", a zatim "napravi program" za učitavanje heksa. Napomena, možda ćete morati promijeniti postavke AVRDUDE tako da odražavaju vaš COM port. Napomena: Atribut PROGMEM je pokvaren u trenutnoj implementaciji AVR GCC -a za C ++, a to je poznata greška. Ako ga sastavite, očekujte da ćete dobiti mnogo poruka upozorenja "upozorenje: samo se inicijalizirane varijable mogu staviti u memorijsko područje programa." Osim što je neugodno za vidjeti, ovo upozorenje je bezopasno. Budući da C ++ na ugrađenoj platformi nije visoko na listi prioriteta AVR GCC -a, nije poznato kada će se to popraviti. Ako provjerite kôd, vidjet ćete gdje sam se potrudio smanjiti ovo upozorenje primjenom vlastitih izjava o atributima. Prilično jednostavno. Preuzmite i instalirajte sve što vam može zatrebati, a zatim preokrenite stranicu i krenimo.

Korak 2: Čitanje i pisanje registara

Čitanje i pisanje registara
Čitanje i pisanje registara

AVR ljuska je prvenstveno napisana za pristup nekim senzorima koje sam povezao sa svojim AVR -om. Počelo je s jednostavnom LED, a zatim prešlo na svjetlosne senzore, temperaturne senzore i na kraju na dva ultrazvučna pretvarača. avrsh može postaviti digitalne komponente ovih senzora upisivanjem u registre koji ih kontroliraju. Manipuliranje AVR registrima tijekom izvođenja Da biste dobili popis svih poznatih registara na svom Arduinu, upišite:

tiskarski registri i dobit ćete ispis koji izgleda ovako

Znam za sljedeće registre:

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 TWCR TWSR TWRWSRR TWSR TWSR Da biste vidjeli kako su pojedini bitovi postavljeni u bilo kojem registru, upotrijebite naredbu cat ili echo

mačka %GPIOR0 Ovdje tražim od prevoditelja naredbi da prikaže ili odjekne sadržaj U/I registra opće namjene #0. Zabilježite znak postotka (%) ispred naziva registra. Ovo vam je potrebno da naznačite ljusci da je to rezervirana ključna riječ koja identificira registar. Tipičan izlaz iz naredbe echo izgleda ovako

GPIOR0 (0x0) postavljeno na [00000000] Izlaz prikazuje naziv registra, heksadecimalnu vrijednost koja se nalazi u registru i binarni prikaz registra (prikazuje svaki bit kao 1 ili 0). Za postavljanje određenog bita u bilo koji registar, koristite operator "index of" . Na primjer, recimo da želim 3. bit na 1

%GPIOR0 [3] = 1 i ljuska će vam dati odgovor ukazujući na njezinu radnju i rezultat

GPIOR0 (0x0) postavljeno na [00000000] (0x8) postavljeno na [00001000] Ne zaboravite znak postotka da biste ljusci rekli da radite s registrom. Također imajte na umu da postavljanjem trećeg bita to je 4 bita jer naši AVR-i koriste indeks temeljen na nuli. Drugim riječima, računajući do 3. bita računate 0, 1, 2, 3, što je 4. mjesto, ali 3. bit. Možete izbrisati bit na isti način postavljanjem bita na nulu. Postavljanjem ovakvih bitova možete promijeniti rad svog AVR -a u hodu. Na primjer, promjenom vrijednosti podudaranja CTC mjerača koja se nalazi u OCR1A. Također vam omogućuje da zavirite u određene postavke koje biste morali programski provjeriti u svom kodu, poput vrijednosti UBBR za vašu brzinu prijenosa. Rad s DDRn, PORTn i PINn I/O pinovi su također dodijeljeni registrima i mogu se postaviti na potpuno isti način, ali za rad s tim vrstama registara stvorena je posebna sintaksa. U kodu postoji normalan postupak za, recimo, uključivanje LED -a ili drugog uređaja koji zahtijeva digitalno visoko ili nisko. Potrebno je postaviti Registar smjera podataka da označi da je pin za izlaz, a zatim upisati 1 ili 0 na određeni bit u ispravnom priključku. Pod pretpostavkom da imamo LED spojen na digitalni pin 13 (PB5) i želimo ga uključiti, evo kako to učiniti dok vaš AVR radi

postavite pin pb5 outputwrite pin pb5 visoko Osim što bi mogao vidjeti kako se LED dioda uključuje, izlaz bi izgledao ovako

root@ATmega328p> postavi pin pb5 outputPostavi pb5 za outputroot@ATmega328p> upiši pin pb5 visoko Zapisao logiku visoko na pin pb5 "Root@ATmega328p>" je upit ljuske koji pokazuje da je spremna prihvatiti naredbe od vas. Da biste isključili LED, jednostavno biste napisali nisku vrijednost na pin. Ako želite čitati digitalni ulaz sa pina, upotrijebite naredbu za čitanje. Koristeći naš gornji primjer

root@ATmega328p> pin za čitanje pb5Pin: pb5 je VISOK Alternativno, samo odjeknite pin registrom koji kontrolira taj pin port. Na primjer, ako imamo dip prekidače spojene na digitalni pin 7 i 8 (PD7 i PD8), mogli biste poslati naredbu

odjek %PIND i ljuska bi tada prikazala sadržaj tog registra, pokazujući vam sva ulazna/izlazna stanja spojenih uređaja i je li stanje prekidača uključeno ili isključeno.

Korak 3: Osigurači za čitanje i pisanje

Osigurači za čitanje i pisanje
Osigurači za čitanje i pisanje

Osigurači su posebne vrste registra. Oni kontroliraju sve, od brzine takta vašeg mikrokontrolera do dostupnih programskih metoda za zaštitu od pisanja EEPROM-a. Ponekad ćete morati promijeniti ove postavke, osobito ako stvarate samostalni AVR sustav. Nisam siguran da biste trebali promijeniti postavke osigurača na Arduinu. Budite oprezni s osiguračima; možete se zaključati ako ste ih krivo postavili. U prethodnim uputama pokazao sam kako možete čitati i postavljati osigurače pomoću programatora i avrdudea. Ovdje ću vam pokazati kako očitati vaše osigurače za vrijeme rada kako biste vidjeli kako ih je vaš MCU zapravo postavio. Imajte na umu da ovo nije vrijeme kompiliranja koje dobivate iz definicija u, već stvarni osigurači dok ih MCU čita tijekom izvođenja. Iz tablice 27-9 u podatkovnom listu ATmega328P (podatkovna knjiga, sličnije) bitovi niskog bajta osigurača su sljedeći:

CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0Zanimljivo je napomenuti da s osiguračima 0 znači programirano, a 1 znači da je taj određeni bit neprogramiran. Pomalo kontra-intuitivno, ali jednom kad to znate, to znate.

  • CKDIV8 postavlja sat vašeg CPU -a tako da se podijeli s 8. ATmega328P dolazi iz tvornice programirane za korištenje svog unutarnjeg oscilatora na 8MHz s programiranim CKDIV8 (tj. Postavljenim na 0) dajući konačni F_CPU ili CPU frekvenciju od 1MHz. Na Arduinu se to mijenja jer su konfigurirani za korištenje vanjskog oscilatora na 16MHz.
  • CKOUT kada je programiran izlazit će vaš CPU sat na PB0, što je digitalni pin 8 na Arduinosu.
  • SUT [1..0] određuje vrijeme pokretanja vašeg AVR -a.
  • CKSEL [3..0] postavlja izvor takta, poput unutarnjeg RC oscilatora, vanjskog oscilatora itd.

Kad pročitate osigurače, bit će vam vraćeni u heksadecimalnom obliku. Ovo je format koji vam je potreban ako želite napisati osigurače putem avrdudea. Na svom arduinu evo što dobivam kad pročitam donji bajt osigurača:

root@ATmega328p> pročitajte lfuseLower Fuse: 0xffDakle, svi su bitovi postavljeni na 1. Uradio sam isti postupak na Arduino klonu i dobio istu vrijednost. Provjeravajući jedan od svojih samostalnih AVR sustava, dobio sam 0xDA što je vrijednost koju sam postavio neko vrijeme unatrag prilikom konfiguriranja čipa. Isti se postupak koristi za provjeru bajta visokog osigurača, produženog bajta osigurača i zaključavanja osigurača. Bajt kalibracije i potpis osigurača su onemogućeni u kodu s direktivom #if 0 predprocesora, koju možete promijeniti ako se osjećate otrcano.

Korak 4: Ostale naredbe

Ostale naredbe
Ostale naredbe

Postoji nekoliko drugih naredbi za koje tumač zadanih naredbi razumije da bi vam mogle biti korisne. Možete vidjeti sve implementirane naredbe i naredbe za buduće izdanje izdavanjem pomoći ili izbornika na upit. Ovdje ću ih brzo pokriti jer su uglavnom jasne same po sebi. Postavke frekvencije takta procesora Pomoću naredbe fcpu možete saznati što je vaš firmver konfiguriran za upotrebu kao postavke takta procesora:

root@ATmega328p> fcpu CPU učestalost: 16000000To je 16 milijuna ili 16 milijuna herca, poznatijih kao 16 MHz. To možete promijeniti u hodu, iz bilo kojeg razloga, pomoću naredbe clock. Ova naredba ima jedan argument: predskaler za korištenje pri dijeljenju brzine takta. Naredba clock razumije ove vrijednosti predkalera:

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

Pomoću naredbe:

sat ckdiv2 kada je brzina vašeg CPU -a 16MHz rezultiralo bi promjenom takta na 8MHz. Korištenje pretkalerara ckdiv64 s početnom taktom od 16 MHz rezultirat će konačnom taktom od 250 KHz. Zašto biste, zaboga, htjeli usporiti svoj MCU? Pa, s jedne strane, niža brzina takta troši manje energije, a ako vaš MCU troši bateriju u kućištu projekta, možda vam neće trebati da radi najvećom brzinom, pa biste stoga mogli smanjiti brzinu i smanjiti potrošnju energije, produžavajući vijek trajanja baterije. Također, ako koristite sat za bilo kakve vremenske probleme s drugim MCU -om, recimo, za implementaciju softverskog UART -a ili nešto slično, možda ćete ga htjeti postaviti na određenu vrijednost s kojom je lako postići lijepu ravnomjernu brzinu prijenosa niže stope pogrešaka. Uključivanje i isključivanje perifernih podsustava Isto kao i prethodno spomenuto smanjenje potrošnje energije, možda ćete htjeti dodatno smanjiti napajanje isključivanjem nekih ugrađenih perifernih uređaja koje ne koristite. Tumač naredbi i ljuska trenutno mogu uključiti i isključiti sljedeće periferne uređaje:

  • Analogno-digitalni pretvarač (ADC). Ovaj periferni uređaj koristi se kada imate analogni senzor koji daje podatke (poput temperature, svjetlosti, ubrzanja itd.) I trebate ga pretvoriti u digitalnu vrijednost.
  • Serijsko periferno sučelje (SPI). SPI sabirnica koristi se za komunikaciju s drugim uređajima s omogućenim SPI-om, poput vanjske memorije, LED upravljačkih programa, vanjskih ADC-ova itd. Dijelovi SPI-a koriste se za programiranje ISP-a ili barem pinovi, stoga budite oprezni pri isključivanju ako programirate putem ISP -a.
  • Dvožično sučelje. Neki vanjski uređaji koriste I2C sabirnicu za komunikaciju, iako se oni brzo zamjenjuju uređajima s omogućenim SPI jer SPI ima veću propusnost.
  • USART. Ovo je vaše serijsko sučelje. Ovo vjerojatno ne želite isključiti ako ste povezani s AVR -om putem serijske veze! Međutim, ovo sam dodao ovdje kao kostur za prijenos na uređaje koji imaju više USART -ova poput ATmega162 ili ATmega644P.
  • svi. Ovaj argument naredbi za uključivanje ili isključivanje uključuje sve spomenute periferne uređaje ili ih isključuje jednom naredbom. Opet, koristite ovu naredbu mudro.

root@ATmega328p> poweri twiPowerdown twi potpuna.root@ATmega328p> powerup twiPowerup twi potpuna.

Pokretanje i zaustavljanje mjerača vremena Ljuska ima ugrađen 16-bitni mjerač vremena koji je dostupan za upotrebu. Tajmer pokrećete naredbom timer:

timer starti zaustavite mjerač vremena argumentom stop

mjerač vremenaTaj mjerač vremena neće biti u sukobu s internim USART mjeračem vremena. Pojedinosti o implementaciji USART timera potražite u kodu ako vas zanimaju takve krvave pojedinosti

root@ATmega328p> timer startStarted timer.root@ATmega328p> timer stopProteklo vrijeme: ~ 157 sekundi Autentikacija ljuska može pohraniti lozinku od 8 znakova u EEPROM. Ovaj mehanizam zaporke kreiran je kako bi podržao mogućnosti prijavljivanja na telnet, ali se mogao proširiti radi zaštite drugih stvari. Na primjer, mogli biste zahtijevati određene naredbe, poput promjene vrijednosti registra, putem mehanizma provjere autentičnosti. Postavite lozinku pomoću naredbe lozinka

root@ATmega328p> passwd blahZapisao je root lozinku na EEPROMAutorizirajte protiv lozinke (ili zahtijevajte autorizaciju programski putem koda) pomoću naredbe auth. Imajte na umu da ako pokušate promijeniti root lozinku, a već je postavljena root lozinka, morate se autorizirati prema staroj lozinki prije nego što vam bude dopušteno promijeniti je u novu lozinku

root@ATmega328p> passwd blinkyMorate se prvo autorizirati.root@ATmega328p> auth blahAuthorized.root@ATmega328p> passwd blinkyNapisali ste novu root lozinku na EEPROMNaravno, morat ćete učitati datoteku avrsh.eep ako izbrišete firmver da biste vratili svoje stare vrijednosti i varijable. Makefile će za vas stvoriti EEPROM datoteku. Varijable ljuska razumije pojam korisnički definiranih varijabli. Kod ograničava ovo na 20, ali to možete promijeniti ako želite promjenom definiranja MAX_VARIABLES u script.h. Možete spremiti bilo koju 16-bitnu vrijednost (to jest bilo koji broj do 65, 536) u varijablu koju ćete kasnije pozvati. Sintaksa je slična registrima, osim što se znak dolara ($) koristi za označavanje varijabli ljuske. Navedite sve svoje varijable naredbom print variables

ispis varijabliKorisnički definirane varijable: Naziv indeksa -> Vrijednost (01): $ FREE $ -> 0 (02): $ FREE $ -> 0 (03): $ FREE $ -> 0 (04): $ FREE $ -> 0 (05): $ FREE $ -> 0 (06): $ FREE $ -> 0 (07): $ FREE $ -> 0 (08): $ FREE $ -> 0 (09): $ FREE $ -> 0 (10): $ FREE $ -> 0 (11): $ FREE $ -> 0 (12): $ FREE $ -> 0 (13): $ FREE $ -> 0 (14): $ FREE $ -> 0 (15): $ FREE $ -> 0 (16): $ FREE $ -> 0 (17): $ FREE $ -> 0 (18): $ FREE $ -> 0 (19): $ FREE $ -> 0 (20): $ BESPLATNO $ -> 0Dovršeno. Postavite varijablu

$ newvar = 25 $ timeout = 23245Dobijte vrijednost zadane varijable

root@ATmega328p> echo $ newvar $ newvar 25Možete vidjeti koje sve varijable koje ste trenutno pokrenuli naredbom ispisa već poznajete

Korisnički definirane varijable: Naziv indeksa -> Vrijednost (01): newvar -> 25 (02): istek - -23245 (03): $ FREE $ -> 0 (04): $ FREE $ -> 0 (05): $ FREE $ -> 0 (06): $ FREE $ -> 0 (07): $ FREE $ -> 0 (08): $ FREE $ -> 0 (09): $ FREE $ -> 0 (10): $ FREE $ -> 0 (11): $ FREE $ -> 0 (12): $ FREE $ -> 0 (13): $ FREE $ -> 0 (14): $ FREE $ -> 0 (15): $ FREE $ -> 0 (16): $ FREE $ -> 0 (17): $ FREE $ -> 0 (18): $ FREE $ -> 0 (19): $ FREE $ -> 0 (20): $ BESPLATNO $ -> 0Dovršeno. Naziv $ FREE $ samo označava da je ta varijabla besplatna i da joj još nije dodijeljen naziv varijable.

Korak 5: Prilagođavanje ljuske

Prilagođavanje ljuske
Prilagođavanje ljuske

Možete slobodno hakirati kôd i prilagoditi ga svojim potrebama, ako želite. Da sam znao da ću objaviti ovaj kôd, napravio bih zasebnu klasu interpretatora naredbe i strukturu naredbe i jednostavno ponovio ovaj poziv pokazivača funkcije. Time bi se smanjila količina koda, ali kako stoji ljuska analizira naredbeni redak i poziva odgovarajuću metodu ljuske. Da biste dodali vlastite prilagođene naredbe, učinite sljedeće: 1. Dodajte svoju naredbu na popis za raščlanjivanje Analizator naredbi će raščlanite naredbeni redak i zasebno će vam dati naredbu i sve argumente. Argumenti se prosljeđuju kao pokazivači na pokazivače ili niz pokazivača, kako god želite raditi s njima. To se nalazi u shell.cpp. Otvorite shell.cpp i pronađite ExecCmd metodu klase AVRShell. Naredbu možete dodati u memoriju programa. Ako to učinite, dodajte naredbu u progmem.h i progmem.cpp. Naredbu možete dodati u memoriju programa izravno pomoću makronaredbe PSTR (), ali ćete generirati još jedno upozorenje ranije spomenute vrste. Opet, ovo je poznata greška koja radi s C ++, ali to možete zaobići dodavanjem naredbe izravno u datoteke progmem.*, Kao što sam i učinio. Ako vam ne smeta dodavanje vaše upotrebe SRAM -a, možete dodati naredbu kao što sam prikazao naredbom "clock". Recimo da ste htjeli dodati novu naredbu pod nazivom "newcmd." Idite na AVRShell:: ExecCmd i pronađite prikladno mjesto za umetanje sljedećeg koda:

else if (! strcmp (c, "newcmd")) cmdNewCmd (args);Ovo će dodati vašu naredbu i pozvati metodu cmdNewCmd koju ćete napisati u sljedećem koraku. 2. Upišite prilagođeni kod naredbe U istu datoteku dodajte prilagođeni kod naredbe. Ovo je definicija metode. I dalje ćete htjeti dodati deklaraciju u shell.h. Samo ga dodajte drugim naredbama. U prethodnom primjeru kôd bi mogao izgledati otprilike ovako

voidAVRShell:: cmdNewCmd (char ** args) {sprintf_P (buff, PSTR ("Vaša naredba je %s / r / n", args [0]); WriteRAM (buff);}Ovdje postoji nekoliko stvari. Prvo, "buff" je međuspremnik niza od 40 znakova koji se nalazi u kodu za vašu upotrebu. Koristimo memorijsku verziju programa sprintf jer joj prosljeđujemo PSTR. Možete koristiti uobičajenu verziju ako želite, ali pazite da ne prenesete format u PSTR -u. Također, argumenti su u nizu args. Ako ste upisali "newcmd arg1 arg2", možete doći do ovih argumenata pomoću argmenata [0] i args [1]. Možete poslati najviše MAX_ARGS argumenata, kako je definirano u kodu. Slobodno promijenite tu vrijednost pri ponovnom kompajliranju ako trebate odjednom proslijediti još mnogo argumenata. WriteLine i WriteRAM globalne su funkcije koje vraćaju istoimene UART -ove metode. Drugi argument ove funkcije je implicitan. Ako ništa ne prenesete, nakon toga će se napisati naredbeni redak. Ako prenesete 0 kao drugi argument, upit se neće napisati. Ovo je korisno kada želite napisati nekoliko zasebnih nizova za izlaz prije nego što se naredbeni redak vrati korisniku. 3. Neka ljuska izvrši kod naredbe Već ste rekli izvršitelju ljuske da izvrši metodu cmdNewCmd prilikom postavljanja nove naredbe, ali je dodajte u datoteku shell.h kako bi je objekt ljuske razumio. Samo ga dodajte ispod posljednje naredbe ili ispred prve naredbe, ili bilo gdje u njoj. I to je to. Ponovno kompajlirajte i prenesite firmver na svoj Arduino i vaša nova naredba dostupna je iz ljuske na promptu.

Korak 6: Sažetak

Trebali biste znati kako instalirati svoj AVR/Arduino i povezati se s njim te dobiti upozorenje uživo na pokrenutom mikrokontroleru. Znate nekoliko naredbi koje će pokrenuti podatke za vrijeme izvođenja iz MCU -a ili postaviti vrijednosti u MCU u hodu. Također vam je pokazano kako dodati vlastiti prilagođeni kôd za stvaranje vlastitih jedinstvenih naredbi u ljusci kako biste ga dodatno prilagodili svojim potrebama. Možete čak i izvaditi tumač naredbi tako da sadrži samo vaše prilagođene naredbe, ako to odgovara vašim potrebama. Nadam se da ste uživali u ovom uputstvu i da vam ljuska AVR-a može biti korisna, bilo kao prevoditelj naredbi u stvarnom vremenu ili kao proces učenja u implementaciji vlastite. Kao i uvijek, radujem se bilo kakvim komentarima ili prijedlozima o tome kako se ova instrukcija može poboljšati! Zabavite se sa svojim AVR -om!

Preporučeni: