Sisällysluettelo:

AVRSH: Arduino/AVR -komentotulkki: 6 vaihetta (kuvilla)
AVRSH: Arduino/AVR -komentotulkki: 6 vaihetta (kuvilla)

Video: AVRSH: Arduino/AVR -komentotulkki: 6 vaihetta (kuvilla)

Video: AVRSH: Arduino/AVR -komentotulkki: 6 vaihetta (kuvilla)
Video: AVR Shell Command Interpreter 2024, Heinäkuu
Anonim
AVRSH: komentotulkki Shell Arduinolle/AVR: lle
AVRSH: komentotulkki Shell Arduinolle/AVR: lle

Oletko koskaan halunnut olla "kirjautuneena" AVR -mikrokontrolleriisi? Oletko koskaan ajatellut, että olisi hienoa "kissata" rekisteri nähdäksesi sen sisällön? Oletko aina halunnut virran kytkeä ja sammuttaa AVR: n tai Arduinon oheislaitejärjestelmät * reaaliajassa *? Minäkin, joten kirjoitin AVR Shellin, UNIX-kaltaisen kuoren. Se on UNIX-kaltainen, koska se muistuttaa kuoretiliä, jonka käytit ja ostit irc nick-törmäysrobottien suorittamiseen, sekä yhteinen komento. Siinä on myös tiedostojärjestelmä, joka muistuttaa UNIX-laajennuksia ulkoisen EEPROMin avulla, mutta siitä on tullut projekti itselleen, joten julkaisen moduulin erikseen toisen ohjeen alla, kun se on tuotantovalmis. Tässä on luettelo asioista, joita voit tällä hetkellä tehdä AVR Shellillä:

  • Lue kaikki Data Direction -rekisterit (DDRn), portit ja nastat reaaliajassa
  • Kirjoita kaikkiin DDRn-laitteisiin, portteihin ja nastoihin käynnistääksesi moottorit, LEDit tai lukea antureita reaaliajassa
  • Luettele kaikki järjestelmän tunnetut rekisterit
  • Luo ja tallenna arvot käyttäjän määrittämiin muuttujiin, joita varmuuskopioi EEPROM.
  • Luo pääsalasana ja varmenna sitä vastaan (käytetään telnet -käyttöön)
  • Lue määritetty suorittimen kellonopeus
  • Muuta suorittimen kellonopeutta asettamalla esisäädin
  • Käynnistä ja pysäytä 16-bittiset ajastimet eri asioiden ajoitukseen
  • Käynnistä ja/tai sammuta oheislaitejärjestelmät: Analogisista digitaalimuuntimiin (ADC), sarjaliitäntäliitäntä (SPI), kaksijohtiminen liitäntä (TWI/I2C), UART/USART. Hyödyllinen silloin, kun haluat vähentää mikrokontrollerin virrankulutusta tai ottaa käyttöön tiettyjä toimintoja.
  • Kirjoitettu C ++: lla uudelleenkäytettävien esineiden kanssa.

Tämä ohje opastaa avrshin asennuksen, käytön ja mukauttamisen.

Vaihe 1: Mitä tarvitset

Mitä tarvitset
Mitä tarvitset

Tämä ohje ei vaadi paljon, paitsi että:

  • Onko sinulla Arduino tai ATmega328P. Muut AVR: t voivat toimia, mutta saatat joutua muokkaamaan koodia luetteloidaksesi kaikki MCU: n ainutlaatuiset rekisterit. Nimien on vastattava vain sitä, mikä on lueteltu MCU: n ainutlaatuisessa otsikkotiedostossa. Monet rekisterinimet ovat samat AVR -laitteiden välillä, joten kilometrimäärä voi vaihdella siirrettäessä.
  • On tapa muodostaa yhteys Arduino/AVR -laitteen sarjaan USART. Järjestelmää on testattu laajimmin AVR -terminaalilla, Windows -sovelluksella, joka muodostaa sarjayhteyden USB- tai COM -portin kautta. Toimii Arduinojen kanssa USB-liitännän avulla ja minkä tahansa AVR: n kanssa Moderndevice.comin USB-BUB: n avulla. Muita päätelaitevaihtoehtoja ovat: Putty, minicom (Linux ja FreeBSD), näyttö (Linux/FreeBSD), Hyperterminal, Teraterm. Olen huomannut, että kitti ja teraterm lähettävät roskia yhdistettäessä, joten ensimmäinen komento voi olla sekava.
  • Asenna ja käytä AVR Shell -laiteohjelmistoa, jonka voit ladata näiltä sivuilta tai hankkia aina uusimman version osoitteesta BattleDroids.net.

Asenna AVR -terminaali vain pakkaamalla se ja suorittamalla se. Voit asentaa AVR Shell -laiteohjelmiston lataamalla sen ja joko lataamalla heksatiedoston suoraan ja kytkemällä sarjapäätelaitteesi 9600 baudin taajuudella tai kääntämällä sen itse komennolla "make" ja sitten "make program" ladataksesi heksadesimaalin. Huomaa, että sinun on ehkä muutettava AVRDUDE -asetuksia vastaamaan COM -porttiasi. Huomautus: PROGMEM -attribuutti on rikki C ++: n nykyisessä AVR GCC -toteutuksessa, ja tämä on tunnettu virhe. Jos käännät sen, odota, että saat monia varoitusviestejä, joissa sanotaan "varoitus: vain alustetut muuttujat voidaan sijoittaa ohjelman muistialueelle." Sen lisäksi, että tämä varoitus on ärsyttävää nähdä, se on vaaraton. Koska sulautetun alustan C ++ ei ole korkealla AVR GCC: n prioriteettiluettelossa, ei tiedetä, milloin tämä korjataan. Jos tarkistat koodin, näet, missä olen pyrkinyt vähentämään tätä varoitusta toteuttamalla omat attribuuttilausunnot. Lataa ja asenna kaikki tarvitsemasi tiedot sivun kääntämiseksi ja halkeilemaan.

Vaihe 2: Rekisterien lukeminen ja kirjoittaminen

Rekisterien lukeminen ja kirjoittaminen
Rekisterien lukeminen ja kirjoittaminen

AVR Shell on kirjoitettu ensisijaisesti joidenkin anturien käyttämiseen, jotka olin liittänyt AVR: ään. Se alkoi yksinkertaisella LED -valolla ja siirtyi sitten valotunnistimiin, lämpötila -antureihin ja lopulta kahteen ultraäänianturiin. avrsh voi asettaa näiden antureiden digitaaliset komponentit kirjoittamalla niitä ohjaaviin rekistereihin. AVR -rekistereiden manipulointi käynnissä Saadaksesi luettelon kaikista Arduinon tunnetuista rekistereistä kirjoita:

tulostaa rekistereitä ja saat tältä näyttävän tulosteen

Tiedän seuraavat rekisterit:

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 TWR TWR TWR TWR TWR TWR TWR TWR TWR Käytä cat- tai echo -komentoa nähdäksesi, kuinka yksittäiset bitit asetetaan mihin tahansa rekisteriin

kissa %GPIOR0 Tässä pyydän komentotulkkia näyttämään tai toistamaan yleiskäyttöisen I/O -rekisterin #0 sisällön. Huomaa prosentin merkki (%) rekisterin nimen edessä. Tarvitset tämän osoittamaan kuorelle, että tämä on varattu avainsana, joka tunnistaa rekisterin. Tyypillinen kaiku -komennon ulostulo näyttää tältä

GPIOR0 (0x0) asetettu arvoon [00000000] Tulos näyttää rekisterin nimen, rekisterissä olevan heksadesimaaliluvun ja rekisterin binäärisen esityksen (jokaisen bitin ollessa 1 tai 0). Jos haluat asettaa tietyn bitin mihin tahansa rekisteriin, käytä "index of" -operaattoria . Oletetaan esimerkiksi, että haluan kolmannen bitin yhdeksi

%GPIOR0 [3] = 1 ja kuori antaa sinulle vastauksen, joka osoittaa sen toiminnan ja tuloksen

GPIOR0 (0x0) asetettu arvoon [00000000] (0x8) asetettu arvoon [00001000] Älä unohda prosenttiosoitetta kertoa kuorelle, että työskentelet rekisterin kanssa. Huomaa myös, että asettamalla kolmas bitti, se on 4 bittiä, koska AVR-laitteemme käyttävät nollapohjaista indeksiä. Toisin sanoen laskemalla 3. bittiin lasketaan 0, 1, 2, 3, joka on 4. sija, mutta 3. bitti. Voit tyhjentää bitin samalla tavalla asettamalla bitin nollaksi. Asettamalla tällaisia bittejä voit muuttaa AVR: n toimintaa lennossa. Esimerkiksi muuttamalla OTC1A: n CTC -ajastimen vastaavuuden arvoa. Sen avulla voit myös kurkistaa tiettyihin asetuksiin, jotka sinun on tarkistettava ohjelmallisesti koodiin, kuten siirtonopeutesi UBBR -arvo. Työskentely DDRn, PORTn ja PINn kanssa I/O -nastat on myös määritetty rekistereille ja ne voidaan asettaa täsmälleen samalla tavalla, mutta erityinen syntaksi on luotu toimimaan tämän tyyppisten rekisterien kanssa. Koodissa on normaali prosessi esimerkiksi LED -valon tai muun laitteen kytkemiseksi päälle, joka vaatii digitaalisen korkean tai matalan. Se edellyttää datasuuntarekisterin asettamista osoittamaan, että nasta on tulostettava, ja sitten kirjoitetaan 1 tai 0 tietylle bitille oikeassa portissa. Olettaen, että digitaaliseen nastaan 13 (PB5) on kytketty LED ja haluamme kytkeä sen päälle, toimi näin AVR: n ollessa käynnissä

aseta nasta pb5 lähtö Kirjoita nasta pb5 korkea Lähtö, sen lisäksi, että voi nähdä LED -valon syttyvän, näyttäisi tältä

root@ATmega328p> set pin pb5 output Aseta pb5 for outputroot@ATmega328p> kirjoita pin pb5 high Kirjoita logiikka high to pin pb5 "Root@ATmega328p>" on kuoren kehote, joka osoittaa, että se on valmis hyväksymään komennot sinulta. Jos haluat sammuttaa LED -valon, kirjoita yksinkertaisesti matala napaan. Jos haluat lukea digitaalitulon nastasta, käytä lukukomentoa. Käyttämällä yllä olevaa esimerkkiämme

root@ATmega328p> lue pin pb5Pin: pb5 on HIGH Vaihtoehtoisesti voit vain toistaa pin -rekisteriä, joka ohjaa kyseistä nastaporttia. Jos esimerkiksi dip -kytkimet on kytketty digitaalisiin nastoihin 7 ja 8 (PD7 ja PD8), voit lähettää komennon

echo %PIND ja kuori näyttäisi sitten kyseisen rekisterin sisällön, joka näyttää kaikki kytkettyjen laitteiden tulo-/lähtötilat ja onko kytkimen tila päällä tai pois päältä.

Vaihe 3: Sulakkeiden lukeminen ja kirjoittaminen

Lukeminen ja kirjoittaminen Sulakkeet
Lukeminen ja kirjoittaminen Sulakkeet

Sulakkeet ovat erityistyyppisiä rekistereitä. Ne ohjaavat kaikkea mikrokontrollerisi kellotaajuudesta siihen, mitä ohjelmointimenetelmiä on käytettävissä EEPROMin kirjoitussuojaukseen. Joskus sinun on muutettava näitä asetuksia, varsinkin jos olet luomassa erillistä AVR-järjestelmää. En ole varma, että sinun pitäisi muuttaa Arduinon sulakeasetuksia. Ole varovainen sulakkeiden kanssa; Voit lukita itsesi, jos asetat ne väärin. Edellisessä ohjeessa esittelin, kuinka voit lukea ja asettaa sulakkeet ohjelmoijallasi ja avrdude -ohjelmalla. Tässä näytän sinulle, kuinka voit lukea sulakkeet ajon aikana nähdäksesi, miten MCU on itse asettanut ne. Huomaa, että tämä ei ole kääntöaika-asetus, jonka saat määritelmistä, vaan todelliset sulakkeet, kun MCU lukee ne ajon aikana. Taulukosta 27-9 ATmega328P-tietolomakkeessa (tietokirja, enemmän sen kaltaista) Fuse Low Byte -bitit ovat seuraavat:

CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0On mielenkiintoista huomata, että sulakkeilla 0 tarkoittaa ohjelmoitua ja 1 tarkoittaa, että kyseinen bitti on ohjelmoimaton. Hieman intuitiivinen, mutta kun tiedät sen, tiedät sen.

  • CKDIV8 asettaa CPU -kellosi jaettavaksi kahdeksalla. ATmega328P on tehtaalla ohjelmoitu käyttämään sisäistä oskillaattoriaan 8 MHz: n taajuudella CKDIV8 -ohjelmoidulla (eli asetuksella 0), jolloin lopullinen F_CPU- tai CPU -taajuus on 1 MHz. Arduinolla tämä muuttuu, koska ne on määritetty käyttämään ulkoista oskillaattoria 16 MHz: n taajuudella.
  • CKOUT ohjelmoituna antaa CPU -kellosi PB0: lle, joka on digitaalinen nasta 8 Arduinossa.
  • SUT [1..0] määrittää AVR: n käynnistymisajan.
  • CKSEL [3..0] asettaa kellolähteen, kuten sisäisen RC -oskillaattorin, ulkoisen oskillaattorin jne.

Kun luet sulakkeet, ne palautetaan sinulle heksadesimaalina. Tätä muotoa tarvitset, jos haluat kirjoittaa sulakkeet avrduden kautta. Arduino -laitteellani saan tämän, kun luen alemman sulakkeen tavun:

root@ATmega328p> lfuseLower Fuse: 0xffJoten kaikki bitit on asetettu arvoon 1. Tein saman menettelyn Arduino -kloonilla ja sain saman arvon. Tarkistessani erästä erillistä AVR-järjestelmääni sain 0xDA: n, jonka olin asettanut jonkin aikaa taaksepäin sirun määrittämisessä. Kalibrointi- ja allekirjoitusvaroketavut on poistettu käytöstä koodissa #if 0 -esikäsittelydirektiivin avulla, jota voit muuttaa, jos sinusta tuntuu, että se on hauraa.

Vaihe 4: Muut komennot

Muut komennot
Muut komennot

On olemassa useita muita komentoja, jotka oletuskomentojen tulkki ymmärtää hyödyllisiksi. Näet kaikki toteutetut ja tulevaisuudessa julkaistavat komennot antamalla ohjeita tai valikon kehotteessa. Käsittelen ne nopeasti täällä, koska ne ovat enimmäkseen itsestään selviä. CPU -kellon taajuusasetukset Voit selvittää, mitä laiteohjelmisto on määritetty käyttämään suorittimen kelloasetuksina fcpu -komennolla:

root@ATmega328p> fcpuCPU Taajuus: 16000000Se on 16 miljoonaa tai 16 miljoonaa herz, joka tunnetaan yleisemmin nimellä 16 MHz. Voit muuttaa tätä lennossa mistä tahansa syystä kellokomennolla. Tämä komento sisältää yhden argumentin: esiasetinta, jota käytetään jakamaan kellonopeutesi. Kello -komento ymmärtää nämä esivalinta -arvot:

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

Komentoa käyttämällä:

kello ckdiv2 kun suorittimen nopeus on 16 MHz, kellotaajuus muuttuu 8 MHz: ksi. Käyttämällä ckdiv64 -esiasetinta, jonka alkuperäinen kellotaajuus on 16 MHz, lopullinen kellotaajuus on 250 KHz. Miksi ihmeessä haluat tehdä MCU: sta hitaamman? Ensinnäkin, pienempi kellonopeus kuluttaa vähemmän virtaa, ja jos MCU: n akku loppuu projektin kotelossa, et ehkä tarvitse sitä toimimaan huippunopeudella, joten se voi hidastaa nopeutta ja vähentää virrankulutusta, pidentää akun käyttöikää. Lisäksi jos käytät kelloa minkäänlaisiin ajoitusongelmiin toisen MCU: n kanssa, esimerkiksi UART -ohjelmiston tai vastaavan toteuttamiseen, haluat ehkä asettaa sen tiettyyn arvoon, joka on helppo saada mukava tasainen baudinopeus pienempi virhetaso. Oheislaitejärjestelmien käynnistäminen ja sammuttaminen Samassa yhteydessä kuin aiemmin mainittu virrankulutuksen vähentäminen, voit halutessasi edelleen pienentää virtaa sammuttamalla joitakin käyttämättömiä oheislaitteita. Komentotulkki ja kuori voivat tällä hetkellä käynnistää ja sammuttaa seuraavat oheislaitteet:

  • Analogia-digitaalimuunnin (ADC). Tätä oheislaitetta käytetään, kun käytössäsi on analoginen anturi, joka tuottaa tietoja (kuten lämpötila, valo, kiihtyvyys jne.) Ja jos haluat muuntaa sen digitaaliseksi arvoksi.
  • Serial Peripheral Interface (SPI). SPI-väylää käytetään kommunikoimaan muiden SPI-yhteensopivien laitteiden kanssa, kuten ulkoiset muistit, LED-ohjaimet, ulkoiset ADC: t jne. Osia SPI: tä käytetään Internet-palveluntarjoajan ohjelmointiin tai ainakin nastat ovat, joten ole varovainen sammuttaessasi tämän jos ohjelmoit Internet -palveluntarjoajan kautta.
  • Kaksijohtiminen liitäntä. Jotkut ulkoiset laitteet käyttävät I2C-väylää kommunikointiin, vaikka ne korvataan nopeasti SPI-yhteensopivilla laitteilla, koska SPI: llä on suurempi suorituskyky.
  • USART. Tämä on sarjaliitäntäsi. Et luultavasti halua kytkeä tätä pois päältä, jos olet yhteydessä AVR -laitteeseen sarjayhteyden kautta! Lisäsin sen kuitenkin tänne luurangoksi laitteille, joissa on useita USART -laitteita, kuten ATmega162 tai ATmega644P.
  • kaikki. Tämä argumentti powerup- tai powerdown -komennolle kytkee kaikki mainitut oheislaitteet päälle tai sammuttaa ne yhdellä komennolla. Käytä jälleen tätä komentoa viisaasti.

root@ATmega328p> powerdown twi Twi: n virrankatkaisu Complete.root@ATmega328p> powerup twiPowerup of twi complete.

Ajastimien käynnistäminen ja pysäyttäminen Kuorissa on sisäänrakennettu 16-bittinen ajastin, joka on käytettävissä. Ajastin käynnistetään ajastinkomennolla:

ajastimen käynnistysja pysäytä ajastin stop -argumentilla

ajastimen pysäytysTämä ajastin ei ole ristiriidassa sisäisen USART -ajastimen kanssa. Katso USART -ajastimen toteutustietojen koodista, jos tällaiset loukkaavat yksityiskohdat kiinnostavat sinua

root@ATmega328p> ajastimen käynnistys Käynnistetty timer.root@ATmega328p> ajastimen pysäytys Kulunut aika: ~ 157 sekuntia Todennus Kuori voi tallentaa 8 merkin salasanan EEPROMiin. Tämä salasanamekanismi luotiin tukemaan telnet -kirjautumisominaisuuksia, mutta sitä voidaan laajentaa muiden asioiden suojaamiseksi. Voit esimerkiksi vaatia tiettyjä komentoja, kuten rekisteriarvojen muuttamista, todennusmekanismin avulla.

root@ATmega328p> passwd blah Kirjoitti pääsalasanan EEPROMiinValtuuta salasanaa vastaan (tai vaadi ohjelmallista valtuutusta koodin kautta) auth -komennolla. Huomaa, että jos yrität muuttaa pääsalasanaa ja jo pääsalasana on jo asetettu, sinun on valtuutettava itsesi vanhaa salasanaa vastaan, ennen kuin voit vaihtaa sen uuteen salasanaan

root@ATmega328p> passwd blinky Sinun on ensin valtuutettava itsesi.root@ATmega328p> auth blahAuthorized.root@ATmega328p> passwd blinky Kirjoittanut uuden pääsalasanan EEPROMiinTietenkin sinun on ladattava avrsh.eep -tiedosto, jos poistat laiteohjelmiston, jotta vanhat arvot ja muuttujat palautetaan. Makefile luo EEPROM -tiedoston puolestasi. Muuttujat Kuori ymmärtää käyttäjän määrittämien muuttujien käsitteen. Koodi rajoittaa tämän arvoon 20, mutta voit muuttaa sitä halutessasi muuttamalla skriptin määritelmää MAX_VARIABLES. H. Voit tallentaa minkä tahansa 16-bittisen arvon (eli minkä tahansa luvun enintään 65, 536) muuttujaan, joka palautetaan myöhemmin muistiin. Syntaksi on samanlainen kuin rekisterit, paitsi että dollarimerkkiä ($) käytetään kuoren muuttujien merkitsemiseen. Listaa kaikki muuttujasi tulostusmuuttujat -komennolla

Käyttäjän määrittämät muuttujat: Indeksin nimi -> Arvo (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): $ FREE $ -> 0Täydellinen. Aseta muuttuja

$ newvar = 25 $ aikakatkaisu = 23245Hanki tietyn muuttujan arvo

root@ATmega328p> echo $ newvar $ newvar 25Näet kaikki muuttujat, jotka olet tällä hetkellä ilmentänyt tulostuskomennolla, jonka tiedät

Käyttäjän määrittämät muuttujat: Indeksin nimi -> Arvo (01): newvar -> 25 (02): aikakatkaisu -> 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): $ FREE $ -> 0Täydellinen. Nimi $ FREE $ osoittaa vain, että muuttujan sijainti on ilmainen eikä sille ole vielä määritetty muuttujan nimeä.

Vaihe 5: Kuoren mukauttaminen

Shellin mukauttaminen
Shellin mukauttaminen

Voit vapaasti hakata koodin ja muokata sitä omiin tarpeisiisi, jos haluat. Jos olisin tiennyt julkaisevani tämän koodin, olisin tehnyt erillisen komentotulkin luokan ja komentorakenteen ja yksinkertaisesti iteroin tämän kutsumalla funktio -osoittimen. Se vähentäisi koodin määrää, mutta sellaisenaan kuori jäsentää komentorivin ja kutsuu asianmukaisen kuorimenetelmän. Voit lisätä omia mukautettuja komentojasi seuraavasti: 1. Lisää komento jäsennysluetteloon jäsennä komentorivi ja anna komento ja mahdolliset argumentit erikseen. Argumentit välitetään osoittimina osoittimille tai joukko osoittimia, mutta haluat työskennellä niiden kanssa. Tämä löytyy shell.cpp -tiedostosta. Avaa shell.cpp ja etsi AVRShell -luokan ExecCmd -menetelmä. Voit halutessasi lisätä komennon ohjelmamuistiin. Jos teet niin, lisää komento ohjelmam.h ja progmem.cpp. Voit lisätä komennon ohjelmoitavaan muistiin suoraan PSTR () -makron avulla, mutta luot uuden varoituksen edellä mainitusta tyypistä. Jälleen tämä on tunnettu vika, joka toimii C ++: n kanssa, mutta voit kiertää tämän lisäämällä komennon suoraan progmem.* -Tiedostoihin, kuten olen tehnyt. Jos et halua lisätä SRAM -käyttöäsi, voit lisätä komennon kuten olen osoittanut "clock" -komennolla. Oletetaan, että haluat lisätä uuden komennon nimeltä "newcmd". Siirry AVRShell:: ExecCmd -tiedostoon ja etsi sopiva paikka seuraavan koodin lisäämiseen:

else if (! strcmp (c, "newcmd")) cmdNewCmd (args);Tämä lisää komennosi ja kutsuu cmdNewCmd -menetelmän, jonka kirjoitat seuraavassa vaiheessa. 2. Kirjoita mukautettu komentokoodi Lisää samaan tiedostoon mukautettu komentokoodi. Tämä on menetelmän määritelmä. Haluat silti lisätä ilmoituksen shell.h -tiedostoon. Liitä se vain muihin komentoihin. Edellisessä esimerkissä koodi saattaa näyttää tältä

voidAVRShell:: cmdNewCmd (char ** args) {sprintf_P (buff, PSTR ("Sinun komento on %s / r / n", args [0]); WriteRAM (buff);}Täällä on useita asioita. Ensinnäkin "buff" on 40-merkkinen array-puskuri, joka sisältyy koodiin käyttöösi. Käytämme sprintf -ohjelmamuistiversiota, koska välitämme sen PSTR: nä. Voit käyttää tavallista versiota, jos haluat, mutta varmista, ettet välitä muotoa PSTR: ssä. Argumentit ovat myös args -taulukossa. Jos kirjoitit "newcmd arg1 arg2", saat nämä argumentit args [0] - ja args [1] -indeksien avulla. Voit välittää enintään MAX_ARGS argumenttia, kuten koodi on määritelty. Voit vapaasti muuttaa arvoa kääntäessäsi uudelleen, jos haluat lähettää paljon muita argumentteja kerralla. WriteLine ja WriteRAM ovat globaaleja funktioita, jotka palauttavat UART -nimiset menetelmät. Tämän toiminnon toinen argumentti on implisiittinen. Jos et anna mitään, komentokehote kirjoitetaan myöhemmin. Jos annat 0: n toiseksi argumentiksi, kehotetta ei kirjoiteta. Tästä on hyötyä, kun haluat kirjoittaa useita erillisiä merkkijonoja ennen komentokehotteen palauttamista käyttäjälle. 3. Anna komentotulkin suorittaa komentokoodi Olet jo kertonut komentotulkin suorittajalle, että se suorittaa menetelmän cmdNewCmd, kun asennat uuden komennon, mutta lisää se shell.h -tiedostoon, jotta kuoriobjekti ymmärtää sen. Lisää se vain viimeisen komennon alle tai ensimmäisen komennon eteen tai mihin tahansa sinne. Käännä ja lataa laiteohjelmisto Arduinoosi, ja uusi komento on saatavilla kehotteesta.

Vaihe 6: Yhteenveto

Sinun pitäisi tietää, kuinka asentaa AVR/Arduino -laite ja muodostaa siihen yhteys, ja saada käynnissä oleva mikro -ohjaimesi kehote. Tiedät useita komentoja, jotka vetävät ajonaikaisia tietoja MCU: sta tai asettavat arvot MCU: han lennossa. Sinulle on myös näytetty, miten voit lisätä oman mukautetun koodin luodaksesi omia ainutlaatuisia komentojasi kuoreen, jotta voit muokata sitä edelleen omiin tarpeisiisi. Voit jopa tyhjentää komentotulkkin, jotta se sisältää vain mukautettuja komentojasi, jos se sopii tarpeisiisi. Kuten aina, odotan kommentteja tai ehdotuksia siitä, miten tätä opastettavaa voidaan parantaa! Pidä hauskaa AVR: n kanssa!

Suositeltava: