Sisukord:

AVRSH: käsutõlgi kest Arduino/AVR jaoks: 6 sammu (piltidega)
AVRSH: käsutõlgi kest Arduino/AVR jaoks: 6 sammu (piltidega)

Video: AVRSH: käsutõlgi kest Arduino/AVR jaoks: 6 sammu (piltidega)

Video: AVRSH: käsutõlgi kest Arduino/AVR jaoks: 6 sammu (piltidega)
Video: Политика GRAN KAIN - Instinct, Dilvish, OutSide, Avtsh 2024, Juuli
Anonim
AVRSH: käsutõlgi kest Arduino/AVR jaoks
AVRSH: käsutõlgi kest Arduino/AVR jaoks

Kas olete kunagi tahtnud olla oma AVR -i mikrokontrollerisse sisse logitud? Kas olete kunagi mõelnud, et oleks lahe registrit "kassitada", et näha selle sisu? Kas olete alati soovinud viisi, kuidas oma AVR-i või Arduino üksikuid perifeerseid allsüsteeme * reaalajas * sisse ja välja lülitada? Mina ka, nii et kirjutasin UNR-i sarnase kesta AVR Shelli. See on UNIX-i sarnane, kuna see meenutab shellikonto, mille te oma irc nick-i kokkupõrkerobotite käivitamiseks ostsite, ning üht või teist ühist käsku. Sellel on ka failisüsteem, mis sarnaneb UNIX-i laienditega, kasutades välist EEPROM-i, kuid sellest on saanud omaette projekt, nii et ma vabastan selle mooduli eraldi mõne teise juhendi all, kui see on tootmisvalmis. Siin on nimekiri asjadest, mida saate AVR Shelliga praegu teha:

  • Lugege reaalajas kõiki oma andmesuunaregistreid (DDRn), porte ja kontakte
  • Kirjutage kõikidele oma DDR-võrkudele, portidele ja tihvtidele, et lülitada sisse mootorid, LED-id või lugeda reaalajas andureid
  • Loetlege kõik teadaolevad registrid süsteemis
  • Looge ja salvestage väärtused kasutaja määratud muutujatesse, mida varundab EEPROM.
  • Looge juurparool ja autentige selle vastu (kasutatakse telneti juurdepääsuks)
  • Lugege konfigureeritud CPU taktsagedust
  • Muutke oma CPU taktsagedust, seadistades eelskaala
  • Käivitage ja peatage 16-bitised taimerid erinevate asjade ajastamiseks
  • Väliste alamsüsteemide sisselülitamine ja/või väljalülitamine: analoog-digitaalmuundurid (ADC), jadapõhine liides (SPI), kahejuhtmeline liides (TWI/I2C), UART/USART. Kasulik, kui soovite vähendada mikrokontrolleri energiatarvet või lubada teatud funktsioone.
  • Kirjutatud C ++ keeles koos korduvkasutatavate objektidega.

See juhend juhendab avrshi installimist, kasutamist ja kohandamist.

Samm: mida vajate

Mida vajate
Mida vajate

See juhend ei nõua palju, välja arvatud see, et te:

  • Kas teil on Arduino või ATmega328P. Teised AVR -id võivad töötada, kuid peate võib -olla koodi muutma, et loetleda kõik teie MCU -le ainuomased registrid. Nimed peavad vastama ainult sellele, mis on loetletud teie MCU unikaalses päisefailis. Paljud registrinimed on AVR -ide vahel samad, nii et teie läbisõit võib teisaldamisel erineda.
  • Kas teil on võimalus ühendada oma Arduino/AVR -i seeria USART -iga. Süsteemi on kõige põhjalikumalt testitud Windowsi rakendusega AVR Terminal, mis loob jadaühenduse teie USB- või COM -pordi kaudu. Töötab Arduinosega, kasutades USB-ühendust, ja mis tahes AVR-iga, kasutades Moderndevice.com USB-BUB-i. Muud terminalivalikud hõlmavad järgmist: Putty, minicom (Linux ja FreeBSD), ekraan (Linux/FreeBSD), Hyperterminal, Teraterm. Olen leidnud, et kitt ja teraterm saadavad ühendamisel prügi, nii et teie esimene käsk võidakse rikkuda.
  • Laske installida ja käivitada AVR Shelli püsivara, mille saate alla laadida nendelt lehtedelt või hankida alati uusima versiooni saidilt BattleDroids.net.

AVR -terminali installimiseks pakkige see lihtsalt lahti ja käivitage. AVR Shelli püsivara installimiseks laadige see alla ja laadige hex -fail otse üles ning ühendage oma jadaterminal 9600 baudiga või kompileerige see ise "make" ja seejärel "make program" hex -i üleslaadimiseks. Pange tähele, et peate võib -olla muutma AVRDUDE seadeid, et need kajastaksid teie COM -porti. Märkus: PROGMEM atribuut on praeguses AVR GCC rakenduses C ++ katki ja see on teadaolev viga. Kui koostate selle, oodake, et saate palju hoiatussõnumeid, mis ütlevad: "hoiatus: programmi mälupiirkonda saab paigutada ainult initsialiseeritud muutujaid". Lisaks sellele, et see hoiatus on tüütu, on see hoiatus kahjutu. Kuna manustatud platvormi C ++ ei ole AVR GCC prioriteetide loendis kõrgel kohal, pole teada, millal see parandatakse. Kui vaatate koodi, näete, kus ma olen selle hoiatuse vähendamiseks tööd teinud, rakendades oma atribuutide avaldusi. Päris lihtne. Laadige alla ja installige kõik, mida vajate, et lehte ümber pöörata ja hakkame pragunema.

Samm: registrite lugemine ja kirjutamine

Registrite lugemine ja kirjutamine
Registrite lugemine ja kirjutamine

AVR Shell oli kirjutatud peamiselt juurdepääsuks mõnele andurile, mille olin oma AVR -iga ühendanud. See algas lihtsa LED -iga, seejärel kolis valgusanduritele, temperatuurianduritele ja lõpuks kahele ultraheliandurile. avrsh saab seadistada nende andurite digitaalseid komponente, kirjutades neid juhtivatele registritele. AVR -registritega manipuleerimine töötamise ajal Arduino kõigi teadaolevate registrite loendi saamiseks tippige:

trükkida registreid ja saate väljatrüki, mis näeb välja selline

Tean järgmisi registreid:

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 TWR TWR TWR TWR TWR TWR TWR TWR Kui soovite näha, kuidas üksikud bitid mis tahes registrisse seatakse, kasutage käsku cat või echo

kass %GPIOR0 Siinkohal palun käsutõlgil kuvada või kajastada üldotstarbelise I/O registri #0 sisu. Pange tähele protsendimärki (%) registri nime ees. Seda on vaja kestale märkimiseks, et see on registrit identifitseeriv reserveeritud märksõna. Kaja käsu tüüpiline väljund näeb välja selline

GPIOR0 (0x0) seadistatud [00000000] Väljund näitab registri nime, registrist leitud kuueteistkümnendväärtust ja registri binaarset esitust (näidates iga bitti 1 või 0). Konkreetse biti seadistamiseks mis tahes registris kasutage operaatorit "index of" . Oletame näiteks, et ma tahan kolmandat bitti 1 -le

%GPIOR0 [3] = 1 ja kest annab teile vastuse, mis näitab selle toimingut ja tulemust

GPIOR0 (0x0) seadistatud [00000000] (0x8) väärtuseks [00001000] Ärge unustage protsendimärki, et öelda kestale, et töötate registriga. Pange tähele ka seda, et kolmanda biti seadistamisega on see 4 bitti, sest meie AVR-id kasutavad nullpõhist indeksit. Teisisõnu, lugedes 3. bitini loete 0, 1, 2, 3, mis on 4. koht, kuid 3. bit. Saate natuke tühjendada samamoodi, seadistades natuke nulli. Selliste bittide seadistamisega saate oma AVR -i toimimist käigu pealt muuta. Näiteks muutes OTC1A leitud CTC taimerivaste väärtust. See võimaldab teil vaadata ka konkreetseid seadeid, mida peaksite oma programmis programmiliselt kontrollima, näiteks UBBR -i väärtust. Töö DDRn, PORTn ja PINn -ga I/O tihvtid on samuti määratud registritele ja neid saab täpselt samamoodi seadistada, kuid seda tüüpi registritega töötamiseks on loodud spetsiaalne süntaks. Koodis on tavaline protsess näiteks LED -i või muu seadme sisselülitamiseks, mis nõuab digitaalset kõrget või madalat taset. See nõuab andmete suuneregistri seadistamist, et näidata, et tihvt on väljundiks, ja seejärel kirjutada konkreetsele bitile õiges pordis 1 või 0. Eeldades, et meil on digitaalse tihvtiga 13 (PB5) ühendatud LED ja me tahame selle sisse lülitada, saate seda teha, kui teie AVR töötab

määrake pin pb5 output kirjutage pin pb5 kõrge Väljund näeks lisaks teie LED -tulede nägemisele välja selline

root@ATmega328p> set pin pb5 output Määra pb5 väljundjuurele@ATmega328p> kirjuta pin pb5 high "Juur@ATmega328p>" on kesta viip, mis näitab, et on valmis teie käsklusi vastu võtma. Valgusdioodi väljalülitamiseks kirjutage lihtsalt pinnile madal. Kui soovite digitaalset sisendit nööpnõelast lugeda, kasutage käsku lugemine. Kasutades meie ülaltoodud näidet

root@ATmega328p> loe pin pb5Pin: pb5 on HIGH Teise võimalusena lihtsalt kajake tihvtide registrit, mis juhib seda tihvtiporti. Näiteks kui meil on dip -lülitid ühendatud digitaalsete tihvtidega 7 ja 8 (PD7 ja PD8), võite saata käsu

kaja %PIND ja kest kuvab seejärel selle registri sisu, näidates teile kõiki ühendatud seadmete sisendi/väljundi olekuid ja seda, kas lüliti olek oli sisse või välja lülitatud.

Samm: kaitsmete lugemine ja kirjutamine

Lugemise ja kirjutamise kaitsmed
Lugemise ja kirjutamise kaitsmed

Kaitsmed on eritüüpi registrid. Need juhivad kõike alates teie mikrokontrolleri taktsagedusest kuni olemasolevate programmeerimismeetodite ja EEPROM-i kirjutuskaitset kaitsvate programmideni. Mõnikord peate neid seadeid muutma, eriti kui loote eraldiseisvat AVR-süsteemi. Ma pole kindel, kas peaksite Arduino kaitsesätteid muutma. Olge oma kaitsmetega ettevaatlik; saate end lukustada, kui seadisite need valesti. Eelmises juhendis näitasin, kuidas saate oma programmeerija ja avrdude abil oma kaitsmeid lugeda ja seadistada. Siin näitan teile, kuidas oma kaitsmeid käitamisajal tagasi lugeda, et näha, kuidas teie MCU on need tegelikult seadistanud. Pange tähele, et see pole kompileerimisaja säte, mille saate määratlustest, vaid tegelikud kaitsmed, kui MCU neid tööajal loeb. ATmega328P andmelehe tabelist 27-9 (andmeraamat, rohkem sarnased) on kaitsme madala baidi bitid järgmised:

CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0Huvitav on see, et kaitsmete puhul tähendab 0 programmeeritud ja 1 tähendab, et see bitt on programmeerimata. Mõneti vastuoluline, kuid kui teate, teate seda.

  • CKDIV8 määrab teie CPU kella jagamise kaheksaks. ATmega328P on tehasest programmeeritud kasutama oma sisemist ostsillaatorit sagedusel 8 MHz koos programmeeritud CKDIV8 (st seatud väärtusega 0), andes teile lõpliku F_CPU või CPU sageduse 1 MHz. Arduino puhul muudetakse seda, kuna need on konfigureeritud kasutama välist ostsillaatorit sagedusel 16 MHz.
  • CKOUT, kui see on programmeeritud, väljastab teie CPU kella PB0 -l, mis on Arduinose digitaalne tihvt 8.
  • SUT [1..0] määrab teie AVR -i käivitamise aja.
  • CKSEL [3..0] määrab kellaallika, näiteks sisemise RC -ostsillaatori, välise ostsillaatori jne.

Kui lugesite oma kaitsmeid, tagastatakse see teile kuueteistkümnendsüsteemis. Seda vormingut vajate, kui soovite kaitsmeid avrdude kaudu kirjutada. Minu arduino puhul näen alumist kaitsmebaiti lugedes järgmist:

root@ATmega328p> loe lfuseLower Fuse: 0xffNiisiis, kõik bitid on seatud väärtusele 1. Tegin sama protseduuri Arduino kloonil ja sain sama väärtuse. Kontrollige ühte oma eraldiseisvat AVR-süsteemi, sain 0xDA, mis on väärtus, mille olin kiibi konfigureerimisel mõnda aega tagasi seadnud. Sama protseduuri kasutatakse ka kõrge kaitsme baidi, laiendatud kaitsmebaidi ja lukustuskaitsmete kontrollimiseks. Kalibreerimise ja allkirja kaitsme baidid on koodis keelatud #if 0 eeltöötlusdirektiiviga, mida saate muuta, kui tunnete end tühjana.

4. samm: muud käsud

Muud käsud
Muud käsud

Vaikimisi käsutõlgend mõistab veel mitmeid käske, mis võivad teile kasulikud olla. Näete kõiki rakendatud ja tulevaste versioonide käske, väljastades viiba abil abi või menüü. Ma katan need siin kiiresti, kuna need on enamasti iseenesestmõistetavad. Protsessori kella sageduse seaded Saate teada, mida teie püsivara on konfigureeritud kasutama CPU kella seadistustena käsuga fcpu:

root@ATmega328p> fcpuCPU sagedus: 16000000See on 16 miljonit ehk 16 miljonit herzi, üldtuntum kui 16 MHz. Saate seda mis tahes põhjusel käigu pealt muuta. See käsk võtab ühe argumendi: eelkihi, mida kasutada teie kella kiiruse jagamisel. Kell käsk mõistab neid eelseadistaja väärtusi:

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

Kasutades käsku:

kell ckdiv2 kui teie protsessori kiirus on 16 MHz, muudetakse teie taktsageduseks 8 MHz. Kasutades ckdiv64 eelskalerit esialgse taktsagedusega 16 MHz, on lõplik taktsagedus 250 KHz. Miks sa tahaksid oma MCU aeglasemaks muuta? Esiteks, madalam taktsagedus tarbib vähem energiat ja kui teie MCU -l on projektiruumis aku tühjenemas, ei pruugi te seda tippkiirusel töötamiseks vaja minna ning seetõttu võite kiirust vähendada ja selle energiatarbimist vähendada., pikendades aku kasutusaega. Samuti, kui kasutate kella mis tahes ajastusprobleemide jaoks mõne muu MCU -ga, näiteks tarkvara UART või mõne muu sellise asja rakendamiseks, võiksite selle seada kindlale väärtusele, mille abil on lihtne saada kena ühtlane edastuskiirus madalam veamäär. Perifeersete allsüsteemide sisselülitamine ja väljalülitamine Sama märkusega, nagu varem mainitud energiatarbimise vähendamine, võiksite veelgi vähendada energiat, lülitades välja mõned pardal olevad välisseadmed, mida te ei kasuta. Käsutõlk ja kest saavad praegu sisse ja välja lülitada järgmised välisseadmed:

  • Analoog-digitaalmuundur (ADC). Seda välisseadet kasutatakse siis, kui teil on analoogandur, mis pakub andmeid (nt temperatuur, valgus, kiirendus jne) ja peate selle teisendama digitaalseks väärtuseks.
  • Serial Peripheral Interface (SPI). SPI-bussi kasutatakse teiste SPI-toega seadmetega suhtlemiseks, nagu välised mälud, LED-draiverid, välised ADC-d jne. SPI osi kasutatakse Interneti-teenuse pakkuja programmeerimiseks või vähemalt kontakte, seega olge selle väljalülitamisel ettevaatlik kui programmeerite ISP kaudu.
  • Kahe juhtmega liides. Mõned välisseadmed kasutavad suhtlemiseks I2C-bussi, kuigi need asendatakse kiiresti SPI-toega seadmetega, kuna SPI-l on suurem läbilaskevõime.
  • USART. See on teie jadaliides. Tõenäoliselt ei taha te seda välja lülitada, kui olete AVR -iga jadaühenduse kaudu ühendatud! Kuid ma lisasin selle siia skeletina, et teisaldada seadmeid, millel on mitu USART -i, näiteks ATmega162 või ATmega644P.
  • kõik. See argument sisselülitamise või väljalülitamise käsule lülitab sisse kõik nimetatud välisseadmed või lülitab need kõik ühe käsuga välja. Jällegi kasutage seda käsku targalt.

root@ATmega328p> powerdown twi Poweri maandamine täielik.juur@ATmega328p> powerup twi Poweri twi täielik.

Taimerite käivitamine ja peatamine Kestal on sisseehitatud 16-bitine taimer, mis on kasutamiseks saadaval. Taimer käivitatakse käsuga taimer:

taimeri käivitamineja peatage taimer stop -argumendiga

taimer seiskubSee taimer ei ole vastuolus sisemise USART -taimeriga. Vaadake USART -taimeri juurutamise üksikasjade koodist, kui selline põnev detail teile huvi pakub

root@ATmega328p> taimer startAjastatud timer.root@ATmega328p> taimer stopMöödunud aeg: ~ 157 sekundit Autentimine Kest võib EEPROM-i salvestada 8-tähemärgilise parooli. See paroolimehhanism loodi telneti sisselogimisvõimaluste toetamiseks, kuid seda saab muude asjade kaitsmiseks laiendada. Näiteks võite autentimismehhanismi kaudu nõuda teatud käske, näiteks registriväärtuste muutmist. Seadistage parool käsuga parool

root@ATmega328p> passwd blah Kirjutas EEPROM -i juurparooliAutoriseerige parooliga (või nõudke koodi kaudu programmilist autoriseerimist) käsuga auth. Pange tähele, et kui proovite muuta juurparooli ja juureparool on juba määratud, peate enne uue parooli muutmist autoriseerima end vana parooli vastu

root@ATmega328p> passwd blinky Peate kõigepealt volitama ennast. root@ATmega328p> auth blahAuthorized.root@ATmega328p> passwd blinky Kirjutas EEPROMile uue juurparooliMuidugi, kui kustutate püsivara, peate oma vanade väärtuste ja muutujate taastamiseks laadima faili avrsh.eep. Makefile loob teie jaoks EEPROM -faili. Muutujad Kest mõistab kasutaja määratletud muutujate mõistet. Kood piirab selle 20 -ni, kuid saate seda soovi korral muuta, muutes skripti.h määratlust MAX_VARIABLES. 16-bitise väärtuse (st mis tahes arvu kuni 65, 536) saate salvestada muutujale, et seda hiljem meelde tuletada. Süntaks sarnaneb registritega, välja arvatud see, et dollari märki ($) kasutatakse kesta muutujate tähistamiseks. Loetlege kõik oma muutujad käsuga print muutujad

Kasutaja määratletud muutujad: Indeksi nimi -> Väärtus (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): $ TASUTA $ -> 0 (11): $ TASUTA $ -> 0 (12): $ TASUTA $ -> 0 (13): $ TASUTA $ -> 0 (14): $ TASUTA $ -> 0 (15): $ TASUTA $ -> 0 (16): $ TASUTA $ -> 0 (17): $ TASUTA $ -> 0 (18): $ TASUTA $ -> 0 (19): $ TASUTA $ -> 0 (20): $ FREE $ -> 0Täielik. Määrake muutuja

$ newvar = 25 $ timeout = 23245Hankige antud muutuja väärtus

root@ATmega328p> echo $ newvar $ newvar 25Näete kõiki muutujaid, mille olete praegu printimiskäsuga installeerinud ja mida juba teate

Kasutaja määratud muutujad: Indeksinimi -> Väärtus (01): newvar -> 25 (02): timeout -> 23245 (03): $ FREE $ -> 0 (04): $ FREE $ -> 0 (05): $ TASUTA $ -> 0 (06): $ TASUTA $ -> 0 (07): $ TASUTA $ -> 0 (08): $ TASUTA $ -> 0 (09): $ TASUTA $ -> 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): $ TASUTA $ -> 0Täie. Nimi $ FREE $ näitab lihtsalt, et see muutuja asukoht on tasuta ja sellele pole veel määratud muutuja nime.

Samm: kesta kohandamine

Kesta kohandamine
Kesta kohandamine

Soovi korral võite koodi häkkida ja oma vajadustele kohandada. Kui ma oleksin teadnud, et annan selle koodi välja, oleksin teinud eraldi käsutõlgi klassi ja käsustruktuuri ning lihtsalt kordanud selle funktsiooni osutamise kaudu. See vähendaks koodi hulka, kuid praegusel kujul analüüsib kest käsurida ja kutsub sobiva kesta meetodi. Oma kohandatud käskude lisamiseks tehke järgmist. 1. Lisage oma käsk parsimisloendisse Käskude parser analüüsige käsurida ja andke teile käsk ja kõik argumendid eraldi. Argumendid edastatakse viitadena näitajatele või näpunäidete kogumina, kuid teile meeldib nendega töötada. Seda võib leida shell.cpp. Avage shell.cpp ja leidke AVRShelli klassi ExecCmd meetod. Võimalik, et soovite lisada käsu programmimällu. Kui teete seda, lisage käsk programmidesse progmem.h ja progmem.cpp. Saate käsu programmeerimismällu lisada otse PSTR () makro abil, kuid genereerite veel ühe varem mainitud tüüpi hoiatuse. Jällegi on see teadaolev viga, mis töötab C ++ -ga, kuid sellest saate mööda, lisades käsu otse programmi.* Failidesse, nagu ma olen teinud. Kui te ei pahanda oma SRAM -i kasutamisele lisamist, võite käsu lisada, nagu ma olen näidanud käsuga "clock". Oletame, et soovite lisada uue käsu nimega "newcmd". Avage AVRShell:: ExecCmd ja leidke sobiv koht järgmise koodi sisestamiseks:

else if (! strcmp (c, "newcmd")) cmdNewCmd (args);See lisab teie käsu ja kutsub cmdNewCmd meetodi, mille kirjutate järgmises etapis. 2. Kirjutage oma kohandatud käsukood Samasse faili lisage oma kohandatud käsukood. See on meetodi määratlus. Soovite siiski lisada deklaratsiooni shelli.h. Lihtsalt lisage see teistele käskudele. Eelmises näites võib kood välja näha umbes selline

voidAVRShell:: cmdNewCmd (char ** args) {sprintf_P (buff, PSTR ("Sinu käsk on %s / r / n", args [0]); WriteRAM (buff);}Siin on mitu asja. Esiteks on "buff" 40-tähemärgiline massiivipuhver, mis on koodis teie jaoks ette nähtud. Me kasutame sprintfi programmimälu versiooni, kuna edastame sellele PSTR -i. Soovi korral saate kasutada tavalist versiooni, kuid veenduge, et te ei edastaks vormingut PSTR -is. Samuti on argumendid argsi massiivis. Kui sisestasite teksti "newcmd arg1 arg2", saate neid argumente kasutada alamindeksitega args [0] ja args [1]. Saate edastada maksimaalselt MAX_ARGS argumenti, nagu koodis on määratletud. Muutke seda väärtust uuesti kompileerimisel, kui vajate korraga palju rohkem argumente. WriteLine ja WriteRAM on globaalsed funktsioonid, mis tagastavad UART -i samanimelised meetodid. Selle funktsiooni teine argument on kaudne. Kui te midagi ei edasta, kirjutatakse hiljem käsuviip. Kui annate teise argumendina 0, siis viiba ei kirjutata. See on kasulik, kui soovite enne käsuviiba kasutajale tagastamist kirjutada mitu eraldi stringi. 3. Laske shellil käivitada käsukood. Olete juba käskinud shelli täitjal uue käsu seadistamisel käivitada meetodi cmdNewCmd, kuid lisage see faili shell.h, et see oleks shelli objektile arusaadav. Lihtsalt lisage see viimase käsu alla või esimese käsu ette või kus iganes seal. Ja see on kõik. Kompileerige ja laadige püsivara uuesti üles oma Arduinosse ning teie uus käsk on viipal kestast saadaval.

6. samm: kokkuvõte

Peaksite teadma, kuidas oma AVR/Arduino installida ja sellega ühenduse luua ning saada oma töötava mikrokontrolleri reaalajas viip. Teate mitmeid käske, mis tõmbavad käitusaja andmed MCU -st või määravad väärtused MCU -le käigu pealt. Samuti on teile näidatud, kuidas lisada oma kohandatud kood, et luua kestale oma ainulaadsed käsud, et seda veelgi kohandada vastavalt teie vajadustele. Võite isegi sisendada käsutõlki, et see sisaldaks ainult teie kohandatud käske, kui see teie vajadustele sobib. Loodan, et teile meeldis see juhendamine ja et AVR Shell võib teile kasulik olla kas reaalajas käsutõlgina või õppeprotsessina enda rakendamisel. Nagu alati, ootan kommentaare või soovitusi selle kohta, kuidas seda juhendatavat täiustada! Lõbutsege oma AVR -iga!

Soovitan: