Indholdsfortegnelse:

AVRSH: a Command Interpreter Shell for Arduino/AVR .: 6 trin (med billeder)
AVRSH: a Command Interpreter Shell for Arduino/AVR .: 6 trin (med billeder)

Video: AVRSH: a Command Interpreter Shell for Arduino/AVR .: 6 trin (med billeder)

Video: AVRSH: a Command Interpreter Shell for Arduino/AVR .: 6 trin (med billeder)
Video: AVR Shell Command Interpreter 2024, Juli
Anonim
AVRSH: et kommandotolkeskal til Arduino/AVR
AVRSH: et kommandotolkeskal til Arduino/AVR

Har du nogensinde ønsket at blive "logget ind" på din AVR -mikrokontroller? Har du nogensinde tænkt på, at det ville være fedt at "katte" et register for at se dets indhold? Har du altid ønsket en måde at tænde og slukke individuelle perifere undersystemer på din AVR eller Arduino i * realtid *? Også mig, så jeg skrev AVR Shell, en UNIX-lignende skal. Det er UNIX-lignende, fordi det minder om den shell-konto, du gik ud og købte for at køre dine irc nick kollisionsbots på, samt at have en kommando eller to tilfælles. Det har også et filsystem, der ligner UNIX-extfs ved hjælp af en ekstern EEPROM, men det er blevet et projekt for sig selv, så jeg frigiver det modul separat under en anden instruerbar, når den er produktionsklar. Her er en liste over de ting, du i øjeblikket kan gøre med AVR -shell:

  • Læs alle dine Data Direction Registers (DDRn), porte og pins i realtid
  • Skriv til alle dine DDRn'er, porte og pins for at tænde motorer, LED'er eller læse sensorer i realtid
  • Liste over alle kendte registre på systemet
  • Opret og gem værdier i brugerdefinerede variabler, der sikkerhedskopieres af EEPROM.
  • Opret en root -adgangskode, og godkend den (bruges til telnetadgang)
  • Læs den konfigurerede CPU -urhastighed
  • Skift din CPU -urhastighed ved at indstille en forkalkning
  • Start og stop 16-bit timere til timing af forskellige ting
  • Tænd og/eller sluk perifere undersystemer: Analog til digitale konvertere (ADC), Serial Peripheral Interface (SPI), To-leder interface (TWI/I2C), UART/USART. Nyttig til, når du vil reducere strømforbruget til mikrokontrolleren eller til at aktivere visse funktioner.
  • Skrevet i C ++ med genanvendelige objekter.

Denne instruktive vil gå igennem installationen, brugen og tilpasningen af avrsh.

Trin 1: Hvad skal du bruge

Hvad du skal bruge
Hvad du skal bruge

Denne instruktive kræver ikke meget, bortset fra at du:

  • Har en Arduino eller ATmega328P. Andre AVR'er kan fungere, men du skal muligvis ændre koden for at vise alle registre, der er unikke for din MCU. Navnene behøver kun at matche det, der er angivet i overskriftsfilen, der er unik for din MCU. Mange af registernavnene er de samme mellem AVR'er, så din kilometertal kan variere, når du sender den.
  • Har en måde at oprette forbindelse til den serielle USART på din Arduino/AVR. Systemet er blevet testet mest omfattende med AVR Terminal, en Windows -app, der opretter en seriel forbindelse via din USB- eller COM -port. Arbejder med Arduinos ved hjælp af USB-forbindelsen og enhver AVR ved hjælp af USB-BUB'en fra Moderndevice.com. Andre terminalmuligheder inkluderer: Putty, minicom (Linux og FreeBSD), skærm (Linux/FreeBSD), Hyperterminal, Teraterm. Jeg har fundet kitt og teraterm sende noget skrald, når du opretter forbindelse, så din første kommando kan blive forvansket.
  • Har AVR Shell -firmware installeret og kørende, som du kan downloade fra disse sider, eller altid få den nyeste version på BattleDroids.net.

For at installere AVR -terminalen skal du bare pakke den ud og køre den. For at installere AVR Shell -firmware skal du downloade den og enten uploade hex -filen direkte og tilslutte din serielle terminal på 9600 baud, eller kompilere den selv med "make" og derefter "make program" for at uploade hexen. Bemærk, du skal muligvis ændre AVRDUDE -indstillingerne for at afspejle din COM -port. Bemærk: PROGMEM -attributten er brudt i den nuværende AVR GCC -implementering for C ++, og dette er en kendt fejl. Hvis du kompilerer det, kan du forvente at få mange advarselsmeddelelser, der siger "advarsel: kun initialiserede variabler kan placeres i programmets hukommelsesområde." Udover at være irriterende at se, er denne advarsel ufarlig. Da C ++ på den integrerede platform ikke er højt på AVR GCC's prioritetsliste, er det uvist, hvornår dette vil blive rettet. Hvis du tjekker koden, vil du se, hvor jeg har arbejdet for at reducere denne advarsel ved at implementere mine egne attributudsagn. Ret simpelt. Download og installer alt, hvad du måske har brug for, for derefter at vende siden, og lad os få crackin '.

Trin 2: Læsning og skrivning af registre

Læse og skrive registre
Læse og skrive registre

AVR -shell blev primært skrevet for at få adgang til nogle sensorer, som jeg havde tilsluttet min AVR. Det startede med en simpel LED og flyttede derefter til lyssensorer, temperatursensorer og til sidst til to ultralydstransducere. avrsh kan indstille de digitale komponenter i disse sensorer ved at skrive til de registre, der kontrollerer dem. Manipulering af AVR -registre, mens du kører For at få en liste over alle kendte registre på din Arduino, skal du skrive:

udskrive registre og du får en udskrift, der ser sådan ud

Jeg kender til følgende registre:

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 TWR0 UR0 UR0 UR0 UR0 UR0 UR0 UR0 UR0 UR0 UR0 UR0 UR0 UR0 URU For at se, hvordan de enkelte bits er indstillet i et hvilket som helst register, skal du bruge kommandoen kat eller ekko

kat %GPIOR0 Her beder jeg kommandotolken om at vise eller ekko indholdet af I/O -registret nr. 0 for General Purpose. Bemærk procenttegnet (%) foran registernavnet. Du har brug for dette for at angive for skallen, at dette er et forbeholdt søgeord, der identificerer et register. Det typiske output fra en ekkokommando ser sådan ud

GPIOR0 (0x0) indstillet til [00000000] Outputtet viser navnet på registret, den hexadecimale værdi, der findes i registret, og den binære repræsentation af registret (viser hver bit som en 1 eller 0). For at indstille en bestemt bit i et hvilket som helst register, skal du bruge "indeks over" -operatoren . Lad os f.eks. Sige, at jeg vil have den tredje bit til en 1

%GPIOR0 [3] = 1 og skallen vil give dig et svar, der angiver dens handling og resultatet

GPIOR0 (0x0) sat til [00000000] (0x8) indstillet til [00001000] Glem ikke procenttegnet for at fortælle skallen, at du arbejder med et register. Bemærk også, at ved at indstille den 3. bit er det 4 bits, fordi vores AVR'er bruger et nulbaseret indeks. Med andre ord tæller man til 3. bit tæller man 0, 1, 2, 3, som er 4. pladsen, men 3. bit. Du kan rydde lidt på samme måde ved at sætte en smule til nul. Ved at indstille bits som denne kan du ændre funktionen af din AVR i farten. For eksempel ved at ændre CTC -timermatchværdien, der findes i OCR1A. Det giver dig også mulighed for at kigge ind på bestemte indstillinger, som du programmatisk skulle tjekke i din kode, f.eks. UBBR -værdien for din baudhastighed. Arbejde med DDRn, PORTn og PINn I/O -benene er også tildelt registre og kan indstilles på nøjagtig samme måde, men der er oprettet en særlig syntaks til at arbejde med disse typer registre. I kode er der en normal proces for eksempelvis at tænde en LED eller anden enhed, der kræver en digital høj eller lav. Det kræver indstilling af dataretningsregistret for at angive, at stiften er til output, og derefter skrive en 1 eller 0 til den bestemte bit i den korrekte port. Forudsat at vi har en LED tilsluttet digital pin 13 (PB5), og vi vil tænde den, kan du gøre det, mens din AVR kører

sæt pin pb5 outputwrite pin pb5 high Udgangen, udover at kunne se din LED tænde, ville se sådan ud

root@ATmega328p> sæt pin pb5 output Indstil pb5 til outputroot@ATmega328p> skriv pin pb5 høj Skriv logik høj til pin pb5 "Root@ATmega328p>" er shellens prompt, der angiver, at den er klar til at acceptere kommandoer fra dig. For at slukke for LED'en ville du blot skrive et lavt til stiften. Hvis du vil læse det digitale input fra en pin, skal du bruge kommandoen read. Brug vores eksempel ovenfor

root@ATmega328p> læs pin pb5Pin: pb5 er HØJ Alternativt kan du bare ekko stifteregistret, der styrer denne pinport. For eksempel, hvis vi har dip switches tilsluttet digital pin 7 og 8 (PD7 og PD8), kan du sende kommandoen

ekko %PIND og skallen vil derefter vise indholdet af dette register og vise dig alle input/output -tilstande for tilsluttede enheder, og om switchens tilstand var tændt eller slukket.

Trin 3: Læsning og skrivning af sikringer

Læser og skriver sikringer
Læser og skriver sikringer

Sikringer er særlige typer registre. De styrer alt lige fra urets hastighed på din mikrokontroller til hvilke programmeringsmetoder der er tilgængelige til skrivebeskyttet EEPROM. Nogle gange skal du ændre disse indstillinger, især hvis du opretter et enkeltstående AVR-system. Jeg er ikke sikker på, at du skal ændre dine sikringsindstillinger på Arduino. Vær forsigtig med dine sikringer; du kan låse dig selv ude, hvis du indstiller dem forkert. I en tidligere instruerbar, demonstrerede jeg, hvordan du kan læse og indstille dine sikringer ved hjælp af din programmør og avrdude. Her viser jeg dig, hvordan du læser dine sikringer tilbage på løbetid for at se, hvordan din MCU faktisk har indstillet dem. Bemærk, at dette ikke er kompileringstidsindstillingen, du får fra definitionerne i, men de faktiske sikringer, når MCU læser dem ved løbetid. Fra tabel 27-9 i ATmega328P-databladet (databog, mere lignende) er bitene i Fuse Low Byte som følger:

CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0En interessant ting at bemærke er, at med sikringer betyder 0 programmeret og 1 betyder, at den pågældende bit er uprogrammeret. Noget kontra-intuitivt, men når du ved det, ved du det.

  • CKDIV8 indstiller dit CPU -ur til at blive divideret med 8. ATmega328P kommer fra fabrikken programmeret til at bruge sin interne oscillator ved 8MHz med CKDIV8 programmeret (dvs. indstillet til 0), hvilket giver dig en endelig F_CPU eller CPU -frekvens på 1MHz. På Arduino's ændres dette, da de er konfigureret til at bruge en ekstern oscillator ved 16MHz.
  • CKOUT, når den er programmeret, udsender dit CPU -ur på PB0, som er digital pin 8 på Arduinos.
  • SUT [1..0] angiver starttiden for din AVR.
  • CKSEL [3..0] indstiller urkilden, f.eks. Den interne RC -oscillator, ekstern oscillator osv.

Når du læser dine sikringer, returneres den til dig i hexadecimal. Dette er det format, du har brug for, hvis du vil skrive sikringerne via avrdude. På min arduino får du her, hvad jeg får, når jeg læser den nederste sikringsbyte:

root@ATmega328p> læs lfuse Nedre sikring: 0xffSå alle bits er sat til 1. Jeg gjorde den samme procedure på en Arduino -klon og fik den samme værdi. Ved at kontrollere et af mine enkeltstående AVR-systemer fik jeg 0xDA, som er den værdi, jeg havde indstillet et stykke tid tilbage, da jeg konfigurerede chippen. Den samme procedure bruges til at kontrollere High Fuse Byte, Extended Fuse Byte og Lock sikringer. Kalibrerings- og signatursikringsbytes er blevet deaktiveret i koden med et #if 0 -forarbejdningsdirektiv, som du kan ændre, hvis du føler dig skrap.

Trin 4: Andre kommandoer

Andre kommandoer
Andre kommandoer

Der er flere andre kommandoer, som standardkommandotolken forstår, som du kan finde nyttige. Du kan se alle de implementerede og fremtidige kommandoer ved at udsende hjælp eller menu ved prompten. Jeg vil hurtigt dække dem her, da de for det meste er selvforklarende. CPU -urfrekvensindstillinger Du kan finde ud af, hvad din firmware er konfigureret til at bruge som CPU -urindstillinger med fcpu -kommandoen:

root@ATmega328p> fcpuCPU Freq: 16000000Det er 16 millioner eller 16 millioner herz, mere almindeligt kendt som 16 MHz. Du kan ændre dette med det samme uanset årsagen med urkommandoen. Denne kommando tager et argument: den forkalkningsmaskine, der skal bruges, når du deler din clockhastighed. Urkommandoen forstår disse forkalkningsværdier:

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

Brug af kommandoen:

ur ckdiv2 når din cpu -hastighed er 16MHz ville resultere i, at din urhastighed blev ændret til 8MHz. Brug af en forkalkning af ckdiv64 med en indledende clockhastighed på 16MHz vil resultere i en endelig clockhastighed på 250 KHz. Hvorfor i alverden vil du gerne gøre din MCU langsommere? Tja, for det første bruger en lavere urhastighed mindre strøm, og hvis du har din MCU kørende for et batteri i et projektkabinet, har du muligvis ikke brug for det til at køre med topfart, og kan derfor sænke hastigheden og reducere strømforbruget, øger batteriets levetid. Hvis du også bruger uret til nogen form for timingproblemer med en anden MCU, f.eks. Implementering af en software UART eller sådan noget, vil du måske indstille det til en bestemt værdi, der er let at få en flot jævn baudrate med lavere fejlprocent. Strømforsyning og nedlukning af perifere undersystemer På samme måde som at reducere strømforbruget nævnt tidligere, vil du måske reducere strømmen yderligere ved at lukke nogle af de indbyggede eksterne enheder, som du ikke bruger. Kommandotolk og shell kan i øjeblikket tænde og slukke følgende eksterne enheder:

  • Analog-til-digital konverter (ADC). Denne perifere enhed bruges, når du har en analog sensor, der leverer data (som temperatur, lys, acceleration osv.) Og skal konvertere den til en digital værdi.
  • Serielt perifert interface (SPI). SPI-bussen bruges til at kommunikere med andre SPI-aktiverede enheder, f.eks. Eksterne hukommelser, LED-drivere, eksterne ADC'er osv. Dele af SPI'en bruges til ISP-programmering, eller i det mindste benene, så vær forsigtig, når du lukker dette ned hvis du programmerer via internetudbyder.
  • To-tråds interface. Nogle eksterne enheder bruger I2C-bussen til at kommunikere, selvom disse hurtigt erstattes af SPI-aktiverede enheder, da SPI har en større gennemstrømning.
  • USART. Dette er din serielle grænseflade. Du vil sandsynligvis ikke deaktivere dette, hvis du er tilsluttet AVR'en via den serielle forbindelse! Imidlertid tilføjede jeg dette her som et skelet til portning til enheder, der har flere USART'er som ATmega162 eller ATmega644P.
  • alle. Dette argument til kommandoen powerup eller powerdown tænder alle de nævnte eksterne enheder eller slukker dem alle med en kommando. Brug igen denne kommando klogt.

root@ATmega328p> powerdown twiPowerdown of twi complete.root@ATmega328p> powerup twiPowerup of twi complete.

Start og stop af timere Skallen har en indbygget 16-bit timer, der er tilgængelig til brug. Du starter timeren med timer -kommandoen:

timer startog stop timeren med stop -argumentet

timer stopDenne timer vil ikke være i konflikt med den interne USART -timer. Se koden for implementeringsdetaljer for USART -timeren, hvis den slags kedelige detaljer interesserer dig

root@ATmega328p> timer start Startet timer.root@ATmega328p> timer stop Forløbet tid: ~ 157 sekunder Godkendelse Skallen kan gemme en adgangskode på 8 tegn i EEPROM. Denne adgangskodemekanisme blev oprettet for at understøtte telnet -loginfunktionerne, men kunne udvides til at beskytte andre ting. For eksempel kan du kræve bestemte kommandoer, f.eks. Ændring af registerværdier, via godkendelsesmekanismen. Indstil adgangskoden med adgangskodekommandoen

root@ATmega328p> passwd blah Skriv root -adgangskode til EEPROMGodkend mod adgangskoden (eller kræv godkendelse programatisk via koden) med auth -kommandoen. Bemærk, at hvis du forsøger at ændre root -adgangskoden, og der allerede er en root -adgangskode, skal du autorisere dig selv mod den gamle adgangskode, før du får lov til at ændre den til en ny adgangskode

root@ATmega328p> passwd blinkyDu skal først autorisere dig selv. root@ATmega328p> auth blahAuthorized.root@ATmega328p> passwd blinky Skriv nyt root -kodeord til EEPROMSelvfølgelig skal du indlæse avrsh.eep -filen, hvis du sletter firmwaren for at få dine gamle værdier og variabler gendannet. Makefilen opretter EEPROM -filen til dig. Variabler Skallen forstår begrebet brugerdefinerede variabler. Koden begrænser dette til 20, men du kan ændre det, hvis du vil, ved at ændre definere MAX_VARIABLES i script.h. Du kan gemme enhver 16-bit værdi (det vil sige ethvert tal op til 65, 536) til en variabel, der skal genkaldes senere. Syntaksen ligner registre undtagen et dollartegn ($) bruges til at betegne variabler til skallen. Liste over alle dine variabler med kommandoen print variabler

Udskriv variabler Brugerdefinerede variabler: Indeksnavn -> Værdi (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 $ -> 0 Komplet. Indstil en variabel

$ newvar = 25 $ timeout = 23245Få værdien af en given variabel

root@ATmega328p> ekko $ newvar $ newvar 25Du kan se, hvilke alle variabler du i øjeblikket har instantieret med udskrivningskommandoen, som du allerede kender

Brugerdefinerede variabler: Indeksnavn -> Værdi (01): newvar -> 25 (02): timeout -> 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): $ GRATIS $ -> 0 Fuldfør.$ FREE $ -navnet angiver bare, at den variable placering er gratis og endnu ikke er tildelt et variabelnavn.

Trin 5: Tilpasning af skallen

Tilpasning af skallen
Tilpasning af skallen

Du er fri til at hacke på koden og tilpasse den til dine egne behov, hvis du vil. Hvis jeg havde vidst, at jeg ville frigive denne kode, ville jeg have lavet en separat kommandotolkeklasse og kommandostruktur og simpelthen gentaget gennem dette kald til en funktionsmarkør. Det ville reducere mængden af kode, men som det ser ud, analyserer skallen kommandolinjen og kalder den relevante shell -metode. For at tilføje dine egne brugerdefinerede kommandoer skal du gøre følgende: 1. Føj din kommando til parselisten Kommandoparseren vil parse kommandolinjen og give dig kommandoen og eventuelle argumenter separat. Argumenterne videregives som pointers til pointers eller en række pointers, men du kan lide at arbejde med dem. Dette findes i shell.cpp. Åbn shell.cpp, og find ExecCmd -metoden i AVRShell -klassen. Du vil måske tilføje kommandoen til programhukommelsen. Hvis du gør det, skal du tilføje kommandoen i progmem.h og progmem.cpp. Du kan tilføje kommandoen til at programmere hukommelse direkte ved hjælp af PSTR () -makroen, men du genererer endnu en advarsel om den tidligere nævnte type. Igen er dette en kendt fejl, der arbejder med C ++, men du kan komme uden om dette ved at tilføje kommandoen direkte i progmem.* -Filerne, som jeg har gjort. Hvis du ikke har noget imod at tilføje til din SRAM -brug, kan du tilføje kommandoen, som jeg har illustreret med kommandoen "ur". Sig, at du ønskede at tilføje en ny kommando kaldet "newcmd." Gå til AVRShell:: ExecCmd og find et bekvemt sted at indsætte følgende kode:

ellers hvis (! strcmp (c, "newcmd")) cmdNewCmd (args);Dette tilføjer din kommando og kalder den cmdNewCmd -metode, som du vil skrive i det næste trin. 2. Skriv din brugerdefinerede kommandokode Tilføj den tilpassede kommandokode i den samme fil. Dette er metodedefinitionen. Du vil stadig gerne tilføje erklæringen til shell.h. Bare tilføj det til de andre kommandoer. I det foregående eksempel kan koden se sådan ud

voidAVRShell:: cmdNewCmd (char ** args) {sprintf_P (buff, PSTR ("Din kommando er %s / r / n", args [0]); WriteRAM (buff);}Der er flere ting her. For det første er "buff" en array-buffer på 40 tegn, der findes i koden til din brug. Vi bruger programmets hukommelsesversion af sprintf, da vi sender den en PSTR. Du kan bruge den almindelige version, hvis du vil, men sørg for, at du ikke sender formatet i en PSTR. Argumenterne er også i args -arrayet. Hvis du skrev "newcmd arg1 arg2" kan du komme til disse argumenter med args [0] og args [1] subscripts. Du kan maksimalt videregive MAX_ARGS argumenter, som defineret i koden. Du er velkommen til at ændre denne værdi, når du kompilerer igen, hvis du skal bruge mange flere argumenter på én gang. WriteLine og WriteRAM er globale funktioner, der returnerer UARTs metoder med samme navn. Det andet argument til denne funktion er implicit. Hvis du ikke sender noget, bliver der skrevet en kommandoprompt bagefter. Hvis du sender et 0 som det 2. argument, skrives der ikke en prompt. Dette er nyttigt, når du vil skrive flere separate strenge til output, før kommandoprompten returneres til brugeren. 3. Få skallen til at udføre kommandokoden Du har allerede bedt shelludføreren om at udføre metoden cmdNewCmd, når du konfigurerer den nye kommando, men føjer den til shell.h -filen for at få den forstået af shellobjektet. Bare tilføj det under den sidste kommando eller foran den første kommando, eller hvor som helst derinde. Og det er det. Genkompiler og upload firmwaren til din Arduino, og din nye kommando er tilgængelig fra skallen ved prompten.

Trin 6: Resumé

Du bør vide, hvordan du installerer og opretter forbindelse til din AVR/Arduino og får en live -prompt på din kørende mikrokontroller. Du kender flere kommandoer, der vil trække runtime -data fra MCU'en eller indstille værdier til MCU'en. Du er også blevet vist, hvordan du tilføjer din egen brugerdefinerede kode for at oprette dine egne unikke kommandoer til skallen for yderligere at tilpasse den til dine egne behov. Du kan endda tømme kommandotolken, så den kun indeholder dine brugerdefinerede kommandoer, hvis det passer til dine behov. som en læringsproces i implementeringen af din egen. Som altid ser jeg frem til eventuelle kommentarer eller forslag til, hvordan denne instruerbare kan forbedres! God fornøjelse med din AVR!

Anbefalede: