INHOUDSOPGAWE:

AVRSH: 'n Command Interpreter Shell vir Arduino/AVR .: 6 stappe (met foto's)
AVRSH: 'n Command Interpreter Shell vir Arduino/AVR .: 6 stappe (met foto's)

Video: AVRSH: 'n Command Interpreter Shell vir Arduino/AVR .: 6 stappe (met foto's)

Video: AVRSH: 'n Command Interpreter Shell vir Arduino/AVR .: 6 stappe (met foto's)
Video: Ars Nouveau is OP. 2024, Julie
Anonim
AVRSH: 'n Command Interpreter Shell vir Arduino/AVR
AVRSH: 'n Command Interpreter Shell vir Arduino/AVR

Wil u ooit by u AVR -mikrobeheerder 'aangemeld' wees? Het u al ooit gedink dit sal gaaf wees om 'n register te "kat" om die inhoud daarvan te sien? Wou u nog altyd 'n manier hê om individuele perifere substelsels van u AVR of Arduino in * real-time * aan en uit te skakel? Ek ook, so ek het die AVR Shell, 'n UNIX-agtige dop, geskryf. Dit is UNIX-agtig, want dit herinner aan die doprekening waarop u uitgegaan en gekoop het om u botsings met irc nick-botsings te gebruik, sowel as 'n opdrag of twee gemeen. Dit het ook 'n lêerstelsel wat lyk soos UNIX-extfs, met behulp van 'n eksterne EEPROM, maar dit het 'n projek op sigself geword, so ek sal die module afsonderlik onder 'n ander instruksie vrystel wanneer dit gereed is vir produksie. Hier is 'n lys van die dinge wat u tans met die AVR Shell kan doen:

  • Lees al u Data Direction Registers (DDRn), hawens en penne intyds
  • Skryf aan al u DDRn's, hawens en penne om motors, LED's of real-time sensors aan te skakel
  • Maak 'n lys van alle bekende registers op die stelsel
  • Skep en stoor waardes in gebruikersgedefinieerde veranderlikes wat deur EEPROM gerugsteun word.
  • Skep 'n wortelwagwoord en verifieer dit (gebruik vir telnet -toegang)
  • Lees die ingestelde CPU -kloksnelheid
  • Verander die kloksnelheid van die SVE deur 'n voorverkoeler in te stel
  • Begin en stop 16-bis-timers vir die tydsberekening van verskillende dinge
  • Perifere substelsels aan en/of afskakel: analoog na digitale omskakelaars (ADC), seriële perifere koppelvlak (SPI), tweedraads koppelvlak (TWI/I2C), UART/USART. Nuttig as u die kragverbruik van die mikrobeheerder wil verminder of om sekere funksies moontlik te maak.
  • Geskryf in C ++ met herbruikbare voorwerpe.

Hierdie instruksies gaan deur die installasie, gebruik en aanpassing van avrsh.

Stap 1: wat u benodig

Wat jy nodig het
Wat jy nodig het

Hierdie instruksies verg nie veel nie, behalwe dat u:

  • Het 'n Arduino of ATmega328P. Ander AVR's kan werk, maar u moet moontlik die kode verander om enige registers wat uniek is aan u MCU te lys. Die name hoef net te pas by wat in die koplêer wat uniek is vir u MCU, gelys word. Baie van die registername is dieselfde tussen AVR's, dus u kilometers kan wissel by die oordrag.
  • Maak 'n manier om aan te sluit by die seriële USART van u Arduino/AVR. Die stelsel is die mees omvattend getoets met die AVR Terminal, 'n Windows -app wat 'n reekskoppeling maak via u USB- of COM -poort. Werk saam met Arduinos met behulp van die USB-verbinding en enige AVR met behulp van die USB-BUB van Moderndevice.com. Ander terminale opsies sluit in: stopverf, minicom (Linux en FreeBSD), skerm (Linux/FreeBSD), Hyperterminal, Teraterm. Ek het ontdek dat stopverf en teraterm vullis stuur wanneer u aansluit, sodat u eerste opdrag kan skeefloop.
  • Laat die AVR Shell -firmware geïnstalleer en werk, wat u van hierdie bladsye kan aflaai, of kry altyd die nuutste weergawe op BattleDroids.net.

Pak die AVR -terminale uit, pak dit uit en voer dit uit. Om die AVR Shell -firmware te installeer, laai dit af en laai die hex -lêer direk op en koppel u seriële terminaal op 9600 baud, of stel dit self saam met 'make' en dan 'maak program' om die hex op te laai. Let daarop dat u moontlik die AVRDUDE -instellings moet verander om u COM -poort weer te gee. Opmerking: die PROGMEM -kenmerk is gebreek in die huidige AVR GCC -implementering vir C ++, en dit is 'n bekende fout. As u dit saamstel, verwag dat u baie waarskuwingsboodskappe sal kry wat sê: 'waarskuwing: slegs geïnitialiseerde veranderlikes kan in die programgeheue gebied geplaas word'. Behalwe dat dit irriterend is om te sien, is hierdie waarskuwing ook onskadelik. Aangesien C ++ op die ingebedde platform nie hoog op die AVR GCC -prioriteitslys is nie, is dit onbekend wanneer dit opgelos sal word. As u na die kode kyk, sal u sien waarheen ek dit reggekry het om hierdie waarskuwing te verminder deur my eie kenmerkverklarings toe te pas. Laai af en installeer alles wat u nodig het om die bladsy om te draai, en laat ons begin kraak.

Stap 2: Lees- en skryfregisters

Lees- en skryfregisters
Lees- en skryfregisters

Die AVR Shell is hoofsaaklik geskryf om toegang te verkry tot sommige sensors wat ek aan my AVR gekoppel het. Dit het begin met 'n eenvoudige LED en daarna na ligsensors, temperatuursensors en uiteindelik na twee ultrasoniese omvormers. avrsh kan die digitale komponente van hierdie sensors instel deur te skryf aan die registers wat dit beheer. AVR -registers manipuleer terwyl dit loop Om 'n lys van alle bekende registers op u Arduino te kry, tik:

drukregisters en u kry 'n afdruk wat so lyk

Ek weet van die volgende registers:

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 GDGG ADCSRA ADCSRB ADMUX DIDR0 DIDR1 TCCR1A TCCR1B TCCR1C TCNT1L TCNT1H ICR1L ICR1H OCR1AL OCR1AH OCR1BL OCR1BH TCCR2A TCCR2B TCNT2 OCR2A OCR2B ASSR TWBR TWSR TWR0 UR0 UR0 UR0 UR0 UR0 UR0 UR0 UR0 UR0 UR0 UR0 UR0 UUR Gebruik die kat- of eggo -opdrag om te sien hoe die individuele stukkies in enige register gestel word

kat %GPIOR0 Hier vra ek die opdrag tolk om die inhoud van die algemene doel I/O register #0 weer te gee, of te eggo. Let op die persentasie (%) voor die registernaam. U het dit nodig om aan die dop te dui dat dit 'n voorbehou sleutelwoord is wat 'n register identifiseer. Die tipiese uitset van 'n echo -opdrag lyk so

GPIOR0 (0x0) gestel op [00000000] Die uitset toon die naam van die register, die heksadesimale waarde wat in die register voorkom en die binêre voorstelling van die register (wat elke bietjie as 'n 1 of 0 aandui). Gebruik 'n "indeks van" operateur om 'n spesifieke bietjie in enige register in te stel. Byvoorbeeld, laat ons sê dat ek die derde bietjie na 'n 1 wil hê

%GPIOR0 [3] = 1 en die dop sal u 'n antwoord gee wat aandui dat dit optree en die resultaat

GPIOR0 (0x0) gestel op [00000000] (0x8) ingestel op [00001000] Moenie die persentasie teken vergeet om vir die dop te vertel dat u met 'n register werk nie. Let ook op dat deur die 3de bis in te stel, dit 4 bisse is omdat ons AVR's 'n nul-gebaseerde indeks gebruik. Met ander woorde, tel tot die 3de bietjie tel jy 0, 1, 2, 3, wat die 4de plek is, maar die 3de bietjie. U kan 'n bietjie op dieselfde manier skoonmaak deur 'n bietjie op nul te stel. Deur stukkies soos hierdie in te stel, kan u die werking van u AVR onmiddellik verander. Deur byvoorbeeld die ooreenstemmingswaarde van die CTC -timer in OCR1A te verander. Hiermee kan u ook kyk na spesifieke instellings wat u programmaties in u kode sou moes aanmeld, soos die UBBR -waarde vir u baud -tempo. Werk met DDRn, PORTn en PINn Die I/O -penne word ook aan registers toegeken en kan presies op dieselfde manier ingestel word, maar 'n spesiale sintaksis is geskep om met hierdie tipe registers te werk. In die kode is daar 'n normale proses om, byvoorbeeld, 'n LED of 'n ander toestel aan te skakel wat 'n digitale hoog of laag vereis. Dit vereis dat die datarigtingregister opgestel word om aan te dui dat die pen vir uitvoer is, en dan 'n 1 of 0 na die spesifieke bietjie in die korrekte poort te skryf. Gestel ons het 'n LED gekoppel aan die digitale pen 13 (PB5) en wil ons dit aanskakel, kan u dit doen terwyl u AVR werk

stel pen pb5 outputwrite pin pb5 hoog Die uitset, behalwe dat u u LED kan aanskakel, sal so lyk

root@ATmega328p> stel pin pb5 -uitset in Stel pb5 vir outputroot@ATmega328p> skryf pin pb5 hoog Skryf logika hoog na pin pb5 Die "root@ATmega328p>" is die dopaanwysing wat aandui dat dit gereed is om opdragte van u te aanvaar. Om die LED uit te skakel, skryf jy 'n laagtepunt aan die pen. As u die digitale invoer vanaf 'n pen wil lees, gebruik die leesopdrag. Gebruik ons voorbeeld hierbo

root@ATmega328p> lees pen pb5Pin: pb5 is HOOG Alternatiewelik, eggo net die penregister wat die penpoort beheer. As ons byvoorbeeld dipskakelaars het wat gekoppel is aan digitale pen 7 en 8 (PD7 en PD8), kan u die opdrag stuur

eggo %PIND en die omhulsel sal dan die inhoud van die register vertoon, wat u alle in-/uitset -toestande van gekoppelde toestelle wys en of die toestand van die skakelaar aan of af is.

Stap 3: Lees en skryf sekuriteite

Sekerhede lees en skryf
Sekerhede lees en skryf

Sekerings is spesiale tipes registers. Hulle beheer alles, van die kloksnelheid van u mikrobeheerder tot watter programmeermetodes beskikbaar is om EEPROM te beskerm. Soms moet u hierdie instellings verander, veral as u 'n losstaande AVR-stelsel skep. Ek is nie seker dat u u lontinstellings op Arduino moet verander nie. Wees versigtig met u sekeringe; U kan uself uitsluit as u dit verkeerd stel. In 'n vorige instruksie het ek gedemonstreer hoe u u sekuriteite kan lees en instel met behulp van u programmeerder en avrdude. Hier sal ek u wys hoe u u lontjies tydens die tyd kan teruglees om te sien hoe u MCU dit werklik ingestel het. Let daarop dat dit nie die opstel-tyd-instelling is wat u uit die definisies kry nie, maar die werklike versmeltings terwyl die MCU dit tydens die tyd lees. Uit tabel 27-9 in die ATmega328P-datablad (databoek, meer soos dit) is die stukkies van die Fuse Low Byte soos volg:

CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0'N Interessante ding om op te let is dat met sekuriteite 0 beteken dat dit geprogrammeer is en 'n 1 dat die spesifieke bietjie onprogrammeerbaar is. Ietwat teen-intuïtief, maar as jy dit eers weet, weet jy dit.

  • CKDIV8 stel u CPU -klok in om gedeel te word deur 8. Die ATmega328P kom van die fabriek wat geprogrammeer is om sy interne ossillator op 8MHz te gebruik, met CKDIV8 geprogrammeer (dws op 0), wat u 'n finale F_CPU- of CPU -frekwensie van 1MHz gee. Op Arduino's word dit verander omdat dit gekonfigureer is om 'n eksterne ossillator by 16MHz te gebruik.
  • OPMERKING as u dit geprogrammeer het, sal u CPU -klok op PB0, die digitale pen 8 op Arduinos, uitset.
  • SUT [1..0] spesifiseer die opstarttyd vir u AVR.
  • CKSEL [3..0] stel die klokbron in, soos die interne RC -ossillator, eksterne ossillator, ens.

As u u sekuriteite lees, word dit in heksadesimaal aan u terugbesorg. Dit is die formaat wat u benodig as u die sekuriteite via avrdude wil skryf. Dit is wat ek op my arduino kry as ek die onderste bytes van die lont lees:

root@ATmega328p> lees lfuseLower Fuse: 0xffAlle stukkies is dus op 1. Ek het dieselfde prosedure op 'n Arduino -kloon gedoen en dieselfde waarde gekry. As ek een van my losstaande AVR-stelsels nagaan, kry ek 0xDA, wat die waarde is wat ek 'n geruime tyd teruggestel het toe ek die chip opgestel het. Die kalibrasie- en handtekening -siklusgrepe is in die kode gedeaktiveer met 'n #as 0 -voorverwerkingsvoorskrif, wat u kan verander as u ongemaklik voel.

Stap 4: Ander opdragte

Ander bevele
Ander bevele

Daar is verskeie ander opdragte wat die standaardopdragvertolk verstaan wat u nuttig kan vind. U kan alle geïmplementeerde opdragte en toekomstige vrystellingsopdragte sien deur hulp of spyskaart onmiddellik uit te reik. Ek behandel hulle vinnig hier, aangesien dit meestal vanselfsprekend is. CPU -klokfrekwensie -instellings U kan uitvind wat u firmware is ingestel om te gebruik as die CPU -klokinstellings met die fcpu -opdrag:

root@ATmega328p> fcpuCPU Freq: 16000000Dit is 16 miljoen, oftewel 16 miljoen herz, meer algemeen bekend as 16 MHz. U kan dit om die een of ander rede onmiddelik verander met die klokopdrag. Hierdie opdrag neem een argument: die voorverkoeler om te gebruik wanneer u die kloksnelheid verdeel. Die klokopdrag verstaan hierdie prescaler -waardes:

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

Gebruik die opdrag:

horlosie ckdiv2 As u cpu -snelheid 16MHz is, kan u kloksnelheid na 8MHz verander. As u 'n prescaler van ckdiv64 met 'n aanvanklike kloksnelheid van 16MHz gebruik, sal dit 'n finale kloksnelheid van 250 KHz tot gevolg hê. Waarom sou u u MCU stadiger wil maak? Wel, 'n laer kloksnelheid verbruik minder krag, en as u MCU met 'n battery in 'n projekomhulsel loop, het u dit moontlik nie nodig om met die hoogste spoed te werk nie, en dit kan dus die snelheid verminder en die kragverbruik verminder., wat die batterylewe verhoog. As u ook die klok gebruik vir enige tydsberekening met 'n ander MCU, byvoorbeeld, die implementering van 'n sagteware -UART of iets dergeliks, wil u dit dalk op 'n spesifieke waarde stel, waarmee u 'n goeie ewewigsnelheid kan kry. laer foute. Perifere substelsels aan- en uitskakel Op dieselfde manier as om die kragverbruik wat vroeër genoem is, te verminder, wil u moontlik die krag verder verminder deur sommige van die ingeboude randapparatuur wat u nie gebruik nie, af te skakel. Die opdrag tolk en shell kan tans die volgende randapparatuur aan- en uitskakel:

  • Analoog-na-digitale omskakelaar (ADC). Hierdie randapparaat word gebruik as u 'n analoog sensor het wat data verskaf (soos temperatuur, lig, versnelling, ens.) En dit moet omskakel na 'n digitale waarde.
  • Seriële perifere koppelvlak (SPI). Die SPI-bus word gebruik om te kommunikeer met ander SPI-toestelle, soos eksterne geheue, LED-bestuurders, eksterne ADC's, ens. Dele van die SPI word gebruik vir ISP-programmering, of ten minste die penne, dus wees versigtig wanneer u dit afsluit as u via ISP programmeer.
  • Twee-draads koppelvlak. Sommige eksterne toestelle gebruik die I2C-bus om te kommunikeer, hoewel dit vinnig deur SPI-toestelle vervang word, aangesien SPI 'n groter deurset het.
  • USART. Dit is u seriële koppelvlak. U wil dit waarskynlik nie uitskakel as u via die seriële verbinding met die AVR gekoppel is nie! Ek het dit egter hier bygevoeg as 'n skelet om na toestelle met veelvuldige USART's soos die ATmega162 of ATmega644P te vervoer.
  • almal. Hierdie argument vir die opstart- of afskakelopdrag skakel alle genoemde randapparatuur aan of skakel hulle almal uit met een opdrag. Weereens, gebruik hierdie opdrag verstandig.

root@ATmega328p> powerdown twi Powerdown of twi complete.root@ATmega328p> powerup twi Powerup van twi voltooi.

Timers begin en stop Die dop het 'n ingeboude 16-bis timer wat beskikbaar is vir gebruik. U begin die timer met die timeropdrag:

timer beginen stop die timer met die stop -argument

timer stopHierdie timer sal nie bots met die interne USART -timer nie. Sien die kode vir die implementeringsbesonderhede van die USART -timer, as die soort bloedige detail u interesseer

root@ATmega328p> timer begin Begin timer.root@ATmega328p> timer stop Verloop tyd: ~ 157 sekondes Verifikasie Die dop kan 'n wagwoord van 8 karakters in EEPROM stoor. Hierdie wagwoordmeganisme is geskep om die aanmeldfunksies van telnet te ondersteun, maar kan uitgebrei word om ander dinge te beskerm. U kan byvoorbeeld sekere opdragte benodig, soos die verandering van registerwaardes, deur die verifikasiemeganisme. Stel die wagwoord in met die wagwoordopdrag

root@ATmega328p> passwd blah Skryf die wagwoord in EEPROMMagtig teen die wagwoord (of vereis toestemming programmaties deur die kode) met die auth -opdrag. Let daarop dat as u probeer om die wortelwagwoord te verander en daar reeds 'n wortelwagwoord is, moet u teen die ou wagwoord magtig voordat u dit na 'n nuwe wagwoord kan verander

root@ATmega328p> passwd blinky U moet uself eers magtig. root@ATmega328p> auth blahAuthorized.root@ATmega328p> passwd blinky Skryf NUWE root -wagwoord by EEPROMU moet natuurlik die avrsh.eep -lêer laai as u die firmware uitvee om u ou waardes en veranderlikes te laat herstel. Die Makefile sal die EEPROM -lêer vir u skep. Veranderlikes Die dop verstaan die idee van gebruikersgedefinieerde veranderlikes. Die kode beperk dit tot 20, maar u kan dit verander as u wil deur die definieer MAX_VARIABLES in script.h. U kan enige 16-bis waarde (dit wil sê enige getal tot 65, 536) stoor in 'n veranderlike wat later herroep kan word. Die sintaksis is soortgelyk aan registers, behalwe dat 'n dollarteken ($) gebruik word om veranderlikes op die dop aan te dui. Maak 'n lys van al u veranderlikes met die opdrag vir drukveranderlikes

druk veranderlikes Gebruikers gedefinieerde veranderlikes: Indeksnaam -> Waarde (01): $ GRATIS $ -> 0 (02): $ GRATIS $ -> 0 (03): $ GRATIS $ -> 0 (04): $ GRATIS $ -> 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): $ GRATIS $ -> 0 (16): $ GRATIS $ -> 0 (17): $ GRATIS $ -> 0 (18): $ GRATIS $ -> 0 (19): $ GRATIS $ -> 0 (20): $ GRATIS $ -> 0 Voltooi. Stel 'n veranderlike

$ newvar = 25 $ time -out = 23245Kry die waarde van 'n gegewe veranderlike

root@ATmega328p> eggo $ newvar $ newvar 25U kan sien wat alle veranderlikes wat u tans geïnstalleer het met die afdrukopdrag wat u reeds ken

Deur gebruiker gedefinieerde veranderlikes: Indeksnaam -> Waarde (01): newvar -> 25 (02): time -out -> 23245 (03): $ GRATIS $ -> 0 (04): $ GRATIS $ -> 0 (05): $ FREE $ -> 0 (06): $ FREE $ -> 0 (07): $ FREE $ -> 0 (08): $ FREE $ -> 0 (09): $ FREE $ -> 0 (10): $ GRATIS $ -> 0 (11): $ GRATIS $ -> 0 (12): $ GRATIS $ -> 0 (13): $ GRATIS $ -> 0 (14): $ GRATIS $ -> 0 (15): $ GRATIS $ -> 0 (16): $ GRATIS $ -> 0 (17): $ GRATIS $ -> 0 (18): $ GRATIS $ -> 0 (19): $ GRATIS $ -> 0 (20): $ GRATIS $ -> 0 Voltooi. Die naam $ FREE $ dui net aan dat die veranderlike ligging gratis is en dat daar nog nie 'n veranderlike naam aan hom toegeken is nie.

Stap 5: Pas die dop aan

Pas die dop aan
Pas die dop aan

Dit is u vry om die kode te hack en aan te pas by u eie behoeftes, as u wil. As ek geweet het dat ek hierdie kode sou vrystel, sou ek 'n aparte opdrag tolk klas en opdrag struktuur gemaak het en eenvoudig herhaal deur hierdie roeping 'n funksie wyser. Dit sal die hoeveelheid kode verminder, maar soos dit lyk, ontleed die dop die opdragreël en roep die toepaslike dopmetode in. Om u eie aangepaste opdragte by te voeg, doen die volgende: 1. Voeg u opdrag by die ontledingslys Die opdragontleter sal ontleed die opdragreël en gee u die opdrag en enige argumente afsonderlik. Die argumente word oorgedra as aanwysers na aanwysings, of as 'n verskeidenheid aanwysings, maar u wil ook daarmee saamwerk. Dit word gevind in shell.cpp. Maak shell.cpp oop en vind die ExecCmd -metode van die AVRShell -klas. U kan die opdrag by die geheue van die program voeg. As u dit doen, voeg die opdrag by in progmem.h en progmem.cpp. U kan die opdrag direk by die programgeheue voeg deur die PSTR () -makro te gebruik, maar u sal nog 'n waarskuwing genereer oor die tipe wat vroeër genoem is. Weereens, dit is 'n bekende fout wat met C ++ werk, maar u kan dit regkry deur die opdrag direk in die program* lêers by te voeg, soos ek gedoen het. As u nie omgee om by u SRAM -gebruik te voeg nie, kan u die opdrag byvoeg soos ek geïllustreer het met die "klok" -opdrag. Sê dat u 'n nuwe opdrag met die naam "newcmd" wou byvoeg. Gaan na AVRShell:: ExecCmd en vind 'n gerieflike plek om die volgende kode in te voeg:

anders as (! strcmp (c, "newcmd")) cmdNewCmd (args);Dit sal u opdrag byvoeg en die cmdNewCmd -metode noem wat u in die volgende stap sal skryf. 2. Skryf u pasgemaakte opdragkode In dieselfde lêer, voeg u pasgemaakte opdragkode by. Dit is die metode definisie. U sal steeds die verklaring by shell.h wil voeg. Voeg dit net by die ander opdragte. In die vorige voorbeeld kan die kode so lyk

voidAVRShell:: cmdNewCmd (char ** args) {sprintf_P (buff, PSTR ("U opdrag is %s / r / n", args [0]); WriteRAM (buff);}Daar is verskeie dinge hier. Eerstens is "buff" 'n skikkingbuffer van 40 karakters wat in die kode vir u gebruik verskaf word. Ons gebruik die programgeheue -weergawe van sprintf, aangesien ons 'n PSTR deurgee. U kan die gewone weergawe gebruik as u wil, maar sorg dat u nie die formaat in 'n PSTR slaag nie. Die argumente is ook in die args -skikking. As u "newcmd arg1 arg2" getik het, kan u hierdie argumente kry met die args [0] en args [1] subskripsies. U kan 'n maksimum van MAX_ARGS argumente slaag, soos gedefinieer in die kode. U kan die waarde verander as u weer saamstel as u meer argumente tegelyk moet deurgee. Die tweede argument vir hierdie funksie is implisiet. As u niks slaag nie, word 'n opdragprompt daarna geskryf. As u 'n 0 as die 2de argument slaag, sal 'n aanwysing nie geskryf word nie. Dit is handig as u verskillende afsonderlike snare wil uitvoer om uit te voer voordat die opdragprompt aan die gebruiker teruggestuur word. 3. Laat die dop die opdragkode uitvoer U het reeds vir die dopuitvoerder gesê om die metode cmdNewCmd uit te voer wanneer u die nuwe opdrag opstel, maar voeg dit by die shell.h -lêer om dit deur die dopvoorwerp te laat verstaan. Voeg dit net onder die laaste opdrag of voor die eerste opdrag, of enige plek daarbinne, en dit is dit. Herstel en laai die firmware op na u Arduino, en u nuwe opdrag is onmiddellik beskikbaar in die dop.

Stap 6: Opsomming

U moet weet hoe u u AVR/Arduino moet installeer en daaraan kan koppel, en u kan 'n regstreekse boodskap op u mikrokontroller kry. U ken verskeie opdragte wat uittyddata uit die MCU sal haal of waardes in die MCU kan stel. U is ook gewys hoe u u eie pasgemaakte kode kan byvoeg om u eie unieke opdragte in die dop te skep om dit verder aan te pas vir u eie behoeftes. U kan selfs die opdrag tolk hê om slegs u aangepaste opdragte te bevat as dit aan u behoeftes voldoen. as 'n leerproses om u eie te implementeer. Soos altyd sien ek uit na kommentaar of voorstelle oor hoe hierdie instruksies verbeter kan word! Geniet u AVR!

Aanbeveel: