Satura rādītājs:

AVRSH: komandu tulka apvalks Arduino/AVR: 6 soļi (ar attēliem)
AVRSH: komandu tulka apvalks Arduino/AVR: 6 soļi (ar attēliem)

Video: AVRSH: komandu tulka apvalks Arduino/AVR: 6 soļi (ar attēliem)

Video: AVRSH: komandu tulka apvalks Arduino/AVR: 6 soļi (ar attēliem)
Video: Проект по Окружающему миру 4 класс, "Путешествуем без опасности" 2024, Jūlijs
Anonim
AVRSH: komandu tulka apvalks Arduino/AVR
AVRSH: komandu tulka apvalks Arduino/AVR

Vai esat kādreiz vēlējies būt “pieteicies” savā AVR mikrokontrollerī? Vai esat kādreiz domājuši, ka būtu forši "kaķēt" reģistru, lai redzētu tā saturu? Vai vienmēr esat vēlējies veidu, kā ieslēgt un izslēgt atsevišķas AVR vai Arduino perifērās apakšsistēmas * reālajā laikā *? Es arī, tāpēc es uzrakstīju AVR apvalku, UNIX līdzīgu apvalku. Tas ir līdzīgs UNIX, jo tas atgādina čaulas kontu, kuru izgājāt un iegādājāties, lai darbinātu savus irc nick sadursmes robotus, kā arī kopīgu komandu. Tam ir arī failu sistēma, kas līdzinās UNIX extfs, izmantojot ārēju EEPROM, taču tas ir kļuvis par projektu pats par sevi, tāpēc es izlaidīšu šo moduli atsevišķi saskaņā ar citu pamācību, kad tas būs gatavs ražošanai. Šeit ir saraksts ar lietām, ko pašlaik varat darīt ar AVR Shell:

  • Reālā laikā izlasiet visus savus datu virzienu reģistrus (DDRn), portus un tapas
  • Rakstiet uz visiem saviem DDR, portiem un tapām, lai reāllaikā ieslēgtu motorus, gaismas diodes vai lasītu sensorus
  • Uzskaitiet visus zināmos sistēmas reģistrus
  • Izveidojiet un saglabājiet vērtības lietotāja definētos mainīgajos, ko dublē EEPROM.
  • Izveidojiet saknes paroli un autentificējieties pret to (izmanto piekļuvei telnetam)
  • Izlasiet konfigurēto CPU pulksteņa ātrumu
  • Mainiet CPU pulksteņa ātrumu, iestatot prescaler
  • Sāciet un apturiet 16 bitu taimeri dažādu lietu laika noteikšanai
  • Ieslēdziet un/vai izslēdziet perifērijas apakšsistēmas: analogo-ciparu pārveidotāji (ADC), seriālā perifēriskā saskarne (SPI), divu vadu saskarne (TWI/I2C), UART/USART. Noder, ja vēlaties samazināt mikrokontrollera enerģijas patēriņu vai iespējot noteiktas funkcijas.
  • Rakstīts C ++ valodā ar atkārtoti lietojamiem objektiem.

Šī pamācība palīdzēs jums instalēt, izmantot un pielāgot avrsh.

1. darbība. Kas jums būs nepieciešams

Kas jums būs nepieciešams
Kas jums būs nepieciešams

Šī pamācība neprasa daudz, izņemot to, ka jūs:

  • Ir Arduino vai ATmega328P. Citi AVR varētu darboties, taču jums, iespējams, būs jāmaina kods, lai uzskaitītu visus reģistrus, kas ir unikāli jūsu MCU. Nosaukumiem ir jāatbilst tikai tam, kas ir norādīts jūsu MCU unikālajā galvenes failā. Daudzi reģistra nosaukumi starp AVR ir vienādi, tāpēc pārvietojot jūsu nobraukums var atšķirties.
  • Ir veids, kā izveidot savienojumu ar Arduino/AVR sērijas USART. Sistēma ir visplašāk pārbaudīta, izmantojot AVR termināli - Windows lietotni, kas izveido sērijas savienojumu, izmantojot jūsu USB vai COM portu. Darbojas ar Arduinos, izmantojot USB savienojumu, un jebkuru AVR, izmantojot Moderndevice.com USB-BUB. Citas termināla iespējas ietver: Putty, minicom (Linux un FreeBSD), ekrānu (Linux/FreeBSD), Hyperterminal, Teraterm. Es atklāju, ka špakteles un teraterm savienošanas laikā nosūta dažus atkritumus, lai jūsu pirmā komanda varētu tikt izkropļota.
  • Ir instalēta un darbojas AVR Shell programmaparatūra, kuru varat lejupielādēt no šīm lapām vai vienmēr iegūt jaunāko versiju vietnē BattleDroids.net.

Lai instalētu AVR termināli, vienkārši izpakojiet to un palaidiet to. Lai instalētu AVR Shell programmaparatūru, lejupielādējiet to un vai nu tieši augšupielādējiet hex failu un pievienojiet seriālo termināli ar 9600 baudām, vai arī pats to apkopojiet ar "make" un pēc tam "make program", lai augšupielādētu hex. Ņemiet vērā, ka, iespējams, būs jāmaina AVRDUDE iestatījumi, lai tie atspoguļotu jūsu COM portu. Piezīme: PROGMEM atribūts ir bojāts pašreizējā AVR GCC C ++ ieviešanā, un tā ir zināma kļūda. Ja to apkopojat, gaidiet, ka saņemsiet daudz brīdinājuma ziņojumu, kuros teikts: "brīdinājums: programmas atmiņas apgabalā var ievietot tikai inicializētus mainīgos." Šis brīdinājums ir ne tikai kaitinošs, bet arī nekaitīgs. Tā kā C ++ iegultajā platformā nav augsta AVR GCC prioritāšu sarakstā, nav zināms, kad tas tiks novērsts. Ja pārbaudīsit kodu, redzēsit, kur esmu veicis pasākumus, lai samazinātu šo brīdinājumu, ieviešot savus atribūtu paziņojumus. Diezgan vienkārši. Lejupielādējiet un instalējiet visu, kas jums varētu būt nepieciešams, lai pēc tam pāršķirtu lapu un sāktu sprakšķēt.

2. darbība: reģistru lasīšana un rakstīšana

Lasīšanas un rakstīšanas reģistri
Lasīšanas un rakstīšanas reģistri

AVR apvalks galvenokārt tika rakstīts, lai piekļūtu dažiem sensoriem, kurus biju pievienojis savam AVR. Tas sākās ar vienkāršu LED, pēc tam pārcēlās uz gaismas sensoriem, temperatūras sensoriem un visbeidzot uz diviem ultraskaņas devējiem. avrsh var iestatīt šo sensoru digitālos komponentus, rakstot reģistros, kas tos kontrolē. Manipulēšana ar AVR reģistriem darbības laikā Lai iegūtu visu zināmo Arduino reģistru sarakstu, ierakstiet:

drukāt reģistrus un jūs saņemsiet izdruku, kas izskatās šādi

Es zinu šādus reģistrus:

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 TWR TWR TWR TWR Lai redzētu, kā atsevišķie biti ir iestatīti jebkurā reģistrā, izmantojiet komandu cat vai echo

kaķis %GPIOR0 Šeit es lūdzu komandu tulku parādīt vai atkārtot vispārējā mērķa I/O reģistra #0 saturu. Ievērojiet procentu zīmi (%) reģistra nosaukuma priekšā. Tas ir nepieciešams, lai čaulā norādītu, ka tas ir rezervēts atslēgvārds, kas identificē reģistru. Tipiska atbalss komandas izeja izskatās šādi

GPIOR0 (0x0) iestatīts uz [00000000] Izvade parāda reģistra nosaukumu, reģistrā atrasto heksadecimālo vērtību un reģistra bināro attēlojumu (katru bitu parādot kā 1 vai 0). Lai jebkurā reģistrā iestatītu konkrētu bitu, izmantojiet operatoru "indekss" . Piemēram, pieņemsim, ka es vēlos trešo bitu uz 1

%GPIOR0 [3] = 1 un apvalks sniegs jums atbildi, norādot tās darbību un rezultātu

GPIOR0 (0x0) iestatīts uz [00000000] (0x8) iestatīts uz [00001000] Neaizmirstiet procentu zīmi, lai informētu čaulu, ka strādājat ar reģistru. Ņemiet vērā arī to, ka, iestatot trešo bitu, tas ir 4 biti, jo mūsu AVR izmanto nulles indeksu. Citiem vārdiem sakot, skaitot līdz 3. bitam, jūs skaitāt 0, 1, 2, 3, kas ir 4. vieta, bet 3. bits. Jūs varat notīrīt mazliet tādā pašā veidā, iestatot bitu uz nulli. Iestatot šādus bitus, jūs varat mainīt AVR darbību uzreiz. Piemēram, mainot CTC taimera atbilstības vērtību, kas atrodama OCR1A. Tas arī ļauj ielūkoties noteiktos iestatījumos, kas jums būtu programmatiski jāpārbauda savā kodā, piemēram, jūsu datu pārraides ātruma UBBR vērtība. Darbs ar DDRn, PORTn un PINn I/O tapas tiek piešķirtas arī reģistriem, un tās var iestatīt tieši tādā pašā veidā, taču ir izveidota īpaša sintakse darbam ar šāda veida reģistriem. Kodā ir normāls process, piemēram, lai ieslēgtu gaismas diodi vai citu ierīci, kurai nepieciešams augsts vai zems digitālais līmenis. Tam ir jāiestata datu virzienu reģistrs, lai norādītu, ka tapa ir paredzēta izvadīšanai, un pēc tam rakstiet 1 vai 0 uz konkrēto bitu pareizajā portā. Pieņemot, ka mums ir gaismas diode, kas savienota ar digitālo tapu 13 (PB5), un mēs vēlamies to ieslēgt, lūk, kā to izdarīt, kamēr darbojas jūsu AVR

iestatiet tapu pb5 izeju rakstiet tapu pb5 augstu Izeja, papildus iespējai redzēt jūsu LED iedegas, izskatītos šādi

root@ATmega328p> set pin pb5 output Iestatīt pb5 for outputroot@ATmega328p> rakstīt pin pb5 high "Sakne@ATmega328p>" ir čaulas uzvedne, kas norāda, ka tā ir gatava pieņemt no jums komandas. Lai izslēgtu gaismas diodi, jūs vienkārši uzrakstīsit zemu tapu. Ja vēlaties nolasīt digitālo ievadi no tapas, izmantojiet lasīšanas komandu. Izmantojot mūsu iepriekš minēto piemēru

root@ATmega328p> lasīt pin pb5Pin: pb5 ir HIGH Alternatīvi, vienkārši atbalsojiet tapu reģistru, kas kontrolē šo tapas portu. Piemēram, ja mums ir dip slēdži, kas savienoti ar 7. un 8. ciparu tapu (PD7 un PD8), varat nosūtīt komandu

echo %PIND un apvalks parādītu šī reģistra saturu, parādot visus pievienoto ierīču ieejas/izejas stāvokļus un to, vai slēdža stāvoklis bija ieslēgts vai izslēgts.

3. darbība: drošinātāju lasīšana un rakstīšana

Drošinātāji lasīšanai un rakstīšanai
Drošinātāji lasīšanai un rakstīšanai

Drošinātāji ir īpaši reģistru veidi. Tie kontrolē visu, sākot no jūsu mikrokontrollera pulksteņa ātruma un beidzot ar pieejamajām programmēšanas metodēm līdz EEPROM rakstīšanas aizsardzībai. Dažreiz šie iestatījumi būs jāmaina, it īpaši, ja veidojat atsevišķu AVR sistēmu. Es neesmu pārliecināts, ka jums vajadzētu mainīt drošinātāja iestatījumus Arduino. Esiet uzmanīgi ar drošinātājiem; jūs varat bloķēties, ja tos iestatījāt nepareizi. Iepriekšējā pamācībā es parādīju, kā jūs varat lasīt un iestatīt drošinātājus, izmantojot savu programmētāju un avrdude. Šeit es jums parādīšu, kā nolasīt drošinātājus darbības laikā, lai redzētu, kā jūsu MCU tos faktiski ir iestatījis. Ņemiet vērā, ka tas nav kompilācijas laika iestatījums, ko iegūstat no definīcijām, bet gan faktiskie drošinātāji, kad MCU tos nolasa izpildes laikā. No tabulas 27-9 tabulā ATmega328P datu lapā (datu bāzē, vairāk līdzīgi tam) drošinātāju zemā baita biti ir šādi:

CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0Jāatzīmē interesanti, ka ar drošinātājiem 0 nozīmē ieprogrammētu un 1 nozīmē, ka konkrētais bits nav ieprogrammēts. Nedaudz pretintuitīvs, bet, kad jūs to zināt, jūs to zināt.

  • CKDIV8 nosaka jūsu CPU pulksteņa dalījumu ar 8. ATmega328P nāk no rūpnīcas, kas ir ieprogrammēta tā iekšējā oscilatora izmantošanai 8 MHz frekvencē ar CKDIV8 ieprogrammētu (ti, iestatītu uz 0), nodrošinot galīgo F_CPU vai CPU frekvenci 1 MHz. Arduino ierīcēs tas tiek mainīts, jo tie ir konfigurēti izmantot ārēju oscilatoru 16 MHz frekvencē.
  • CKOUT, kad tas ir ieprogrammēts, izvadīs jūsu CPU pulksteni uz PB0, kas ir Arduinos digitālā tapa 8.
  • SUT [1..0] nosaka jūsu AVR palaišanas laiku.
  • CKSEL [3..0] iestata pulksteņa avotu, piemēram, iekšējo RC oscilatoru, ārējo oscilatoru utt.

Izlasot drošinātājus, tie tiks atgriezti heksadecimālā skaitlī. Šis ir formāts, kas jums nepieciešams, ja vēlaties rakstīt drošinātājus, izmantojot avrdude. Manā arduino šeit ir tas, ko es saņemu, lasot apakšējo drošinātāju baitu:

root@ATmega328p> lasīt lfuseLower Fuse: 0xffTātad, visi biti ir iestatīti uz 1. Es veicu to pašu procedūru ar Arduino klonu un saņēmu to pašu vērtību. Pārbaudot vienu no savām atsevišķajām AVR sistēmām, es saņēmu 0xDA, kas ir vērtība, kuru kādu laiku biju iestatījis, konfigurējot mikroshēmu. To pašu procedūru izmanto, lai pārbaudītu augsta drošinātāja baitu, paplašināto drošinātāju baitu un bloķēšanas drošinātājus. Kalibrēšanas un paraksta drošinātāju baiti kodā ir atspējoti, izmantojot priekšprocesora direktīvu #if 0, kuru varat mainīt, ja jūtaties sabojāts.

4. darbība. Citas komandas

Citas komandas
Citas komandas

Ir vairākas citas komandas, kuras noklusējuma komandu tulks saprot, kuras jums var šķist noderīgas. Jūs varat redzēt visas ieviestās un turpmākās izlaišanas komandas, uzvednē izsniedzot palīdzību vai izvēlni. Es ātri tos aprakstīšu šeit, jo tie galvenokārt ir pašsaprotami. CPU pulksteņa frekvences iestatījumi Jūs varat uzzināt, ko jūsu programmaparatūra ir konfigurēta lietošanai kā CPU pulksteņa iestatījumi, izmantojot komandu fcpu:

root@ATmega328p> fcpuCPU biežums: 16000000Tas ir 16 miljoni jeb 16 miljoni hercu, plašāk pazīstami kā 16 MHz. Jebkura iemesla dēļ to var mainīt, izmantojot pulksteni. Šī komanda izmanto vienu argumentu: prescaler, kas jāizmanto, sadalot pulksteņa ātrumu. Pulksteņa komanda saprot šīs prescaler vērtības:

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

Izmantojot komandu:

pulkstenis ckdiv2 ja jūsu CPU ātrums ir 16 MHz, jūsu pulksteņa ātrums tiks mainīts uz 8 MHz. Izmantojot ckdiv64 prescaler ar sākotnējo pulksteņa ātrumu 16MHz, gala takts būs 250 KHz. Kāpēc uz Zemes jūs vēlētos padarīt savu MCU lēnāku? Pirmkārt, zemāks pulksteņa ātrums patērē mazāk enerģijas, un, ja jūsu MCU izlādējas no akumulatora projekta korpusā, iespējams, ka tas nedarbosies ar maksimālo ātrumu, un tāpēc tas varētu samazināt ātrumu un samazināt tā enerģijas patēriņu, palielinot akumulatora darbības laiku. Turklāt, ja jūs izmantojat pulksteni jebkāda veida laika problēmām ar citu MCU, piemēram, ieviešot programmatūras UART vai kaut ko tamlīdzīgu, iespējams, vēlēsities to iestatīt uz noteiktu vērtību, ar kuru ir viegli iegūt jauku vienmērīgu pārraides ātrumu zemāks kļūdu līmenis. Perifēro apakšsistēmu ieslēgšana un izslēgšana Tajā pašā piezīmē, kā iepriekš minētais enerģijas patēriņa samazinājums, iespējams, vēlēsities samazināt jaudu, izslēdzot dažas iebūvētās perifērijas ierīces, kuras neizmantojat. Komandu tulks un apvalks pašlaik var ieslēgt un izslēgt šādas perifērijas ierīces:

  • Analog-to-Digital Converter (ADC). Šo perifēriju izmanto, ja jums ir analogs sensors, kas nodrošina datus (piemēram, temperatūra, gaisma, paātrinājums utt.), Un jums tas jāpārvērš par ciparu vērtību.
  • Seriālā perifēriskā saskarne (SPI). SPI kopni izmanto, lai sazinātos ar citām ierīcēm, kurās ir iespējota SPI, piemēram, ar ārējām atmiņām, LED draiveriem, ārējiem ADC utt. Dažas SPI daļas tiek izmantotas ISP programmēšanai vai vismaz tapas, tāpēc, izslēdzot to, esiet piesardzīgs ja programmējat, izmantojot ISP.
  • Divu vadu saskarne. Dažas ārējās ierīces saziņai izmanto I2C kopni, lai gan tās strauji tiek aizstātas ar ierīcēm, kas nodrošina SPI, jo SPI ir lielāka caurlaidspēja.
  • USART. Šis ir jūsu seriālais interfeiss. Jūs, iespējams, nevēlaties to izslēgt, ja esat savienots ar AVR, izmantojot seriālo savienojumu! Tomēr es to šeit pievienoju kā skeletu pārnešanai uz ierīcēm, kurām ir vairāki USART, piemēram, ATmega162 vai ATmega644P.
  • visas. Šis arguments ieslēgšanas vai izslēgšanas komandai ieslēdz visas minētās perifērijas ierīces vai izslēdz tās visas ar vienu komandu. Atkal izmantojiet šo komandu saprātīgi.

root@ATmega328p> powerdown twiPievienošana twi complete.root@ATmega328p> powerup twiPowerup of twi complete.

Taimeru palaišana un apturēšana Korpusā ir iebūvēts 16 bitu taimeris, kas ir pieejams lietošanai. Jūs ieslēdzat taimeri ar taimera komandu:

taimera palaišanaun apturiet taimeri ar apstāšanās argumentu

taimera apstāšanāsŠis taimeris nebūs pretrunā ar iekšējo USART taimeri. Skatiet USART taimera ieviešanas informācijas kodu, ja šāda veida asprātīga informācija jūs interesē

root@ATmega328p> taimera startēšana Sākās timer.root@ATmega328p> taimera apstāšanās Pagājušais laiks: ~ 157 sekundes Autentifikācija Korpuss var saglabāt 8 rakstzīmju paroli EEPROM. Šis paroļu mehānisms tika izveidots, lai atbalstītu telnet pieteikšanās iespējas, taču to varēja paplašināt, lai aizsargātu citas lietas. Piemēram, izmantojot autentifikācijas mehānismu, var būt nepieciešamas noteiktas komandas, piemēram, reģistra vērtību maiņa. Iestatiet paroli ar paroles komandu

root@ATmega328p> passwd blah Ierakstīja saknes paroli EEPROMPilnvarojiet paroli (vai pieprasiet autorizāciju, izmantojot kodu), izmantojot komandu auth. Ņemiet vērā: ja mēģināt nomainīt saknes paroli un jau ir iestatīta saknes parole, jums ir jāautorizējas pret veco paroli, pirms atļauja to nomainīt uz jaunu

root@ATmega328p> passwd blinky Vispirms jums ir jāautorizē sakne@ATmega328p> auth blahAuthorized.root@ATmega328p> passwd blinkyProtams, jums būs jāielādē fails avrsh.eep, ja izdzēsīsit programmaparatūru, lai atjaunotu vecās vērtības un mainīgos. Makefile izveidos jums EEPROM failu. Mainīgie Korpuss saprot lietotāja definētu mainīgo jēdzienu. Kods ierobežo to līdz 20, bet jūs varat to mainīt, ja vēlaties, mainot skripta definīciju MAX_VARIABLES.h. Jebkuru 16 bitu vērtību (tas ir, jebkuru skaitli līdz 65, 536) varat saglabāt mainīgajā, lai to atsauktu vēlāk. Sintakse ir līdzīga reģistriem, izņemot to, ka čaulas mainīgo apzīmēšanai tiek izmantota dolāra zīme ($). Sarakstiet visus mainīgos, izmantojot komandu drukāt mainīgos

Lietotāja definētie mainīgie: Indeksa nosaukums -> Vērtība (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): BEZ MAKSAS $ -> 0Pabeigts. Iestatiet mainīgo

$ newvar = 25 $ taimauts = 23245Iegūstiet dotā mainīgā vērtību

25. sakne@ATmega328p> echo $ newvar $ newvar 25Jūs varat redzēt, kādi visi mainīgie, kurus pašlaik esat izveidojis, izmantojot jau zināmo drukas komandu

Lietotāja definēti mainīgie: Indeksa nosaukums -> Vērtība (01): newvar -> 25 (02): taimauts -> 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 $ -> 0Pabeigts. Nosaukums $ FREE $ tikai norāda, ka mainīgā atrašanās vieta ir brīva un tai vēl nav piešķirts mainīgā nosaukums.

5. darbība: apvalka pielāgošana

Shell pielāgošana
Shell pielāgošana

Ja vēlaties, varat brīvi uzlauzt kodu un pielāgot to savām vajadzībām. Ja es būtu zinājis, ka atbrīvošu šo kodu, es būtu izveidojis atsevišķu komandu tulku klasi un komandu struktūru un vienkārši atkārtotu, izsaucot funkciju rādītāju. Tas samazinātu koda daudzumu, bet šādā veidā apvalks parsē komandrindu un izsauc atbilstošo čaulas metodi. Lai pievienotu savas pielāgotās komandas, rīkojieties šādi: 1. Pievienojiet savu komandu parsēšanas sarakstam Komandu parsētājs parsējiet komandrindu un sniedziet komandu un visus argumentus atsevišķi. Argumenti tiek nodoti rādītājiem rādītājiem vai rādītāju masīvam, tomēr jums patīk ar tiem strādāt. Tas ir atrodams shell.cpp. Atveriet shell.cpp un atrodiet AVRShell klases ExecCmd metodi. Iespējams, vēlēsities pievienot komandu programmas atmiņai. Ja to darāt, pievienojiet komandu progmem.h un progmem.cpp. Komandu varat pievienot programmas atmiņai tieši, izmantojot makro PSTR (), taču jūs ģenerēsit citu iepriekš minētā tipa brīdinājumu. Atkal šī ir zināma kļūda, kas darbojas ar C ++, taču jūs varat to apiet, pievienojot komandu tieši programmā.* Failos, kā es to esmu darījis. Ja nevēlaties pievienot savu SRAM lietojumu, varat pievienot komandu, kā es ilustrēju ar komandu "pulkstenis". Pieņemsim, ka vēlaties pievienot jaunu komandu ar nosaukumu "newcmd". Dodieties uz AVRShell:: ExecCmd un atrodiet ērtu vietu, kur ievietot šādu kodu:

else if (! strcmp (c, "newcmd")) cmdNewCmd (args);Tas pievienos jūsu komandu un izsauks cmdNewCmd metodi, kuru uzrakstīsit nākamajā darbībā. 2. Ierakstiet pielāgoto komandu kodu Tajā pašā failā pievienojiet pielāgoto komandu kodu. Šī ir metodes definīcija. Jūs joprojām vēlaties pievienot deklarāciju shell.h. Vienkārši pievienojiet to citām komandām. Iepriekšējā piemērā kods varētu izskatīties apmēram šādi

voidAVRShell:: cmdNewCmd (char ** args) {sprintf_P (buff, PSTR ("Jūsu komanda ir %s / r / n", args [0]); WriteRAM (buff);}Šeit ir vairākas lietas. Pirmkārt, "buff" ir 40 rakstzīmju masīva buferis, kas kodā ir paredzēts jūsu lietošanai. Mēs izmantojam sprintf programmas atmiņas versiju, jo mēs nododam tai PSTR. Ja vēlaties, varat izmantot parasto versiju, taču pārliecinieties, ka nenododat formātu PSTR. Arī argumenti ir args masīvā. Ja ierakstījāt "newcmd arg1 arg2", varat iegūt šos argumentus ar args [0] un args [1] apakšrakstiem. Varat nodot ne vairāk kā MAX_ARGS argumentus, kā noteikts kodā. Jūtieties brīvi mainīt šo vērtību, kad veicat atkārtotu kompilāciju, ja jums vienlaikus ir jānodod daudz vairāk argumentu. WriteLine un WriteRAM ir globālas funkcijas, kas atgriež tāda paša nosaukuma UART metodes. Otrais šīs funkcijas arguments ir netiešs. Ja neko nenodosit, pēc tam tiks uzrakstīta komandu uzvedne. Ja kā otro argumentu atzīmēsit 0, uzvedne netiks rakstīta. Tas ir noderīgi, ja vēlaties izvadīt vairākas atsevišķas virknes, pirms komandrindas tiek atdotas lietotājam. 3. Lieciet čaulam izpildīt komandas kodu Jūs jau esat teicis čaulas izpildītājam izpildīt metodi cmdNewCmd, kad iestatāt jauno komandu, bet pievienojiet to failam shell.h, lai to saprastu čaulas objekts. Vienkārši pievienojiet to zem pēdējās komandas vai pirmās komandas priekšā vai jebkurā vietā tur. Un tas arī viss. Pārkompilējiet un augšupielādējiet programmaparatūru savā Arduino, un jūsu jaunā komanda ir pieejama no korpusa, kad tiek parādīts uzaicinājums.

6. darbība. Kopsavilkums

Jums jāzina, kā instalēt AVR/Arduino un izveidot savienojumu ar to, un saņemt tiešu uzvedni uz jūsu darbojošos mikrokontrolleri. Jūs zināt vairākas komandas, kas no MCU izvilks izpildlaika datus vai iestatīs vērtības MCU. Jums ir arī parādīts, kā pievienot savu pielāgoto kodu, lai apvalkam izveidotu savas unikālas komandas, lai to vēl vairāk pielāgotu savām vajadzībām. Jūs pat varat izjaukt komandu tulku, lai tajā būtu tikai jūsu pielāgotās komandas, ja tas atbilst jūsu vajadzībām. Es ceru, ka jums patika šī pamācība un ka AVR apvalks jums var būt noderīgs kā reāllaika komandu tulks vai kā mācību procesu, īstenojot savu. Kā vienmēr, es ceru uz jebkādiem komentāriem vai ieteikumiem par to, kā šo pamācību var uzlabot! Izklaidējieties ar savu AVR!

Ieteicams: