Sadržaj:

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

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

Video: AVRSH: ljuska komandnog tumača za Arduino/AVR .: 6 koraka (sa slikama)
Video: Золотые слова Алины Кабаевой 😍 2024, Juli
Anonim
AVRSH: ljuska komandnog tumača za Arduino/AVR
AVRSH: ljuska komandnog 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 podsistema 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 kolizione botove, kao i da ima naredbu ili dvije zajedničke. Takođe ima sistem datoteka 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 na sistemu
  • Kreirajte i pohranite vrijednosti u korisnički definirane varijable uz sigurnosnu kopiju EEPROM-a.
  • Kreirajte root lozinku i potvrdite autentičnost prema njoj (koristi se za pristup telnetu)
  • Pročitajte konfiguriranu brzinu takta CPU -a
  • Promijenite brzinu takta procesora postavljanjem predskalera
  • Pokretanje i zaustavljanje 16-bitnih mjerača vremena za mjerenje vremena
  • Uključivanje i/ili isključivanje perifernih podsistema: analogno-digitalni pretvarači (ADC), serijski periferni interfejs (SPI), dvožični interfejs (TWI/I2C), UART/USART. Korisno kada želite smanjiti potrošnju energije mikrokontrolera ili omogućiti određene funkcije.
  • Napisano na C ++ sa objektima za višekratnu upotrebu.

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

Korak 1: Šta će vam trebati

Šta će vam trebati
Šta će vam trebati

Za ovo uputstvo nije potrebno mnogo osim da:

  • Imajte Arduino ili ATmega328P. Drugi AVR -ovi bi mogli funkcionirati, ali možda ćete morati izmijeniti kôd kako biste naveli sve registre koji su jedinstveni za vaš MCU. Imena samo moraju odgovarati onome š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 Arduino/AVR -a. Sistem je najopsežnije testiran pomoću AVR terminala, Windows aplikacije 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), ekran (Linux/FreeBSD), Hyperterminal, Teraterm. Otkrio sam da kit i teraterm šalju malo smeća pri povezivanju tako da vaša prva naredba može biti iskrivljena.
  • Instalirajte i pokrenite firmver AVR Shell 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 direktno prenesite heksadecimalnu datoteku i povežite serijski terminal na 9600 bita, ili ga 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. Bilješka: Atribut PROGMEM je pokvaren u trenutnoj implementaciji AVR GCC -a za C ++ i ovo je poznata greška. Ako ga sastavite, očekujte da ćete dobiti mnogo poruka upozorenja s upozorenjem "upozorenje: samo se inicijalizirane varijable mogu postaviti u područje memorije programa." Osim što je neugodno za vidjeti, ovo upozorenje je bezopasno. Kako C ++ na ugrađenoj platformi nije visoko na listi prioriteta AVR GCC -a, nije poznato kada će to biti ispravljeno. 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 kontrolišu. Manipuliranje AVR registrima tijekom izvođenja Da biste dobili popis svih poznatih registra na vašem Arduinu, upišite:

štampani registri i dobićete otisak koji izgleda ovako

Znam za sljedeće registre:

TIFR0 PORTC TIFR1 PORTD TIFR2 DDRD PCIFR DDRB EIFR DDRC EIMSK PINB EECR PZZP 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 OCR1AL OCR1AH OCR1BL OCR1BH TCCR2A TCCR2B TCNT2 OCR2A OCR2B URC URS TWR TWR TWR Da biste vidjeli kako su pojedinačni bitovi postavljeni u bilo kojem registru, koristite naredbu cat ili echo

mačka %GPIOR0 Ovdje tražim od prevoditelja naredbi da prikaže ili odzvanja sadržaj I/O registra opće namjene br. 0. Zabilježite znak postotka (%) ispred naziva registra. Ovo vam je potrebno da naznačite ljusci da je ovo 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 njenu 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đe imajte na umu da postavljanjem trećeg bita, to je 4 bita, jer naši AVR-i koriste indeks zasnovan 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 način rada vašeg AVR -a u hodu. Na primjer, promjenom vrijednosti podudaranja CTC tajmera 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 je stvorena posebna sintaksa za rad s ovim vrstama registra. U kodu postoji normalan proces za, recimo, uključivanje LED diode ili drugog uređaja koji zahtijeva digitalno visoko ili nisko. Zahtijeva postavljanje registra smjera podataka da označi da je pin za izlaz, a zatim upisuje 1 ili 0 na određeni bit na ispravnom priključku. Pod pretpostavkom da smo LED spojeni 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> postavite pin pb5 outputPostavite pb5 za outputroot@ATmega328p> upišite pin pb5 highPripisao 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, koristite naredbu za čitanje. Koristeći naš gornji primjer

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

echo %PIND i ljuska bi tada prikazala sadržaj tog registra, pokazujući vam sva ulazna/izlazna stanja povezanih 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 EEPROM-a od zapisivanja. Ponekad ćete morati promijeniti ove postavke, posebno ako stvarate samostalni AVR sistem. Nisam siguran da biste trebali promijeniti postavke osigurača na Arduinu. Budite oprezni sa osiguračima; možete se zaključati ako ste ih pogrešno 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 kompajliranja koje dobivate iz definicija, već stvarni osigurači dok ih MCU čita u vrijeme 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 sa 8. ATmega328P dolazi iz tvornice programirane za upotrebu svog unutrašnjeg oscilatora na 8MHz sa 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 unutrašnjeg 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 mom arduinu evo šta dobijam kada pročitam donji bajt osigurača:

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

Korak 4: Ostale naredbe

Druge komande
Druge komande

Postoji još nekoliko 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 promptu. Ovdje ću ih brzo pokriti jer su uglavnom jasne same po sebi. Postavke frekvencije takta CPU -a Možete saznati šta je vaš firmver konfiguriran za upotrebu kao postavke takta CPU -a pomoću naredbe fcpu:

root@ATmega328p> fcpuCPU Frekvencija: 16000000To je 16 miliona ili 16 miliona herca, poznatijih kao 16 MHz. Ovo možete promijeniti u hodu, iz bilo kojeg razloga, pomoću naredbe clock. Ova naredba ima jedan argument: predskaler koji treba koristiti 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 vaša brzina procesora 16MHz rezultiralo bi promjenom takta na 8MHz. Korištenje predcaleratora 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 pri najvećoj brzini, pa bi stoga mogli smanjiti brzinu i smanjiti potrošnju energije, produžavajući vijek trajanja baterije. Također, ako koristite sat za bilo kakve probleme s vremenskim rasporedom 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 grešaka. Uključivanje i isključivanje perifernih podsistema 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). Ova periferna jedinica koristi se kada imate analogni senzor koji daje podatke (poput temperature, svjetlosti, ubrzanja itd.) I trebate ih pretvoriti u digitalnu vrijednost.
  • Serijsko periferno sučelje (SPI). SPI sabirnica koristi se za komunikaciju s drugim uređajima sa omogućenim SPI-om, poput vanjske memorije, LED upravljačkih programa, vanjskih ADC-ova itd. Dijelovi SPI-a se koriste za programiranje ISP-a ili barem pinovi, pa 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 sa 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 na AVR povezani 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.
  • sve. Ovaj argument naredbi powerup ili powerdown uključuje sve spomenute periferne uređaje ili ih isključuje jednom naredbom. Opet, koristite ovu naredbu mudro.

root@ATmega328p> poweri twiPowerdown twi complete.root@ATmega328p> powerup twiPowerup twi kompletan.

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

start timerai zaustavite mjerač vremena argumentom stop

mjerač vremenaOvaj tajmer neće biti u sukobu s internim USART tajmerom. Pogledajte kod za detalje o implementaciji USART tajmera, ako vas takva vrsta krvavih detalja zanima

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 lozinke kreiran je da podržava 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 prema lozinci (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 protiv stare lozinke prije nego što vam bude dopušteno da je promijenite 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 $ -> 0Završeno. Postavite varijablu

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

root@ATmega328p> echo $ newvar $ newvar 25Možete vidjeti koje sve varijable koje ste trenutno instalirali pomoću naredbe print već znate

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 $ -> 0Završ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 kod, napravio bih zasebnu klasu interpretatora klase i strukturu naredbe i jednostavno ponovio ovaj poziv pokazivača funkcije. To bi smanjilo količinu koda, ali kako stoji ljuska analizira naredbenu liniju i poziva odgovarajuću metodu ljuske. Da biste dodali vlastite prilagođene naredbe, učinite sljedeće: 1. Dodajte svoju naredbu na listu raščlanjivanja Analizator naredbi će raščlanite naredbenu liniju i zasebno će vam dati naredbu i sve argumente. Argumenti se prenose kao pokazivači na pokazivače ili niz pokazivača, kako god želite raditi s njima. Ovo se nalazi u shell.cpp. Otvorite shell.cpp i pronađite ExecCmd metodu klase AVRShell. Možda ćete željeti dodati naredbu u memoriju programa. Ako to učinite, dodajte naredbu u progmem.h i progmem.cpp. Naredbu možete dodati u memoriju programa direktno pomoću makroa PSTR (), ali ćete generirati još jedno upozorenje ranije spomenutog tipa. Opet, ovo je poznata greška koja radi sa C ++, ali to možete zaobići dodavanjem naredbe direktno u datoteke progmem.*, Kao što sam već učinio. Ako vam ne smeta dodavanje vaše upotrebe SRAM -a, možete dodati naredbu kao što sam ilustrirao naredbom "clock". Recimo da želite 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. Napišite svoj prilagođeni kod naredbe U istu datoteku dodajte svoj 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 kod 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 memoriju programa sprintf jer joj prosljeđujemo PSTR. Možete koristiti uobičajenu verziju ako želite, ali pazite da ne prenesete format u PSTR. Takođe, argumenti se nalaze u args nizu. Ako ste unijeli "newcmd arg1 arg2", možete doći do ovih argumenata pomoću argmenata [0] i args [1]. Možete proslijediti najviše MAX_ARGS argumente, kako je definirano u kodu. Slobodno promijenite tu vrijednost prilikom ponovnog kompajliranja ako vam je potrebno da se proslijedi još mnogo argumenata odjednom. WriteLine i WriteRAM su globalne funkcije koje vraćaju UART -ove metode istog imena. 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 neće biti napisan. 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 upit.

Korak 6: Sažetak

Trebali biste znati kako instalirati i povezati se na svoj AVR/Arduino i dobiti upozorenje uživo na pokrenutom mikrokontroleru. Znate nekoliko naredbi koje će izvlačiti podatke o vremenu izvođenja iz MCU -a ili postavljati 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 tumač naredbi u stvarnom vremenu ili kao proces učenja u implementaciji vašeg vlastitog posla. Kao i uvijek, radujem se bilo kakvim komentarima ili prijedlozima o tome kako se ovo uputstvo može poboljšati! Zabavite se sa svojim AVR -om!

Preporučuje se: