Orodha ya maudhui:

AVRSH: Kamanda ya Mkalimani wa Ukalimani kwa Arduino / AVR. 6 Hatua (na Picha)
AVRSH: Kamanda ya Mkalimani wa Ukalimani kwa Arduino / AVR. 6 Hatua (na Picha)

Video: AVRSH: Kamanda ya Mkalimani wa Ukalimani kwa Arduino / AVR. 6 Hatua (na Picha)

Video: AVRSH: Kamanda ya Mkalimani wa Ukalimani kwa Arduino / AVR. 6 Hatua (na Picha)
Video: Zanto Ft Pingu | Binti Kiziwi | Official Video 2024, Julai
Anonim
AVRSH: Kamanda ya Ukalimani wa Amri kwa Arduino / AVR
AVRSH: Kamanda ya Ukalimani wa Amri kwa Arduino / AVR

Je! Umewahi kutaka "kuingia" kwa mdhibiti wako mdogo wa AVR? Umewahi kufikiria itakuwa nzuri kwa "paka" rejista kuona yaliyomo? Je! Umewahi kutaka njia ya kuongeza nguvu na kuwasha mifumo ndogo ya pembeni ya AVR yako au Arduino katika * muda halisi *? Mimi pia, kwa hivyo niliandika ganda la AVR, ganda kama UNIX. Ni kama UNIX kwa sababu inakumbusha akaunti ya ganda uliyotumia na kununua kuendesha boti zako za mgongano wa irc, na pia kuwa na amri au mbili sawa. Pia ina mfumo wa faili unaofanana na extfs za UNIX, kwa kutumia EEPROM ya nje, lakini hiyo imekuwa mradi yenyewe kwa hivyo nitakuwa nikiachilia moduli hiyo kando chini ya mafunzo tofauti wakati iko tayari kwa uzalishaji. Hapa kuna orodha ya mambo ambayo unaweza kufanya sasa na AVR Shell:

  • Soma Sajili zako zote za Uelekezaji wa Data (DDRn), bandari, na pini kwa wakati halisi
  • Andika kwa DDRn zako zote, bandari, na pini kuwasha motors, LED, au soma sensorer katika wakati halisi
  • Orodhesha rejista zote zinazojulikana kwenye mfumo
  • Unda na uhifadhi maadili katika anuwai zilizofafanuliwa na mtumiaji zilizohifadhiwa na EEPROM.
  • Unda nywila ya mzizi na uthibitishe dhidi yake (kutumika kwa ufikiaji wa telnet)
  • Soma kasi ya saa ya CPU iliyosanidiwa
  • Badilisha kasi yako ya saa ya CPU kwa kuweka kiganga
  • Anza na simama vipima muda vya 16-bit kwa muda wa vitu anuwai
  • Nguvu juu na / au nguvu chini ya mifumo ndogo ya pembeni: Analog to Converters Digital (ADC), Interface Sherial Peripheral (SPI), Interface ya waya-mbili (TWI / I2C), UART / USART. Muhimu kwa wakati unataka kupunguza matumizi ya nguvu ya mdhibiti mdogo au kuwezesha kazi fulani.
  • Imeandikwa katika C ++ na vitu vinavyoweza kutumika tena.

Hii inaweza kufundishwa kupitia usanikishaji, matumizi, na ubinafsishaji wa avrsh.

Hatua ya 1: Nini Utahitaji

Nini Utahitaji
Nini Utahitaji

Mafundisho haya hayahitaji mengi isipokuwa wewe:

  • Kuwa na Arduino au ATmega328P. Vingine vya AVR vinaweza kufanya kazi, lakini unaweza kuhitaji kurekebisha nambari ili kuorodhesha sajili zozote ambazo ni za kipekee kwa MCU yako. Majina yanahitaji tu kulinganisha kile kilichoorodheshwa kwenye faili ya kichwa ya kipekee kwa MCU yako. Majina mengi ya rejista ni sawa kati ya AVR, kwa hivyo mileage yako inaweza kutofautiana wakati wa kusafirisha.
  • Kuwa na njia ya kuungana na serial USART ya Arduino / AVR yako. Mfumo umejaribiwa sana na Kituo cha AVR, programu ya Windows ambayo hufanya unganisho la serial kupitia bandari yako ya USB au COM. Inafanya kazi na Arduinos ukitumia muunganisho wa USB na AVR yoyote ukitumia USB-BUB kutoka Moderndevice.com. Chaguzi zingine za terminal ni pamoja na: Putty, minicom (Linux na FreeBSD), skrini (Linux / FreeBSD), Hyperterminal, Teraterm. Nimepata putty na teraterm tuma takataka wakati wa kuunganisha ili amri yako ya kwanza iweze kubanwa.
  • Kuwa na firmware ya AVR Shell iliyosanikishwa na inayotumika, ambayo unaweza kupakua kutoka kwa kurasa hizi, au kila wakati pata toleo la hivi karibuni katika BattleDroids.net.

Ili kusanikisha Kituo cha AVR, ing'oa tu na uifanye. Ili kusanikisha firmware ya AVR Shell, ipakue na upakie moja kwa moja faili ya hex na unganisha kituo chako cha serial kwa baud 9600, au ujikusanye na "make" na kisha "make program" kupakia hex. Kumbuka, unaweza kuhitaji kubadilisha mipangilio ya AVRDUDE kuonyesha bandari yako ya COM. Kumbuka: Sifa ya PROGMEM imevunjwa katika utekelezaji wa sasa wa AVR GCC kwa C ++ na hii ni mdudu anayejulikana. Ukikusanya, tarajia kupata ujumbe mwingi wa onyo ukisema "onyo: ni vigeuzi vilivyoanzishwa tu vinaweza kuwekwa kwenye eneo la kumbukumbu ya programu." Licha ya kukasirisha kuona, onyo hili halina madhara. Kwa kuwa C ++ kwenye jukwaa lililopachikwa sio juu kwenye orodha ya vipaumbele vya AVR GCC, haijulikani ni lini hii itarekebishwa. Ukiangalia nambari hiyo, utaona ni wapi nimefanya kazi kuzunguka ili kupunguza onyo hili kwa kutekeleza taarifa zangu za sifa. Pakua na usakinishe kitu chochote ambacho unaweza kuhitaji kisha uburudishe ukurasa na wacha tuanguke.

Hatua ya 2: Kusoma na Kuandika Sajili

Daftari za Kusoma na Kuandika
Daftari za Kusoma na Kuandika

Shell ya AVR iliandikwa kimsingi kupata sensorer kadhaa ambazo nilikuwa nimeunganisha kwenye AVR yangu. Ilianza na LED rahisi kisha ikahamia kwa sensorer nyepesi, sensorer ya joto, na mwishowe kwa transducers mbili za ultrasonic. avrsh inaweza kuweka vifaa vya dijiti vya sensorer hizi kwa kuandika kwa rejista zinazodhibiti. Kudhibiti rejista za AVR wakati wa kukimbia Ili kupata orodha ya rejista zote zinazojulikana kwenye Arduino yako, andika:

magazeti madaftari na utapata kuchapisha kuangalia kama hii

Ninajua kuhusu rejista zifuatazo:

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. Kuona jinsi bits za kibinafsi zimewekwa kwenye rejista yoyote, tumia paka au amri ya mwangwi

paka% GPIOR0 Hapa ninauliza mkalimani wa amri kuonyesha, au kurudia, yaliyomo kwenye Jarida la Kusudi la Jumla la I / O # 0. Kumbuka ishara ya asilimia (%) mbele ya jina la rejista. Unahitaji hii kuashiria kwa ganda kuwa hii ni neno kuu lililotengwa linalotambulisha sajili. Pato la kawaida kutoka kwa amri ya mwonekano inaonekana kama hii

GPIOR0 (0x0) imewekwa kuwa [00000000] Pato linaonyesha jina la rejista, thamani ya hexadecimal inayopatikana kwenye rejista na uwakilishi wa daftari la rejista (kuonyesha kila kidogo kama 1 au 0). Kuweka kidogo katika rejista yoyote, tumia "index of" operator . Kwa mfano, wacha tuseme nataka kidogo ya 3 kwa 1

% GPIOR0 [3] = 1 na ganda litakupa majibu yanayoonyesha ni hatua na matokeo

GPIOR0 (0x0) imewekwa kuwa [00000000] (0x8) imewekwa kuwa [00001000] Usisahau ishara ya asilimia kuwaambia ganda unafanya kazi na rejista. Pia kumbuka kuwa kwa kuweka kidogo ya 3, hiyo ni bits 4 kwa sababu AVR yetu hutumia faharisi ya sifuri. Kwa maneno mengine, kuhesabu hadi 3 unahesabu 0, 1, 2, 3, ambayo ni mahali pa 4, lakini kidogo ya 3. Unaweza kufuta kidogo kwa njia ile ile kwa kuweka kidogo hadi sifuri. Kwa kuweka bits kama hii unaweza kubadilisha utendaji wa AVR yako juu ya kuruka. Kwa mfano, kwa kubadilisha thamani ya mechi ya kipima muda ya CTC inayopatikana katika OCR1A. Pia inakuwezesha kutazama mipangilio fulani ambayo itabidi uangalie kificho chako kwa mpango, kama vile thamani ya UBBR kwa kiwango chako cha baud. Kufanya kazi na DDRn, PORTn, na PINn Pini za I / O pia zimepewa sajili na zinaweza kuwekwa kwa njia ile ile, lakini sintaksia maalum imeundwa kufanya kazi na aina hizi za sajili. Katika nambari, kuna mchakato wa kawaida wa kusema, kuwasha LED au kifaa kingine ambacho kinahitaji dijiti ya juu au chini. Inahitaji kuweka Rejista ya Uelekezaji wa Takwimu kuonyesha pini ni ya pato, na kisha kuandika 1 au 0 kwa kiwango fulani kwenye bandari sahihi. Kwa kudhani tuna LED iliyounganishwa na pini ya dijiti 13 (PB5) na tunataka kuiwasha, hii ndio njia ya kufanya hivyo wakati AVR yako inaendesha

weka pini pb5 patoandika pb5 juu Pato, badala ya kuweza kuona LED yako ikija, ingeonekana kama hii

mzizi @ ATmega328p> weka pb pb5 pato Weka pb5 kwa outputroot @ ATmega328p> andika pb5 pb5 juu Andika mantiki juu ya kubana pb5 "Mzizi @ ATmega328p>" ni msukumo wa ganda ambao unaonyesha iko tayari kupokea amri kutoka kwako. Ili kuzima LED, ungeandika tu chini kwa pini. Ikiwa unataka kusoma pembejeo ya dijiti kutoka kwa pini, tumia amri ya kusoma. Kutumia mfano wetu hapo juu

mzizi @ ATmega328p> soma pini pb5Pin: pb5 ni JUU Vinginevyo, angalia tu rejista ya pini inayodhibiti bandari hiyo ya siri. Kwa mfano, ikiwa tuna swichi za kuzamisha zilizounganishwa na pini ya dijiti 7 na 8 (PD7 na PD8), unaweza kutuma amri

mwangwi% PIND na ganda baadaye ingeonyesha yaliyomo kwenye daftari hilo, ikikuonyesha hali zote za kuingiza / kutoa za vifaa vilivyounganishwa na ikiwa hali ya swichi ilikuwa imewashwa au imezimwa.

Hatua ya 3: Kusoma na Kuandika Fuse

Kusoma na Kuandika Fuse
Kusoma na Kuandika Fuse

Fuses ni aina maalum ya madaftari. Wanadhibiti kila kitu kutoka kwa kasi ya saa ya microcontroller yako hadi njia gani za programu zinazopatikana za kulinda EEPROM. Wakati mwingine utahitaji kubadilisha mipangilio hii, haswa ikiwa unaunda mfumo wa kujitegemea wa AVR. Sina hakika unapaswa kubadilisha mipangilio yako ya fuse kwenye Arduino. Kuwa mwangalifu na fuses zako; unaweza kujifungia nje ikiwa utaziweka vibaya. Katika mafundisho ya hapo awali, nilionyesha jinsi unaweza kusoma na kuweka fuses zako ukitumia programu yako na avrdude. Hapa, nitakuonyesha jinsi ya kusoma fuse zako wakati wa kukimbia ili kuona jinsi MCU yako imeweka. Kumbuka, kwamba huu sio mpangilio wa wakati wa kukusanya ambao unapata kutoka kwa ufafanuzi lakini fyuzi halisi wakati MCU inazisoma kwa wakati wa kukimbia. Kutoka Jedwali 27-9 kwenye jedwali la ATmega328P (daftari, zaidi kama hiyo) bits za Fuse Low Byte ni kama ifuatavyo:

Kuruhusiwa downloads kwa siku: 5 |Jambo la kufurahisha kukumbuka ni kwamba na fuses, 0 inamaanisha iliyowekwa na 1 inamaanisha kuwa kidogo hiyo haijasanidiwa. Kiasi fulani ni ya kukanusha, lakini ukishaijua unaijua.

  • CKDIV8 inaweka saa yako ya CPU kugawanywa na 8. ATmega328P hutoka kwa kiwanda kilichopangwa kutumia oscillator yake ya ndani kwa 8MHz na CKDIV8 iliyowekwa (yaani kuweka 0) ikikupa mzunguko wa mwisho wa F_CPU au CPU ya 1MHz. Kwenye Arduino, hii inabadilishwa kwani zimesanidiwa kutumia oscillator ya nje saa 16MHz.
  • CKOUT ikipangwa itatoa saa yako ya CPU kwenye PB0, ambayo ni pini ya dijiti 8 kwenye Arduinos.
  • SUT [1..0] inataja muda wa kuanza kwa AVR yako.
  • CKSEL [3..0] huweka chanzo cha saa, kama vile oscillator ya ndani ya RC, oscillator ya nje, n.k.

Unaposoma fuses zako, itarudishwa kwako kwa hexadecimal. Huu ndio muundo ambao unahitaji ikiwa unataka kuandika fuses kupitia avrdude. Kwenye arduino yangu, hii ndio ninayopata ninaposoma fyuzi ya chini ya baiti:

mzizi @ ATmega328p> soma lfuse Fuse ya chini: 0xffKwa hivyo, bits zote zimewekwa kwa 1. Nilifanya utaratibu huo kwenye koni ya Arduino na nilipata thamani sawa. Kuangalia moja ya mifumo yangu ya kusimama pekee ya AVR, nilipata 0xDA ambayo ni thamani ambayo nilikuwa nimeweka wakati nyuma wakati wa kusanidi chip. Utaratibu huo huo hutumiwa kwa kuangalia High Fuse Byte, Extended Fuse Byte, na Fuse fuse. Ulinganishaji na kaini za fyuzi za saini zimelemazwa katika nambari hiyo na maagizo ya mtangulizi wa #if 0, ambayo unaweza kubadilisha ikiwa unahisi kutosheka.

Hatua ya 4: Amri zingine

Amri zingine
Amri zingine

Kuna amri zingine kadhaa ambazo mkalimani wa amri chaguo-msingi anaelewa kuwa unaweza kupata faida. Unaweza kuona amri zote za kutekelezwa na kutolewa baadaye kwa kutoa msaada au menyu haraka. Nitawafunika haraka hapa kwani wanaelezea zaidi. Mipangilio ya Mzunguko wa Saa ya CPU Unaweza kujua ni nini firmware yako imesanidiwa kutumia kama mipangilio ya saa ya CPU na amri ya fcpu:

mzizi @ ATmega328p> fcpuCPU Freq: 16000000Hiyo ni milioni 16, au herz milioni 16, inayojulikana zaidi kama 16 MHz. Unaweza kubadilisha hii juu ya nzi, kwa sababu yoyote, na amri ya saa. Amri hii inachukua hoja moja: daktari kutumia wakati wa kugawanya kasi yako ya saa. Amri ya saa inaelewa maadili haya ya mapema:

  • ckdiv2
  • ckdiv4
  • ckdiv8
  • 16
  • ckdiv32
  • 64
  • 128
  • 256

Kutumia amri:

saa ckdiv2 wakati kasi yako ya cpu ni 16MHz itasababisha kasi yako ya saa kubadilishwa kuwa 8MHz. Kutumia prescaler ya ckdiv64 na kasi ya saa ya awali ya 16MHz itasababisha kasi ya saa ya mwisho ya 250 KHz. Kwa nini Duniani ungetaka kuifanya MCU yako polepole? Kweli, kwa moja, kasi ya saa ya chini hutumia nguvu kidogo na ikiwa MCU yako inaendesha betri kwenye eneo la mradi hauwezi kuhitaji kukimbia kwa kasi ya juu, na kwa hivyo inaweza kupunguza kasi na kupunguza matumizi ya nguvu, kuongeza maisha ya betri. Pia, ikiwa unatumia saa kwa aina yoyote ya maswala ya wakati na MCU nyingine, sema, kutekeleza programu ya UART au kitu kama hicho, unaweza kutaka kuiweka kwa thamani fulani ambayo ni rahisi kupata kiwango kizuri cha baud na viwango vya chini vya makosa. Kuimarisha na Kuimarisha mifumo ndogo ya pembeni Kwa kumbuka sawa na kupunguza matumizi ya nguvu yaliyotajwa hapo awali, unaweza kutaka kupunguza nguvu zaidi kwa kuzima vifaa vingine vya ubao ambavyo hutumii. Mkalimani wa amri na ganda anaweza sasa kuwezesha na kuwezesha viambatisho vifuatavyo:

  • Analog-to-Digital Converter (ADC). Pembeni hii hutumiwa wakati una sensorer ya analog inayotoa data (kama joto, mwanga, kuongeza kasi, nk) na unahitaji kuibadilisha kuwa nambari ya dijiti.
  • Maingiliano ya Pembeni ya Siri (SPI). Basi la SPI hutumiwa kuwasiliana na vifaa vingine vinavyowezeshwa na SPI, kama kumbukumbu za nje, madereva ya LED, ADC za nje, n.k Sehemu za SPI hutumiwa kwa programu ya ISP, au angalau pini ni, kwa hivyo kuwa mwangalifu unapofunga hii ikiwa unapanga kupitia ISP.
  • Maingiliano ya waya mbili. Vifaa vingine vya nje hutumia basi ya I2C kuwasiliana, ingawa hizi hubadilishwa haraka na vifaa vinavyowezeshwa na SPI kwani SPI ina njia kubwa zaidi.
  • USART. Hiki ni kiolesura chako cha serial. Labda hautaki kuzima hii ikiwa umeunganishwa na AVR kupitia unganisho la serial! Walakini, niliongeza hapa hapa kama mifupa ya kusafirisha vifaa ambavyo vina USART nyingi kama ATmega162 au ATmega644P.
  • yote. Hoja hii kwa amri ya nguvu au nguvu ya kuzima inawasha vifaa vyote vilivyotajwa au kuzizima zote kwa amri moja. Tena, tumia amri hii kwa busara.

mzizi @ ATmega328p> nguvu ya chini ya twi Udhibiti wa twi complete.root@ATmega328p> powerup twiUwezeshaji wa twi kamili.

Kuanzia na Kusimamisha Vipindi ganda lina kipima muda cha 16-bit ambacho kinapatikana kwa matumizi. Unaanza kipima muda na amri ya kipima muda:

kipima mudana simama kipima muda na hoja ya kuacha

kipima mudaKipima muda hiki hakitapingana na kipima muda cha ndani cha USART. Tazama nambari ya maelezo ya utekelezaji wa kipima muda cha USART, ikiwa aina hiyo ya maelezo ya kupendeza inakupendeza

mzizi @ ATmega328p> kuanza kwa kipima muda Timer.root@ATmega328p> kipima mudaTimepita wakati: ~ sekunde 157 Uthibitishaji ganda linaweza kuhifadhi nywila yenye herufi 8 kwenye EEPROM. Utaratibu huu wa nenosiri uliundwa kusaidia uwezo wa kuingia kwa telnet, lakini inaweza kupanuliwa ili kulinda vitu vingine. Kwa mfano, unaweza kuhitaji amri zingine, kama kubadilisha maadili ya sajili, kupitia utaratibu wa uthibitishaji. Weka nywila na amri ya nywila

mzizi @ ATmega328p> passwd blahUandika nywila ya mizizi kwa EEPROMIdhinisha dhidi ya nywila yake (au uhitaji idhini kwa njia ya msimbo) na amri ya auth. Kumbuka, kwamba ikiwa unajaribu kubadilisha nywila ya mizizi na tayari kuna nenosiri la mizizi, lazima uidhinishe dhidi ya nywila ya zamani kabla ya kuruhusiwa kuibadilisha kuwa nywila mpya

mzizi @ ATmega328p> passwd blinky Lazima uidhinishe mwenyewe kwanza.root@ATmega328p> auth blahAuthorized.root@ATmega328p> passwd blinkyWandika nywila mpya ya mizizi kwa EEPROMKwa kweli, utahitaji kupakia faili ya avrsh.eep ikiwa utafuta firmware ili kurudisha maadili yako ya zamani na vigeuzi. Faili ya kutengeneza itaunda faili ya EEPROM kwako. Vigeugeu ganda linaelewa dhana ya vigeugeu vilivyofafanuliwa na mtumiaji. Nambari inazuia hii kufikia 20, lakini unaweza kubadilisha hiyo ikiwa ungependa kwa kubadilisha fasili MAX_VARIABLES katika script.h. Unaweza kuhifadhi thamani yoyote ya 16-bit (ambayo ni, nambari yoyote hadi 65, 536) kwa ubadilishaji utakaokumbukwa baadaye. Sintaksia ni sawa na rejista isipokuwa ishara ya dola ($) hutumiwa kuashiria vigeugeu kwenye ganda. Orodhesha anuwai zako zote na amri ya vigeu vya kuchapisha

magazeti vigeuzi Vifafanuliwa na mtumiaji: Jina la Kiashiria -> Thamani (01): $ BURE $ -> 0 (02): $ BURE $ -> 0 (03): $ BURE $ -> 0 (04): $ BURE $ -> 0 (05): $ BURE $ -> 0 (06): $ BURE $ -> 0 (07): $ BURE $ -> 0 (08): $ BURE $ -> 0 (09): $ BURE $ -> 0 (10): $ BURE $ -> 0 (11): $ BURE $ -> 0 (12): $ BURE $ -> 0 (13): $ BURE $ -> 0 (14): $ BURE $ -> 0 (15): $ BURE $ -> 0 (16): $ BURE $ -> 0 (17): $ BURE $ -> 0 (18): $ BURE $ -> 0 (19): $ BURE $ -> 0 (20): $ BURE $ -> 0Kukamilika. Weka tofauti

$ newvar = 25 $ muda wa kutoka = 23245Pata thamani ya ubadilishaji uliopewa

mzizi @ ATmega328p> echo $ newvar $ newvar 25Unaweza kuona ni vitu gani vyote ambavyo umesisitiza sasa na amri ya kuchapisha ambayo tayari unajua

Vigezo vilivyofafanuliwa na mtumiaji: Jina la Kiashiria -> Thamani (01): newvar -> 25 (02): muda wa kumaliza -> 23245 (03): $ BURE $ -> 0 (04): $ BURE $ -> 0 (05): $ BURE $ -> 0 (06): $ BURE $ -> 0 (07): $ BURE $ -> 0 (08): $ BURE $ -> 0 (09): $ BURE $ -> 0 (10): $ BURE $ -> 0 (11): $ BURE $ -> 0 (12): $ BURE $ -> 0 (13): $ BURE $ -> 0 (14): $ BURE $ -> 0 (15): $ BURE $ -> 0 (16): $ BURE $ -> 0 (17): $ BURE $ -> 0 (18): $ BURE $ -> 0 (19): $ BURE $ -> 0 (20): $ BURE $ -> 0Kamilika. Jina la $ BURE la $ linaonyesha tu kwamba eneo hilo linalobadilika ni bure na bado halijapewa jina la kutofautisha.

Hatua ya 5: Kubadilisha Shell

Kubadilisha Shell
Kubadilisha Shell

Uko huru kudanganya nambari hiyo na kuibadilisha kwa mahitaji yako mwenyewe, ukipenda. Ikiwa ningejua ningekuwa nikiweka nambari hii, ningefanya darasa tofauti la mkalimani wa amri na muundo wa amri na nitaielezea kwa urahisi kupitia wito huu wa kiboreshaji cha kazi. Ingeweza kupunguza idadi ya nambari, lakini inavyosimama ganda linatumia laini ya amri na inaita njia inayofaa ya ganda Ili kuongeza amri zako za kawaida, fanya zifuatazo: 1. Ongeza amri yako kwenye orodha ya kifungu soma mstari wa amri na kukupa amri na hoja zozote kando. Hoja hupitishwa kama viashiria kwa viashiria, au safu ya viashiria, hata hivyo unapenda kufanya kazi nao. Hii inapatikana katika shell.cpp. Fungua shell.cpp na upate njia ya ExecCmd ya darasa la AVRShell. Unaweza kutaka kuongeza amri kwenye kumbukumbu ya programu. Ukifanya hivyo, ongeza amri katika progmem.h na progmem.cpp. Unaweza kuongeza amri kwa kumbukumbu ya programu moja kwa moja ukitumia jumla ya PSTR (), lakini utatoa onyo lingine la aina iliyotajwa hapo awali. Tena, hii ni mdudu anayejulikana anayefanya kazi na C ++, lakini unaweza kuzunguka hii kwa kuongeza amri moja kwa moja kwenye programu. * Faili, kama nilivyofanya. Ikiwa haujali kuongeza matumizi yako ya SRAM, unaweza kuongeza amri kama nilivyoonyesha na amri ya "saa". Sema ulitaka kuongeza amri mpya inayoitwa "newcmd." Nenda kwa AVRShell:: ExecCmd na upate mahali pazuri pa kuingiza nambari ifuatayo:

vinginevyo ikiwa (! strcmp (c, "newcmd")) cmdNewCmd (args);Hii itaongeza amri yako na piga njia ya cmdNewCmd ambayo utaandika katika hatua inayofuata. 2. Andika kanuni yako ya amri ya kawaida Katika faili hiyo hiyo, ongeza nambari yako ya amri ya kawaida. Hii ndio njia ya ufafanuzi. Bado utataka kuongeza tamko kwenye shell.h. Ingiza tu kwa amri zingine. Katika mfano uliopita, nambari inaweza kuonekana kama hii

voidAVRShell:: cmdNewCmd (char ** args) {sprintf_P (buff, PSTR ("Amri yako ni% s / r / n", args [0]); WriteRAM (buff);}Kuna mambo kadhaa hapa. Kwanza, "buff" ni bafa yenye herufi 40 iliyotolewa katika nambari ya kutumiwa. Tunatumia toleo la kumbukumbu ya programu ya sprintf kwani tunaipitisha PSTR. Unaweza kutumia toleo la kawaida ukipenda, lakini hakikisha haupitishi fomati katika PSTR. Pia, hoja ziko katika safu ya args. Ikiwa uliandika "newcmd arg1 arg2" unaweza kupata hoja hizi na args [0] na args [1] usajili. Unaweza kupitisha upeo wa hoja MAX_ARGS, kama inavyofafanuliwa katika nambari. Jisikie huru kubadilisha dhamana hiyo wakati unarudia ikiwa unahitaji hoja nyingi zaidi kupitishwa mara moja. Hoja ya 2 kwa kazi hii iko wazi. Usipopitisha chochote, mwongozo wa amri utaandikwa baadaye. Ikiwa utapitisha 0 kama hoja ya 2, haraka haitaandikwa. Hii ni muhimu wakati unataka kuandika kamba kadhaa tofauti ili kutoa kabla ya haraka ya amri kurudishwa kwa mtumiaji. 3. Kuwa na ganda kutekeleza nambari ya amri Tayari umemwambia mtekelezaji wa ganda kutekeleza njia cmdNewCmd wakati unasanidi amri mpya, lakini ongeza kwenye faili ya shell.h ili ieleweke na kitu cha ganda. Ongeza tu chini ya amri ya mwisho au mbele ya amri ya kwanza, au mahali popote pale. Pata tena na upakie firmware kwa Arduino yako na amri yako mpya inapatikana kutoka kwa ganda wakati wa haraka.

Hatua ya 6: Muhtasari

Unapaswa kujua jinsi ya kusanikisha na kuungana na AVR / Arduino yako na upate kidokezo cha moja kwa moja kwa mdhibiti wako mdogo anayeendesha. Unajua amri kadhaa ambazo zitavuta data ya wakati wa kukimbia kutoka kwa MCU au kuweka maadili kwenye MCU juu ya kuruka. Umeonyeshwa pia jinsi ya kuongeza nambari yako ya kibinafsi ili kuunda amri zako za kipekee kwenye ganda ili kuiboresha zaidi kwa mahitaji yako mwenyewe. Unaweza hata kutafsiri mkalimani wa amri kuwa nayo tu iwe na amri zako za kitamaduni, ikiwa inafaa mahitaji yako. Natumahi umefurahiya hii inayoweza kufundishwa na kwamba ganda la AVR linaweza kukufaa, iwe kama mkalimani wa amri ya wakati halisi au kama mchakato wa kujifunza katika kutekeleza yako mwenyewe. Kama kawaida, ninatarajia maoni yoyote au maoni juu ya jinsi hii inaweza kufundishwa! Furahiya na AVR yako!

Ilipendekeza: