Tartalomjegyzék:

AVRSH: Arduino/AVR parancsértelmező héja: 6 lépés (képekkel)
AVRSH: Arduino/AVR parancsértelmező héja: 6 lépés (képekkel)

Videó: AVRSH: Arduino/AVR parancsértelmező héja: 6 lépés (képekkel)

Videó: AVRSH: Arduino/AVR parancsértelmező héja: 6 lépés (képekkel)
Videó: Arduino Boards rulez! Using avrdude with the Arduino Bootlader 2024, Július
Anonim
AVRSH: parancsnoki tolmácshéj az Arduino/AVR számára
AVRSH: parancsnoki tolmácshéj az Arduino/AVR számára

Valaha azt akarta, hogy "bejelentkezzen" az AVR mikrokontrollerébe? Gondolt már arra, hogy jó lenne "macskázni" egy nyilvántartást, hogy lássa annak tartalmát? Mindig is vágyott arra, hogy az AVR vagy az Arduino egyes perifériás alrendszereit * valós időben * be- és kikapcsolja? Én is, ezért írtam az AVR Shell-t, egy UNIX-szerű héjat. UNIX-szerű, mert emlékeztet arra a shell-fiókra, amelyet kiment és megvásárolt, hogy futtassa az irc nick ütközőrobotjait, valamint egy-két közös parancs. Fájlrendszerrel is rendelkezik, amely UNIX extfs-hez hasonlít, külső EEPROM-ot használva, de ez önmagában is projekt lett, ezért külön kiadom ezt a modult egy másik utasítás szerint, amikor készen áll a gyártásra. Az alábbiakban felsoroljuk azokat a dolgokat, amelyeket jelenleg az AVR Shell segítségével tehet:

  • Valós időben olvassa el az összes adatirány-nyilvántartását (DDRn), portját és csapját
  • Írjon minden DDRn-hez, porthoz és csaphoz, hogy valós időben bekapcsolja a motorokat, LED-eket vagy olvasószenzorokat
  • Sorolja fel az összes ismert regisztert a rendszeren
  • Hozzon létre és tároljon értékeket a felhasználó által definiált változókban, amelyeket az EEPROM támogat.
  • Hozzon létre root jelszót, és hitelesítsen ellene (telnet -hozzáféréshez)
  • Olvassa el a konfigurált CPU órajelet
  • Változtassa meg a CPU órajelét egy előskálázó beállításával
  • Indítsa el és állítsa le a 16 bites időzítőket különböző dolgok időzítéséhez
  • A perifériás alrendszerek be- és/vagy kikapcsolása: analóg-digitális átalakítók (ADC), soros perifériás interfész (SPI), kétvezetékes interfész (TWI/I2C), UART/USART. Hasznos, ha csökkenteni szeretné a mikrokontroller energiafogyasztását vagy bizonyos funkciókat szeretne engedélyezni.
  • C ++ nyelven írva, újrafelhasználható objektumokkal.

Ez az oktatóanyag végigvezeti az avrsh telepítését, használatát és testreszabását.

1. lépés: Amire szüksége lesz

Amire szüksége lesz
Amire szüksége lesz

Ez az utasítás nem igényel sokat, kivéve, ha:

  • Legyen Arduino vagy ATmega328P. Más AVR -ek működhetnek, de előfordulhat, hogy módosítania kell a kódot, hogy felsorolja az MCU -jára egyedi regisztereket. A neveknek csak egyeznie kell az MCU egyedi fejlécfájljában felsoroltakkal. Az AVR -ek között a regiszternevek nagy része megegyezik, így a futásteljesítmény változhat a portolás során.
  • Csatlakozzon az Arduino/AVR soros USART -jához. A rendszert a legszélesebb körben tesztelték az AVR terminállal, egy Windows alkalmazással, amely soros kapcsolatot létesít az USB vagy COM porton keresztül. Működik az Arduinos-okkal az USB-kapcsolaton keresztül, és minden AVR-vel, amely a Moderndevice.com USB-BUB-ját használja. További terminálopciók: Putty, minicom (Linux és FreeBSD), képernyő (Linux/FreeBSD), Hyperterminal, Teraterm. Azt tapasztaltam, hogy a gitt és a teraterm szemetet küld, amikor csatlakozik, így az első parancs elrontható lehet.
  • Telepítse és futtassa az AVR Shell firmware -t, amelyet letölthet ezekről az oldalakról, vagy mindig a legújabb verziót szerezheti be a BattleDroids.net oldalon.

Az AVR terminál telepítéséhez csak csomagolja ki és futtassa. Az AVR Shell firmware telepítéséhez töltse le, és töltse fel közvetlenül a hex fájlt, és csatlakoztassa a soros terminált 9600 baudra, vagy fordítsa le saját maga a "make", majd a "make program" paranccsal a hexa feltöltéséhez. Megjegyzés: előfordulhat, hogy módosítania kell az AVRDUDE beállításait, hogy tükrözze a COM portot. Megjegyzés: A PROGMEM attribútum meghibásodott a C ++ jelenlegi AVR GCC implementációjában, és ez egy ismert hiba. Ha lefordítja, számítson arra, hogy sok figyelmeztető üzenetet kap: "Figyelmeztetés: csak inicializált változók helyezhetők el a program memóriaterületén." Amellett, hogy bosszantó látni, ez a figyelmeztetés ártalmatlan. Mivel a C ++ a beágyazott platformon nem szerepel az AVR GCC prioritások listáján, nem ismert, hogy ezt mikor oldják meg. Ha megnézi a kódot, látni fogja, hol tettem erőfeszítéseket a figyelmeztetés csökkentésére a saját attribútum -állításaim végrehajtásával. Nagyon egyszerű. Töltsön le és telepítsen bármit, amire szüksége lehet az oldal megfordításához, és kezdjük el megtörni.

2. lépés: Regiszterek olvasása és írása

Nyilvántartások olvasása és írása
Nyilvántartások olvasása és írása

Az AVR Shell elsősorban az egyes AVR -hez csatlakoztatott érzékelők eléréséhez készült. Egy egyszerű LED -del kezdődött, majd átkerült a fényérzékelőkre, a hőmérséklet -érzékelőkre és végül két ultrahangos jelátalakítóra. Az avrsh beállíthatja ezen érzékelők digitális összetevőit azáltal, hogy ír az őket vezérlő regiszterekhez. AVR regiszterek manipulálása futás közben Az Arduino összes ismert regiszterének listájának megtekintéséhez írja be:

nyilvántartások nyomtatása és kapsz egy így kinézett nyomatot

A következő nyilvántartásokról tudok:

TIFR0 PORTC TIFR1 PORTD TIFR2 DDRD PCIFR DDRB EIFR DDRC EIMSK PINB EECR tájékoztató program 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 A cat vagy echo paranccsal megtekintheti, hogyan vannak beállítva az egyes bitek bármelyik regiszterben

%GPIOR0 Itt arra kérem a parancsértelmezőt, hogy jelenítse meg vagy visszhangozza a 0 általános célú I/O regiszter tartalmát. Jegyezze fel a százalékjelet (%) a regiszter neve előtt. Erre azért van szüksége, hogy jelezze a héjnak, hogy ez egy nyilvántartást azonosító fenntartott kulcsszó. Az echo parancs tipikus kimenete így néz ki

GPIOR0 (0x0) beállítása [00000000] A kimenet a regiszter nevét, a regiszterben található hexadecimális értéket és a regiszter bináris ábrázolását mutatja (minden bitet 1 -nek vagy 0 -nak mutatva). Egy adott bit beállításához bármelyik regiszterben használja az "index of" operátort . Tegyük fel például, hogy a 3. bitet szeretném az 1 -hez

%GPIOR0 [3] = 1 a héj pedig választ ad, jelezve a cselekvést és az eredményt

GPIOR0 (0x0) beállítása [00000000] (0x8) beállítása [00001000] Ne felejtse el a százalékjelet, hogy jelezze a héjnak, hogy regiszterrel dolgozik. Azt is vegye figyelembe, hogy a 3. bit beállításával ez 4 bit, mert az AVR-k nulla alapú indexet használnak. Más szóval, a 3. bitig számolva 0, 1, 2, 3 számol, ami a 4. hely, de a 3. bit. Ugyanúgy törölhet egy kicsit, ha nullára állítja a bitet. Az ilyen bitek beállításával menet közben megváltoztathatja az AVR működését. Például az OCR1A -ban található CTC időzítő egyezési értékének megváltoztatásával. Ezenkívül lehetővé teszi bizonyos beállítások bekukkantását, amelyeket programszerűen ellenőriznie kell a kódban, például az adatátviteli sebesség UBBR értékét. DDRn, PORTn és PINn kezelése Az I/O csapok is a regiszterekhez vannak rendelve, és pontosan ugyanúgy állíthatók be, de egy speciális szintaxist hoztak létre az ilyen típusú regiszterek kezelésére. A kódban van egy normál folyamat, mondjuk egy LED vagy más eszköz bekapcsolásához, amely digitális magas vagy alacsony értéket igényel. Ehhez szükség van az adatirány -regiszter beállítására, hogy jelezze a tű kimenetét, majd írjon 1 -et vagy 0 -t az adott bitre a megfelelő porton. Tegyük fel, hogy van egy LED -ed a 13 -as digitális tűhöz (PB5) csatlakoztatva, és be akarjuk kapcsolni, az alábbiak szerint tegye ezt az AVR működése közben

állítsa be a pb5 kimenetet írja ki a pb5 tűt A kimenet amellett, hogy láthatja a LED bekapcsolását, így nézne ki

root@ATmega328p> set pb5 output Set pb5 for outputroot@ATmega328p> write pin pb5 high A "root@ATmega328p>" a parancsértelmező parancs, amely jelzi, hogy készen áll a parancsok fogadására. A LED kikapcsolásához egyszerűen írjon egy mélypontot a tűre. Ha a digitális bemenetet egy tűről szeretné olvasni, használja a read parancsot. A fenti példánkat használva

root@ATmega328p> olvasható pin pb5Pin: pb5 HIGH Alternatív megoldásként csak ismételje meg a pin -regisztert, amely ezt a tűportot vezérli. Például, ha dip -kapcsolókat csatlakoztatunk a 7 -es és 8 -as digitális tüskékhez (PD7 és PD8), akkor elküldheti a parancsot

echo %PIND és a shell megjeleníti a regiszter tartalmát, megmutatja a csatlakoztatott eszközök összes bemeneti/kimeneti állapotát, valamint azt, hogy a kapcsoló állapota be vagy ki volt -e kapcsolva.

3. lépés: Biztosítékok olvasása és írása

Olvasó és író biztosítékok
Olvasó és író biztosítékok

A biztosítékok a regiszterek speciális típusai. Mindent szabályoznak, a mikrovezérlő órajelétől kezdve az elérhető programozási módszereken keresztül az írásvédő EEPROM-ig. Néha meg kell változtatnia ezeket a beállításokat, különösen akkor, ha önálló AVR rendszert hoz létre. Nem biztos, hogy módosítania kell az Arduino biztosítékbeállításait. Legyen óvatos a biztosítékokkal; bezárhatja magát, ha helytelenül állította be őket. Egy korábbi utasításban bemutattam, hogyan olvashatja és állíthatja be a biztosítékokat a programozó és az avrdude segítségével. Itt megmutatom, hogyan olvassa vissza a biztosítékokat futás közben, hogy lássa, hogyan állította be őket az MCU. Ne feledje, hogy ez nem a fordítási idő beállítása, amelyet a definíciókból kap, hanem a tényleges biztosítékok, amint az MCU olvassa őket futás közben. Az ATmega328P adatlap 27-9. Táblázatából (adatbázis, hasonló) a Fuse Low Byte bitjei a következők:

CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0Érdekes megjegyezni, hogy biztosítékok esetén a 0 programozott, az 1 pedig azt jelenti, hogy az adott bit nincs programozva. Kicsit ellentmondástalan, de ha egyszer tudod, tudod.

  • A CKDIV8 a CPU óráját 8 -ra osztja. Az ATmega328P gyárilag úgy van programozva, hogy belső oszcillátorát 8MHz -en használja, CKDIV8 programozva (azaz 0 -ra állítva), így 1MHz végső F_CPU vagy CPU frekvenciát kap. Az Arduino -n ez megváltozik, mivel 16 MHz -es külső oszcillátor használatára vannak konfigurálva.
  • A CKOUT programozáskor a CPU óráját a PB0 -n adja ki, amely az Arduinos digitális 8 -as érintkezője.
  • A SUT [1..0] határozza meg az AVR indítási idejét.
  • A CKSEL [3..0] beállítja az óraforrást, például a belső RC oszcillátort, a külső oszcillátort stb.

Amikor elolvassa a biztosítékokat, hexadecimális számban kapja vissza. Erre a formátumra van szüksége, ha a biztosítékokat avrdude -on keresztül szeretné írni. Az arduino -n a következőt kapom, amikor elolvasom az alsó biztosíték bájtját:

root@ATmega328p> read lfuseLower Fuse: 0xffTehát minden bit 1 -re van állítva. Ugyanezt az eljárást végeztem egy Arduino klónon, és ugyanazt az értéket kaptam. Az egyik önálló AVR-rendszerem ellenőrzésekor 0xDA értéket kaptam, amely értéket a chip konfigurálásakor állítottam vissza. Ugyanezt az eljárást alkalmazzák a High Fuse Byte, Extended Fuse Byte és Lock biztosítékok ellenőrzésére. A kalibrálási és aláírási biztosíték bájtok le vannak tiltva a kódban egy #if 0 előfeldolgozó direktívával, amelyet módosíthat, ha úgy érzi, hogy elromlott.

4. lépés: Egyéb parancsok

Egyéb parancsok
Egyéb parancsok

Az alapértelmezett parancsértelmező számos más parancsot is hasznosnak talál. Az összes végrehajtott és jövőbeli kiadási parancsot megtekintheti a súgó vagy a menü megjelenítésével. Gyorsan leírom itt őket, mivel többnyire magától értetődőek. CPU órajel -frekvencia beállítások Az fcpu paranccsal megtudhatja, hogy a firmware miként van konfigurálva CPU óra beállításokként:

root@ATmega328p> fcpuCPU Gyakoriság: 16000000Ez 16 millió, vagy 16 millió herz, közismertebb nevén 16 MHz. Ezt menet közben bármikor megváltoztathatja az óra paranccsal. Ez a parancs egyetlen érvet tartalmaz: az előskálázót, amelyet az órajel felosztásakor kell használni. Az óra parancs megérti ezeket az előskálázási értékeket:

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

A parancs használatával:

óra ckdiv2 Ha a processzor sebessége 16 MHz, az órajele 8 MHz -re változik. A ckdiv64 előskálázójának használata 16MHz kezdeti órajelekkel 250 KHz végső órajelet eredményez. Miért akarod lassítani az MCU -t? Nos, egyrészt az alacsonyabb órajel kevesebb energiát fogyaszt, és ha az MCU lemerül az akkumulátorról egy projektházban, előfordulhat, hogy nincs szüksége a maximális sebességre, ezért csökkentheti a sebességet és csökkentheti az energiafogyasztását, növeli az akkumulátor élettartamát. Továbbá, ha az órát bármilyen időzítési problémára használja egy másik MCU -val, például egy szoftver UART vagy valami hasonló megvalósításával, akkor érdemes beállítania azt egy olyan értékre, amely könnyen egyenletes átviteli sebességet biztosít alacsonyabb hibaarány. A perifériás alrendszerek be- és kikapcsolása Ugyanazzal a megjegyzéssel, mint a korábban említett energiafogyasztás csökkentése, érdemes tovább csökkenteni az áramellátást azáltal, hogy leállítja a fedélzeti perifériák egy részét, amelyeket nem használ. A parancsértelmező és a shell jelenleg be- és kikapcsolhatja a következő perifériákat:

  • Analóg-digitális átalakító (ADC). Ezt a perifériát akkor használjuk, ha analóg érzékelővel rendelkezik (például hőmérséklet, fény, gyorsulás stb.), És azt digitális értékre kell konvertálnia.
  • Soros perifériás interfész (SPI). Az SPI buszt más SPI-kompatibilis eszközökkel, például külső memóriákkal, LED-illesztőprogramokkal, külső ADC-kkel stb. Való kommunikációra használják. Az SPI egyes részei az ISP programozására szolgálnak, vagy legalábbis a csapok, ezért legyen óvatos a leállításakor ha ISP -n keresztül programoz.
  • Kétvezetékes interfész. Néhány külső eszköz az I2C buszt használja a kommunikációhoz, bár ezeket gyorsan felváltják az SPI-kompatibilis eszközök, mivel az SPI nagyobb áteresztőképességgel rendelkezik.
  • USART. Ez a soros interfész. Ezt valószínűleg nem szeretné kikapcsolni, ha soros kapcsolaton keresztül csatlakozik az AVR -hez! Ezt azonban itt adtam hozzá csontvázként olyan eszközökhöz való portoláshoz, amelyek több USART -t tartalmaznak, mint például az ATmega162 vagy az ATmega644P.
  • összes. A powerup vagy powerdown parancsnak ez az érve bekapcsolja az összes említett perifériát, vagy egyetlen paranccsal kikapcsolja őket. Ismét bölcsen használja ezt a parancsot.

root@ATmega328p> powerdown twiA twi teljes kikapcsolása.gyökér@ATmega328p> powerup twiPowerup of twi complete.

Időzítők indítása és leállítása A héj beépített 16 bites időzítővel rendelkezik, amely használható. Az időzítőt az időzítő paranccsal indíthatja el:

időzítő indításaés állítsa le az időzítőt a stop érvvel

időzítő leállításaEz az időzítő nem ütközik a belső USART időzítővel. Tekintse meg a kódot az USART időzítő megvalósításának részleteihez, ha érdekli az ilyen részletgazdag részlet

root@ATmega328p> időzítő indítása Indított timer.root@ATmega328p> időzítő leállítás Eltelt idő: ~ 157 másodperc Hitelesítés A shell tárolhat egy 8 karakterből álló jelszót az EEPROM-ban. Ezt a jelszómechanizmust azért hozták létre, hogy támogassa a telnet bejelentkezési képességeit, de kibővíthető más dolgok védelme érdekében. Például szüksége lehet bizonyos parancsokra, például a regisztrációs értékek megváltoztatására a hitelesítési mechanizmuson keresztül. Állítsa be a jelszót a password paranccsal

root@ATmega328p> passwd blah Írta a root jelszót az EEPROM -baJogosítson a jelszó ellen (vagy kérjen programozási engedélyt a kódon keresztül) az auth paranccsal. Ne feledje, hogy ha megpróbálja megváltoztatni a root jelszót, és már beállított egy root jelszót, akkor engedélyeznie kell magát a régi jelszó ellen, mielőtt új jelszót cserélhet

root@ATmega328p> passwd blinky Először engedélyeznie kell magát.root@ATmega328p> auth blahAuthorized.root@ATmega328p> passwd blinky Írt új root jelszót az EEPROM -hozTermészetesen be kell töltenie az avrsh.eep fájlt, ha törli a firmware -t a régi értékek és változók visszaállításához. A Makefile létrehozza az EEPROM fájlt az Ön számára. Változók A shell megérti a felhasználó által definiált változók fogalmát. A kód ezt 20 -ra korlátozza, de tetszés szerint megváltoztathatja a MAX_VARIABLES definíció megváltoztatásával a script.h -ban. Bármilyen 16 bites értéket (azaz bármilyen számot 65-ig, 536-ig) elmenthet egy későbbiekben előhívható változóba. A szintaxis hasonló a regiszterekhez, kivéve a dollárjelet ($) a héj változóinak jelölésére. Sorolja fel az összes változót a print variables paranccsal

felhasználó által definiált változók: Index neve -> Érték (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 $ -> 0Teljes. Állítson be egy változót

$ newvar = 25 $ timeout = 23245Adja meg egy adott változó értékét

root@ATmega328p> echo $ newvar $ newvar 25Láthatja, hogy az összes változó, amelyet pillanatnyilag példányosított a nyomtatási paranccsal, amelyet már ismer

Felhasználó által definiált változók: Indexnév -> Érték (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): $ FREE $ -> 0Teljes. A $ FREE $ név csak azt jelzi, hogy a változó hely szabad, és még nem kapott hozzá változónevet.

5. lépés: A héj testreszabása

A héj testreszabása
A héj testreszabása

Ha úgy tetszik, szabadon feltörheti a kódot, és személyre szabhatja azt saját igényei szerint. Ha tudtam volna, hogy kiadom ezt a kódot, létrehoztam volna egy külön parancsértelmező osztályt és parancsstruktúrát, és egyszerűen megismétlem ezt a függvénymutatót. Csökkentené a kód mennyiségét, de jelenlegi állapotában a shell elemzi a parancssort, és meghívja a megfelelő shell módszert. Saját egyéni parancsok hozzáadásához tegye a következőket: 1. Adja hozzá a parancsot az elemzési listához elemezze a parancssort, és adja meg a parancsot és minden érvet külön. Az érveket mutatóként továbbítják a mutatóknak, vagy mutatók tömbjének, bármennyire is szeret velük dolgozni. Ez megtalálható a shell.cpp fájlban. Nyissa meg a shell.cpp fájlt, és keresse meg az AVRShell osztály ExecCmd metódusát. Érdemes hozzáadni a parancsot a programmemóriához. Ha igen, adja hozzá a parancsot a progmem.h és progmem.cpp fájlokhoz. A parancsot közvetlenül hozzáadhatja a programmemóriához a PSTR () makró használatával, de újabb figyelmeztetést generál a korábban említett típusra. Ismétlem, ez egy ismert hiba a C ++ - val, de ezt megkerülheti úgy, hogy a parancsot közvetlenül a progmem.* Fájlba adja hozzá, ahogy én is tettem. Ha nem bánja, hogy hozzáadja az SRAM használatát, hozzáadhatja a parancsot, ahogy azt az "clock" paranccsal illusztráltam. Tegyük fel, hogy új parancsot szeretne hozzáadni "newcmd" néven. Nyissa meg az AVRShell:: ExecCmd oldalt, és keresse meg a megfelelő helyet a következő kód beillesztéséhez:

else if (! strcmp (c, "newcmd")) cmdNewCmd (args);Ez hozzáadja a parancsot, és meghívja a cmdNewCmd metódust, amelyet a következő lépésben ír. 2. Írja be az egyéni parancskódot Ugyanebben a fájlban adja hozzá az egyéni parancskódot. Ez a módszer definíciója. A deklarációt továbbra is hozzá kell adni a shell.h -hez. Csak csatolja a többi parancshoz. Az előző példában a kód valahogy így nézhet ki

voidAVRShell:: cmdNewCmd (char ** args) {sprintf_P (buff, PSTR ("A parancs %s / r / n", args [0]); WriteRAM (buff);}Itt több dolog is van. Először is, a "buff" egy 40 karakterből álló tömbpuffer, amelyet a kód tartalmaz. A sprintf programmemória verzióját használjuk, mivel PSTR -nek adjuk át. Használhatja a szokásos verziót, ha úgy tetszik, de ügyeljen arra, hogy ne adja át a formátumot PSTR -ben. Ezenkívül az argumentumok az args tömbben találhatók. Ha beírta az "newcmd arg1 arg2" parancsot, akkor ezeket az argumentumokat az args [0] és az args [1] indexekkel érheti el. Legfeljebb MAX_ARGS argumentumot adhat át, a kódban meghatározottak szerint. Nyugodtan módosítsa ezt az értéket az újrafordítás során, ha még sok érvet kell egyszerre továbbítani. A WriteLine és WriteRAM globális függvények, amelyek az UART azonos nevű metódusait adják vissza. Ennek a függvénynek a második érve implicit. Ha nem ad át semmit, akkor parancssor íródik utána. Ha 0 -t ad meg második argumentumként, akkor a rendszer nem ír ki promptot. Ez akkor hasznos, ha több külön karakterláncot szeretne írni a kimenetre, mielőtt a parancssort visszaküldi a felhasználónak. 3. Hajtsa végre a shell -t a parancskód végrehajtásával. Ha már megadta a parancsfájl végrehajtójának, hogy hajtsa végre a cmdNewCmd metódust az új parancs beállításakor, de adja hozzá a shell.h fájlhoz, hogy megértse a shell objektum. Csak adja hozzá az utolsó parancs alatt, vagy az első parancs előtt, vagy bárhol ott. És ennyi. Fordítsa újra és töltse fel a firmware -t az Arduino készülékére, és az új parancs elérhető a parancsértelmezőből.

6. lépés: Összefoglalás

Tudnia kell, hogyan kell telepíteni és csatlakoztatni az AVR/Arduino készüléket, és élő értesítést kell kapnia a futó mikrokontrollerről. Ismer több olyan parancsot, amelyek menet közben lekérik a futásidejű adatokat az MCU -ból, vagy értékeket állítanak be az MCU -ba. Azt is megmutatták, hogyan adhat hozzá saját egyéni kódot, hogy saját egyedi parancsokat hozzon létre a héjhoz, hogy tovább testre szabhassa azt saját igényei szerint. A parancsértelmezőt is kibelezheti, hogy csak az egyéni parancsokat tartalmazza, ha ez megfelel az Ön igényeinek. Remélem, élvezte ezt az utasítást, és hogy az AVR Shell hasznos lehet az Ön számára, akár valós idejű parancsértelmezőként, akár tanulási folyamatként a saját megvalósításában. Mint mindig, minden megjegyzést vagy javaslatot várok, hogy hogyan javítható ez az oktatható! Jó szórakozást az AVR -hez!

Ajánlott: