Orodha ya maudhui:
- Hatua ya 1: Nini Utahitaji
- Hatua ya 2: Kusoma na Kuandika Sajili
- Hatua ya 3: Kusoma na Kuandika Fuse
- Hatua ya 4: Amri zingine
- Hatua ya 5: Kubadilisha Shell
- Hatua ya 6: Muhtasari
Video: AVRSH: Kamanda ya Mkalimani wa Ukalimani kwa Arduino / AVR. 6 Hatua (na Picha)
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:56
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
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
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
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
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
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:
Kujifunga kwa Moja kwa Moja kwa Mchezo Mtendaji wa Mchezo wa Gofu wa 3: Hatua 12 (na Picha)
Kujifunga kwa Moja kwa Moja kwa Mchezo Mtendaji wa Mchezo wa Gofu wa 3: Hivi majuzi nilichapisha Inayoweza kufundishwa juu ya kujenga mchezo wa kufurahisha unaoweza kubeba na unaoweza kuchezwa ndani na nje. Inaitwa "Executive Par 3 Golf Game". Nilitengeneza kadi ya alama ya kuiga kurekodi kila alama ya wachezaji kwa "mashimo" 9. Kama ilivyo
Moja kwa moja 4G / 5G HD Kutiririka Video Kutoka kwa DJI Drone kwa Ucheleweshaji wa Chini [Hatua 3]: Hatua 3
Moja kwa moja Video ya 4G / 5G ya Utiririshaji wa HD Kutoka kwa DJI Drone kwa Ucheleweshaji wa Chini [Hatua 3]: Mwongozo ufuatao utakusaidia kupata mitiririko ya video yenye ubora wa HD kutoka karibu na drone yoyote ya DJI. Kwa msaada wa Programu ya Simu ya FlytOS na Maombi ya Wavuti ya FlytNow, unaweza kuanza kutiririsha video kutoka kwa drone
Jinsi ya Kuandika Mpango wa Ukalimani wa Linear kwenye TI-89: 6 Hatua
Jinsi ya Kuandika Programu ya Ukalimani wa Linear kwenye TI-89: Vitu vya kujua kabla ya kuanza. Vichwa muhimu vitakuwa kwenye mabano (mfano. (ENTER)) na taarifa katika nukuu ni habari halisi zilizoonyeshwa kwenye skrini. Funguo muhimu na kamba za maandishi zinazoletwa katika kila hatua zinaangaziwa kwenye takwimu. Whe
DIY R-KAMANDA: 3 Hatua (na Picha)
DIY R-KAMPELE: Baada ya kuona kifaa kipya cha R-Kamba kwenye soko, nilijipa jukumu la kutengeneza toleo bora la DIY kwa pesa kidogo iwezekanavyo. Sababu mbili zilikamilisha utengenezaji wa hii1.) Mimi ni DIYer2.) Sitaki kula $ 50USD kisha isafirishwe t
Kutoka kwa Picha kwa Picha Kubwa: Hatua ya Kwanza: Hatua 17
Kutoka Picha ndogo hadi Picha Kubwa: Hatua ya Kwanza: Kuchukua picha za watu na mahali wakati wa sherehe za kucheza mitaani inaweza kuwa ya kupendeza sana na ya kufurahisha. jinsi tunavyojivunia prin yetu