Mundarija:

AVRSH: Arduino/AVR uchun buyruq tarjimon qobig'i: 6 qadam (rasmlar bilan)
AVRSH: Arduino/AVR uchun buyruq tarjimon qobig'i: 6 qadam (rasmlar bilan)

Video: AVRSH: Arduino/AVR uchun buyruq tarjimon qobig'i: 6 qadam (rasmlar bilan)

Video: AVRSH: Arduino/AVR uchun buyruq tarjimon qobig'i: 6 qadam (rasmlar bilan)
Video: Arduino Boards rulez! Using avrdude with the Arduino Bootlader 2024, Noyabr
Anonim
AVRSH: Arduino/AVR uchun buyruq tarjimon qobig'i
AVRSH: Arduino/AVR uchun buyruq tarjimon qobig'i

Siz hech qachon AVR mikrokontroleringizga "kirishni" xohlaganmisiz? Ro'yxatdan o'tish kitobining tarkibini ko'rish uchun "mushuk" qo'yish yaxshi bo'lardi, deb o'ylab ko'rganmisiz? Siz har doim AVR yoki Arduino shaxsiy periferik kichik tizimlarini * real vaqtda * yoqish va o'chirishni xohlaganmisiz? Men ham, shuning uchun men AVR Shell, UNIX-ga o'xshash qobiq yozdim. Bu UNIX-ga o'xshaydi, chunki bu sizning irc nick to'qnashuvi botlarini ishga tushirish uchun sotib olgan va sotib olgan qobiq hisobini eslatadi, shuningdek, ikkita umumiy buyruqqa ega. Unda tashqi EEPROM yordamida UNIX extf fayllariga o'xshash fayl tizimi ham bor, lekin bu o'z-o'zidan loyihaga aylandi, shuning uchun men ishlab chiqarishga tayyor bo'lgach, bu modulni alohida ko'rsatma ostida alohida chiqaraman. AVR Shell bilan hozirda qilishingiz mumkin bo'lgan narsalar ro'yxati:

  • Ma'lumotlarni yo'naltirish registrlarini (DDRn), port va pinlarni real vaqtda o'qing
  • Dvigatellarni, LEDlarni yoqish yoki sensorlarni real vaqtda o'qish uchun barcha DDRn, port va pinlarga yozing.
  • Tizimdagi barcha ma'lum registrlarni ro'yxatga oling
  • EEPROM tomonidan zaxiralangan foydalanuvchi tomonidan belgilanadigan o'zgaruvchilarda qiymatlarni yaratish va saqlash.
  • Ildiz parolini yarating va unga qarshi autentifikatsiya qiling (telnetga kirish uchun ishlatiladi)
  • O'rnatilgan CPU soat tezligini o'qing
  • Protsessorni sozlash orqali CPU soat tezligini o'zgartiring
  • Har xil narsalarga vaqt ajratish uchun 16 bitli taymerlarni ishga tushiring va to'xtating
  • Periferik kichik tizimlarni yoqish va/yoki o'chirish: analog-raqamli konvertorlar (ADC), ketma-ket periferik interfeys (SPI), ikki simli interfeys (TWI/I2C), UART/USART. Siz mikrokontrollerning quvvat sarfini kamaytirmoqchi bo'lsangiz yoki ba'zi funktsiyalarni yoqsangiz foydali bo'ladi.
  • Qayta foydalanish mumkin bo'lgan ob'ektlar bilan C ++ da yozilgan.

Bu ko'rsatma avrsh -ni o'rnatish, ishlatish va sozlash orqali o'tadi.

1 -qadam: Sizga nima kerak

Sizga nima kerak bo'ladi
Sizga nima kerak bo'ladi

Bu ko'rsatma sizga ko'p narsani talab qilmaydi, faqat:

  • Arduino yoki ATmega328P -ga ega bo'ling. Boshqa AVR -lar ishlashi mumkin, lekin siz MCU -ga xos bo'lgan har qanday registrlarni ro'yxatga olish uchun kodni o'zgartirishingiz kerak bo'lishi mumkin. Ismlar faqat MCU uchun xos bo'lgan sarlavha faylida ko'rsatilgan narsalarga mos kelishi kerak. Ro'yxatdan o'tish kitoblarining ko'p nomlari AVRlar o'rtasida bir xil, shuning uchun tashish paytida yurgan masofangiz farq qilishi mumkin.
  • Arduino/AVR -ning USART seriyali ulanish usuli bor. Tizim AVR terminali yordamida sinovdan o'tkazildi, bu sizning USB yoki COM portingiz orqali ketma -ket ulanadigan Windows ilovasi. USB ulanishi yordamida Arduinos bilan ishlaydi va Moderndevice.com saytidagi USB-BUB yordamida har qanday AVR. Boshqa terminal variantlariga quyidagilar kiradi: Putty, minicom (Linux va FreeBSD), ekran (Linux/FreeBSD), Hyperterminal, Teraterm. Men ulanganimda macun va teraterm axlat yuborishini topdim, shuning uchun sizning birinchi buyrug'ingiz buzilgan bo'lishi mumkin.
  • AVR Shell dasturiy ta'minotini o'rnatib, ishga tushiring, uni ushbu sahifalardan yuklab olishingiz yoki BattleDroids.net saytidan har doim eng so'nggi versiyasini olishingiz mumkin.

AVR terminalini o'rnatish uchun uni oching va ishga tushiring. AVR Shell dasturiy ta'minotini o'rnatish uchun uni yuklab oling va olti burchakli faylni to'g'ridan -to'g'ri yuklang va ketma -ket terminalingizni 9600 baytga ulang yoki o'zingizni "make", so'ngra "hex" yuklash uchun "dastur" bilan kompilyatsiya qiling. E'tibor bering, COM portini aks ettirish uchun AVRDUDE sozlamalarini o'zgartirishingiz kerak bo'lishi mumkin. Eslatma: C ++ uchun joriy AVR GCC dasturida PROGMEM atributi buzilgan va bu ma'lum xato. Agar siz uni kompilyatsiya qilsangiz, "ogohlantirish: dastur xotirasi maydoniga faqat boshlang'ich o'zgaruvchilar qo'yilishi mumkin" degan ko'plab ogohlantirish xabarlarini olishni kuting. Ko'rishdan bezovtalanishdan tashqari, bu ogohlantirish zararsizdir. O'rnatilgan platformadagi C ++ AVR GCC ustuvorliklari ro'yxatida yuqori bo'lmaganligi sababli, bu qachon tuzatilishi noma'lum. Agar siz kodni tekshirib ko'rsangiz, men o'zimning atributli bayonotlarimni amalga oshirish orqali bu ogohlantirishni kamaytirish uchun qaerda ishlaganimni ko'rasiz. Sizga kerak bo'lishi mumkin bo'lgan hamma narsani yuklab oling va o'rnating, keyin sahifani aylantiring va keling, buzilib ketaylik.

2 -qadam: O'qish va yozish registri

O'qish va yozish registrlari
O'qish va yozish registrlari

AVR Shell asosan AVR -ga ulangan ba'zi sensorlarga kirish uchun yozilgan. U oddiy LED bilan boshlandi, keyin yorug'lik sensori, harorat sensori va nihoyat ikkita ultrasonik o'tkazgichga o'tdi. avrsh bu sensorlarning raqamli komponentlarini ularni boshqaradigan registrlarga yozib o'rnatishi mumkin. Ishlayotganda AVR registrlarini manipulyatsiya qilish Arduino -dagi barcha ma'lum registrlar ro'yxatini olish uchun quyidagilarni yozing:

bosma registrlar va siz shunga o'xshash nashrni olasiz

Men quyidagi registrlar haqida bilaman:

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 ATmega328p @ ADMUX DIDR0 DIDR1 TCCR1A TCCR1B TCCR1C TCNT1L TCNT1H ICR1L ICR1H OCR1AL OCR1AH OCR1BL OCR1BH TCCR2A TCCR2B TCNT2 OCR2A OCR2B ASSR TWBR TWSR TWAR TWDR TWCR TWAMR UCSR0A UCSR0B UCSR0C UBRR0L UBRR0H UDR0 PORTB root> Bitta bitni har qanday registrda qanday o'rnatilishini ko'rish uchun cat yoki echo buyrug'idan foydalaning

mushuk %GPIOR0 Bu erda men buyruq tarjimonidan Umumiy maqsadli kirish -chiqish registrining #0 mazmunini aks ettirishini yoki aks -sado berishini so'rayman. Ro'yxat nomining oldidagi foiz belgisiga (%) e'tibor bering. Qobiqqa bu registrni aniqlaydigan kalit so'z ekanligini ko'rsatish uchun sizga kerak. Echo buyrug'ining odatdagi chiqishi shunday ko'rinadi

GPIOR0 (0x0) [00000000] ga o'rnatildi Chiqish registr nomini, registrda topilgan o'n oltilik qiymatni va registrning ikkilik ko'rinishini ko'rsatadi (har bir bit 1 yoki 0 sifatida ko'rsatiladi). Har qanday registrda ma'lum bitni o'rnatish uchun operator indeksidan foydalaning. Misol uchun, aytaylik, men 3 -bitni 1 ga aylantirmoqchiman

%GPIOR0 [3] = 1 va qobiq sizga harakat va natijani ko'rsatuvchi javob beradi

GPIOR0 (0x0) [00000000] ga o'rnatildi (0x8) [00001000] Qobiqni registr bilan ishlayotganingizni bildirish uchun foiz belgisini unutmang. Shuni ham unutmangki, 3-bitni o'rnatib, bu 4 bitni tashkil qiladi, chunki bizning AVR nolga asoslangan indeksdan foydalanadi. Boshqacha aytganda, 3 -bitga sanab, siz 0, 1, 2, 3 ni hisoblaysiz, bu 4 -o'rin, lekin 3 -bit. Bir oz nolga o'rnatib, xuddi shu tarzda biroz tozalashingiz mumkin. Bunday bitlarni o'rnatish orqali siz AVR -ning ishlashini tezda o'zgartirishingiz mumkin. Masalan, OCR1A da topilgan CTC taymerining mos keladigan qiymatini o'zgartirish orqali. Bundan tashqari, siz kodni dasturiy ravishda tekshirishingiz kerak bo'lgan maxsus sozlamalarni ko'rib chiqishga imkon beradi, masalan, UBBR tezligi. DDRn, PORTn va PINn bilan ishlash I/U pinlari ham registrlarga tayinlangan va ularni xuddi shu tarzda sozlash mumkin, lekin bu turdagi registrlar bilan ishlash uchun maxsus sintaksis yaratilgan. Kodda, masalan, LEDni yoki raqamli yuqori yoki pastni talab qiladigan boshqa qurilmani yoqish uchun oddiy jarayon mavjud. PIN -kod chiqishi uchun ma'lumot yo'nalishi registrini o'rnatishni, so'ngra to'g'ri portga ma'lum bitga 1 yoki 0 yozishni talab qiladi. Agar bizda raqamli pin 13 (PB5) ga ulangan LED mavjud bo'lsa va biz uni yoqmoqchi bo'lsak, AVR ishlayotgan vaqtda buni qanday qilish kerak.

pin pb5 chiqish yozish pin pb5 baland Chiqish, sizning LED yonishini ko'rishdan tashqari, shunday bo'ladi

root@ATmega328p> pin pb5 chiqishini o'rnating pb5 ni chiqish ildiziga o'rnating@ATmega328p> pb5 pinini yozing yuqori pb5 ga yozing "Root@ATmega328p>" - bu qobiqning buyrug'i, u sizdan buyruqlarni qabul qilishga tayyorligini bildiradi. Chiroqni o'chirish uchun pinga pastni yozing. Agar siz raqamli kirishni pin orqali o'qishni xohlasangiz, o'qish buyrug'idan foydalaning. Yuqoridagi misolimizdan foydalanib

root@ATmega328p> pb5Pin pinini o'qing: pb5 - yuqori Shu bilan bir qatorda, bu pin portini boshqaradigan pin registrini takrorlang. Misol uchun, agar bizda 7 va 8 raqamli pinli ulanish tugmachalari bo'lsa (PD7 va PD8), siz buyruq yuborishingiz mumkin.

%PIND aks -sadosi va qobiq bu registr tarkibini ko'rsatadi, sizga ulangan qurilmalarning barcha kirish/chiqish holatlarini va kalitning yoqilgan yoki o'chirilganligini ko'rsatadi.

3 -qadam: Sigortalarni o'qish va yozish

O'qish va yozish uchun sigortalar
O'qish va yozish uchun sigortalar

Sigortalar maxsus turdagi registrlardir. Ular mikrokontroleringizning soat tezligidan EEPROMni yozishdan himoya qilish uchun qanday dasturlash usullari mavjudligini boshqaradi. Ba'zida siz ushbu sozlamalarni o'zgartirishingiz kerak bo'ladi, ayniqsa siz mustaqil AVR tizimini yaratayotgan bo'lsangiz. Arduino -dagi sug'urta sozlamalarini o'zgartirishingiz kerakligiga ishonchim komil emas. Sigortalar bilan ehtiyot bo'ling; Agar siz ularni noto'g'ri o'rnatgan bo'lsangiz, o'zingizni qulflab qo'yishingiz mumkin. Avvalgi ko'rsatmada, men sizning dasturingizni dasturchi va avrdude yordamida qanday o'qish va o'rnatish kerakligini ko'rsatdim. Bu erda men sizga MCU ularni qanday o'rnatganligini bilish uchun o'z vaqtida sug'urtalarni qanday o'qishni ko'rsataman. E'tibor bering, bu siz ta'riflardan olingan kompilyatsiya vaqti sozlamasi emas, balki MCU ularni ish vaqtida o'qiyotgan haqiqiy sigortalar. ATmega328P ma'lumotlar jadvalidagi 27-9-jadvaldan (ma'lumotlar bazasi kitobi, shunga o'xshash), Fuse Low Byte bitlari quyidagicha:

CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0Shunisi e'tiborga loyiqki, sigortalar bilan 0 dasturlashtirilgan, 1 - bu ma'lum bit dasturlanmagan degan ma'noni anglatadi. Bir oz sezgir, lekin buni bilganingizdan so'ng, buni bilasiz.

  • CKDIV8 sizning protsessor soatingizni 8 ga bo'linadi. ATmega328P o'zining ichki osilatorini 8 MGts chastotali CKDIV8 bilan dasturlashtirilgan (ya'ni 0 ga o'rnatilgan) fabrikadan keladi, bu sizga yakuniy F_CPU yoki 1 MGts chastotali CPU chastotasini beradi. Arduino -da bu o'zgaradi, chunki ular 16 MGts tashqi osilatordan foydalanishga sozlangan.
  • Dasturlash paytida CKOUT sizning CPU soatingizni PB0 -da chiqaradi, bu raqamli pin 8 Arduinos.
  • SUT [1..0] AVR -ni ishga tushirish vaqtini ko'rsatadi.
  • CKSEL [3..0] soat manbasini o'rnatadi, masalan, ichki RC osilatori, tashqi osilator va boshqalar.

Sigortalaringizni o'qiganingizda, u sizga o'n oltilikda qaytariladi. Agar siz sigortalarni avrdude orqali yozmoqchi bo'lsangiz, bu sizga kerak. Arduino -da, men quyi sug'urta baytini o'qiganimda quyidagilarni olaman:

root@ATmega328p> o'qish lfuseLower sug'urta: 0xffShunday qilib, barcha bitlar 1 ga o'rnatildi. Men xuddi shu tartibni Arduino klonida qildim va bir xil qiymatga ega bo'ldim. Mustaqil AVR tizimlarimdan birini tekshirib ko'rsam, men 0xDA-ni oldim, bu chipni konfiguratsiya qilishda bir muncha vaqt oldin o'rnatganman, xuddi shu protsedura yuqori sug'urta bayti, kengaytirilgan sug'urta bayti va qulflash sigortalarini tekshirish uchun ishlatiladi. Kalibrlash va imzo sug'urta baytlari kodda #if 0 oldingi protsessor ko'rsatmasi bilan o'chirilgan, agar siz o'zingizni yomon his qilsangiz o'zgartirishingiz mumkin.

4 -qadam: Boshqa buyruqlar

Boshqa buyruqlar
Boshqa buyruqlar

Boshqa bir nechta buyruqlar mavjud, ular standart buyruq tarjimoni sizga foydali bo'lishi mumkinligini tushunadi. Siz xohlagan vaqtda yordam yoki menyu berish orqali amalga oshirilgan va kelajakda chiqariladigan barcha buyruqlarni ko'rishingiz mumkin. Men ularni bu erda tezda yoritib beraman, chunki ular asosan o'z-o'zidan tushunarli. CPU soatining chastota sozlamalari fcpu buyrug'i bilan sizning dasturiy ta'minotingiz CPU soatining sozlamalari sifatida qanday sozlanganligini bilib olishingiz mumkin:

root@ATmega328p> fcpuCPU chastotasi: 16000000Bu 16 million yoki 16 million gerts, odatda 16 MGts deb nomlanadi. Siz buni har qanday sabab bilan soat buyrug'i bilan tezda o'zgartirishingiz mumkin. Bu buyruq bitta dalilni talab qiladi: soat tezligini bo'lishda oldindan hisoblagich. Soat buyrug'i oldindan hisoblagich qiymatlarini tushunadi:

  • ckdiv2
  • ckdiv4
  • ckdiv8
  • ckdiv16
  • ckdiv32
  • ckdiv64
  • shoxrux
  • 256

Buyruq yordamida:

soat ckdiv2 CPU tezligi 16 MGts bo'lsa, soat tezligi 8 MGts ga o'zgaradi. Dastlabki soat tezligi 16 MGts bo'lgan ckdiv64 oldindan hisoblagichidan foydalanish oxirgi soat tezligi 250 KGts ga olib keladi. Nega Yer yuzida MCU -ni sekinlashtirmoqchisiz? Birinchisi, soat tezligining pastligi kam quvvat sarflaydi va agar sizda MCU batareyasi loyiha korpusida ishlayotgan bo'lsa, sizga uning yuqori tezlikda ishlashi kerak bo'lmasligi mumkin va shuning uchun tezlikni pasaytirishi va quvvat sarfini kamaytirishi mumkin., batareyaning ishlash muddatini oshiradi. Bundan tashqari, agar siz boshqa MCU bilan har qanday vaqt masalalari uchun soatni ishlatayotgan bo'lsangiz, masalan, UART dasturiy ta'minotini yoki shunga o'xshash narsalarni ishlatsangiz, uni ma'lum bir qiymatga sozlashni xohlashingiz mumkin, bu bilan yaxshi hatto tezlik tezligini olish mumkin. pastroq xato darajasi. Periferik kichik tizimlarni yoqish va o'chirish Yuqorida aytib o'tilgan quvvat sarfini kamaytirish bilan bir qatorda, siz foydalanmayotgan bortli qurilmalarning bir qismini o'chirib, quvvatni yanada kamaytirishingiz mumkin. Buyruq tarjimoni va qobiq hozirda quyidagi tashqi qurilmalarni yoqishi va o'chirishi mumkin:

  • Analog-raqamli konvertor (ADC). Bu atrof -muhit qurilmasi ma'lumotni (masalan, harorat, yorug'lik, tezlashuv va h.k.) ta'minlaydigan analog sensori bo'lsa va uni raqamli qiymatga o'tkazish kerak bo'lganda ishlatiladi.
  • Seriyali periferik interfeys (SPI). SPI avtobusi tashqi xotira, LED drayverlari, tashqi ADC va boshqalar kabi SPI-ni qo'llab-quvvatlaydigan boshqa qurilmalar bilan aloqa qilish uchun ishlatiladi. SPI qismlari ISP dasturlash uchun ishlatiladi yoki hech bo'lmaganda pinlar, shuning uchun uni o'chirishda ehtiyot bo'ling. agar siz ISP orqali dastur qilsangiz.
  • Ikki simli interfeys. Ba'zi tashqi qurilmalar aloqa uchun I2C avtobusidan foydalanadilar, lekin ular tezda SPI-ga mos keladigan qurilmalar bilan almashtiriladi, chunki SPI katta o'tkazuvchanlikka ega.
  • USART. Bu sizning ketma -ket interfeysingiz. Agar siz AVR -ga ketma -ket ulanish orqali ulangan bo'lsangiz, buni o'chirishni xohlamaysiz! Biroq, men buni bu erda ATmega162 yoki ATmega644P kabi bir nechta USARTga ega qurilmalarga ko'chirish uchun skelet sifatida qo'shdim.
  • hamma Quvvat berish yoki o'chirish buyrug'ining argumenti yuqorida aytilgan barcha tashqi qurilmalarni yoqadi yoki bitta buyruq bilan o'chirib qo'yadi. Shunga qaramay, bu buyruqdan oqilona foydalaning.

root@ATmega328p> powerdown twi twi -ni o'chirish complete.root@ATmega328p> twu -ni yoqish

Taymerlarni ishga tushirish va to'xtatish Qobiqda o'rnatilgan 16 bitli taymer mavjud. Taymerni taymer buyrug'i bilan boshlaysiz:

taymer boshlanishiva to'xtash argumenti bilan taymerni to'xtating

taymer to'xtashiBu taymer ichki USART taymeriga zid kelmaydi. USART taymerini amalga oshirish tafsilotlari uchun kodni ko'ring, agar sizni bunday tafsilotlar qiziqtirsa

root@ATmega328p> taymerni ishga tushirish timer.root@ATmega328p> taymerni to'xtatish O'tgan vaqt: ~ 157 soniya Autentifikatsiya Qobiq EEPROMda 8 belgidan iborat parolni saqlay oladi. Bu parol mexanizmi telnetga kirish imkoniyatlarini qo'llab -quvvatlash uchun yaratilgan, lekin boshqa narsalarni himoya qilish uchun kengaytirilishi mumkin. Masalan, autentifikatsiya mexanizmi orqali registr qiymatlarini o'zgartirish kabi ba'zi buyruqlar talab qilinishi mumkin.

root@ATmega328p> passwd blahEEPROM uchun root parolini yozingAuth buyrug'i bilan parolni avtorizatsiya qiling (yoki kod orqali dasturiy avtorizatsiya talab qilinadi). E'tibor bering, agar siz root parolini o'zgartirishga urinayotgan bo'lsangiz va allaqachon o'rnatilgan parol bo'lsa, uni yangi parolga o'zgartirishga ruxsat berishdan oldin o'zingizni eski parol bilan tasdiqlashingiz kerak.

root@ATmega328p> passwd blinky Siz o'zingizni avtorizatsiya qilishingiz kerak.root@ATmega328p> auth blahAuthorized.root@ATmega328p> passwd blinkyEEPROM ga yangi ildiz parolini yozingAlbatta, agar siz eski qiymatlaringizni va o'zgaruvchilarni tiklash uchun dasturiy ta'minotni o'chirib tashlasangiz, avrsh.eep faylini yuklashingiz kerak bo'ladi. Makefile siz uchun EEPROM faylini yaratadi. O'zgaruvchilar Qobiq foydalanuvchi tomonidan belgilanadigan o'zgaruvchilar tushunchasini tushunadi. Kod buni 20 bilan cheklaydi, lekin agar xohlasangiz, script.h da MAX_VARIABLES ta'rifini o'zgartirib o'zgartirishingiz mumkin. Siz 16-bitli har qanday qiymatni (ya'ni 65, 536 gacha bo'lgan har qanday raqamni) keyinroq chaqiriladigan o'zgaruvchiga saqlashingiz mumkin. Sintaksis registrlarga o'xshaydi, lekin qobiqdagi o'zgaruvchilarni belgilash uchun dollar belgisi ($) ishlatiladi. Print o'zgaruvchilari buyrug'i bilan barcha o'zgaruvchilar ro'yxatini tuzing

bosma o'zgaruvchilar Foydalanuvchi tomonidan belgilangan o'zgaruvchilar: Indeks nomi -> Qiymat (01): $ BEPUL $ -> 0 (02): $ BEPUL $ -> 0 (03): $ BEPUL $ -> 0 (04): $ BEPUL $ -> 0 (05): $ BEPUL $ -> 0 (06): $ BEPUL $ -> 0 (07): $ BEPUL $ -> 0 (08): $ BEPUL $ -> 0 (09): $ BEPUL $ -> 0 (10): $ BEPUL $ -> 0 (11): $ BEPUL $ -> 0 (12): $ BEPUL $ -> 0 (13): $ BEPUL $ -> 0 (14): $ BEPUL $ -> 0 (15): $ BEPUL $ -> 0 (16): $ BEPUL $ -> 0 (17): $ BEPUL $ -> 0 (18): $ BEPUL $ -> 0 (19): $ BEPUL $ -> 0 (20): $ BEPUL $ -> 0 To'liq. O'zgaruvchini o'rnating

$ newvar = 25 $ timeout = 23245Berilgan o'zgaruvchining qiymatini oling

root@ATmega328p> echo $ newvar $ newvar 25Siz allaqachon bilgan chop etish buyrug'i bilan qanday o'zgaruvchilar o'zgarganligini ko'rishingiz mumkin

Foydalanuvchi belgilaydigan o'zgaruvchilar: Indeks nomi -> Qiymat (01): newvar -> 25 (02): vaqt tugashi -> 23245 (03): $ BEPUL $ -> 0 (04): $ BEPUL $ -> 0 (05): $ BEPUL $ -> 0 (06): $ BEPUL $ -> 0 (07): $ BEPUL $ -> 0 (08): $ BEPUL $ -> 0 (09): $ BEPUL $ -> 0 (10): $ BEPUL $ -> 0 (11): $ BEPUL $ -> 0 (12): $ BEPUL $ -> 0 (13): $ BEPUL $ -> 0 (14): $ BEPUL $ -> 0 (15): $ BEPUL $ -> 0 (16): $ BEPUL $ -> 0 (17): $ BEPUL $ -> 0 (18): $ BEPUL $ -> 0 (19): $ BEPUL $ -> 0 (20): $ BEPUL $ -> 0 To'liq.$ FREE $ nomi shunchaki o'zgaruvchining joylashuvi bepul ekanligini ko'rsatadi va unga hali o'zgarmaydigan nom berilmagan.

5 -qadam: Shell -ni sozlash

Shell -ni sozlash
Shell -ni sozlash

Agar xohlasangiz, siz kodni buzishingiz va uni o'z ehtiyojlaringizga moslashtirishingiz mumkin. Agar men bu kodni chiqarishni bilsam edi, men alohida buyruqlar tarjimonlari sinfini va buyruqlar tuzilishini yaratgan bo'lar edim va bu chaqiruv funktsiyasi ko'rsatgichi orqali oddiygina takrorlangan bo'lardim. Bu kod miqdorini kamaytiradi, lekin qobiq turgan joyida buyruq satrini ajratadi va mos qobiq usulini chaqiradi. O'z shaxsiy buyruqlaringizni qo'shish uchun quyidagilarni bajaring: 1. Buyruqni tahlil ro'yxatiga qo'shish buyruq satrini tahlil qiling va sizga alohida buyruq va har qanday dalillarni bering. Argumentlar ko'rsatgichlar yoki ko'rsatgichlar qatoriga o'tkaziladi, lekin siz ular bilan ishlashni yoqtirasiz. Bu shell.cpp da mavjud. Shell.cpp -ni oching va AVRShell sinfining ExecCmd usulini toping. Siz buyruqni dastur xotirasiga qo'shishni xohlashingiz mumkin. Agar shunday qilsangiz, buyruqni progmem.h va progmem.cpp -ga qo'shing. Siz buyruqni to'g'ridan -to'g'ri PSTR () so'l yordamida dastur xotirasiga qo'shishingiz mumkin, lekin siz yuqorida aytib o'tilgan turdagi boshqa ogohlantirishni yaratasiz. Shunga qaramay, bu C ++ bilan ishlaydigan ma'lum xato, lekin men buni qilganimdek, to'g'ridan -to'g'ri dastur.* Fayllariga buyruq qo'shib, bu muammoni hal qila olasiz. Agar siz SRAM -dan foydalanishni qo'shmasangiz, buyruqni "soat" buyrug'i bilan ko'rsatganimdek qo'shishingiz mumkin. Aytaylik, siz "newcmd" deb nomlangan yangi buyruq qo'shmoqchi edingiz. AVRShell:: ExecCmd -ga o'ting va quyidagi kodni kiritish uchun qulay joyni toping:

aks holda (! strcmp (c, "newcmd")) cmdNewCmd (args);Bu sizning buyrug'ingizni qo'shadi va keyingi bosqichda yoziladigan cmdNewCmd usulini chaqiradi. 2. Maxsus buyruq kodini yozing Xuddi shu faylga maxsus buyruq kodini qo'shing. Bu usul ta'rifi. Siz deklaratsiyani shell.h ga qo'shishni xohlaysiz. Buni boshqa buyruqlarga qo'shish kifoya. Oldingi misolda kod shunga o'xshash ko'rinishi mumkin

voidAVRShell:: cmdNewCmd (char ** args) {sprintf_P (buff, PSTR ("Sizning buyrug'ingiz - %s / r / n", args [0]); WriteRAM (buff);}Bu erda bir nechta narsalar bor. Birinchidan, "buff"-bu sizning kodingizda ko'rsatilgan 40 belgidan iborat qator buferi. Biz sprintf dasturining xotira versiyasidan foydalanamiz, chunki biz uni PSTRdan o'tkazamiz. Agar xohlasangiz, oddiy versiyadan foydalanishingiz mumkin, lekin formatni PSTRda o'tkazmasligingizga ishonch hosil qiling. Bundan tashqari, argumentlar args qatorida. Agar siz "newcmd arg1 arg2" deb yozgan bo'lsangiz, bu argumentlarni args [0] va args [1] indekslari bilan olishingiz mumkin. Kodda aniqlanganidek, maksimal MAX_ARGS argumentni o'tkazishingiz mumkin. WriteLine va WriteRAM - UARTning bir xil nomdagi usullarini qaytaradigan global funktsiyalar. Bu funksiyaning 2 -argumenti yopiq. Agar siz hech narsa o'tkazmasangiz, keyin buyruq irodasi yoziladi. Agar siz 0 -ni 2 -argument sifatida o'tkazsangiz, so'rov yozilmaydi. Agar siz buyruq satri foydalanuvchiga qaytarilmasdan oldin bir nechta alohida satrlarni yozmoqchi bo'lsangiz, bu foydali bo'ladi. 3. Qobiq buyruq kodini bajarsin Siz allaqachon qobiq ijrochisiga yangi buyruqni o'rnatayotganda cmdNewCmd usulini bajarishni aytgansiz, lekin shell ob'ektiga tushunarli bo'lishi uchun uni shell.h fayliga qo'shing. Buni oxirgi buyruq ostiga yoki birinchi buyruq oldiga yoki u erning istalgan joyiga qo'shing. Dasturiy ta'minotni Arduino -ga qayta kompilyatsiya qiling va yuklang, shunda siz yangi buyruqni qobiqdan olishingiz mumkin.

6 -qadam: Xulosa

Siz AVR/Arduino -ni qanday o'rnatishni va unga ulanishni bilishingiz va ishlayotgan mikrokontrolerni ishga tushirishni bilishingiz kerak. Siz MCU -dan ish vaqti ma'lumotlarini tortib oladigan yoki MCU -ga qiymatlarni o'rnatadigan bir nechta buyruqlarni bilasiz. Bundan tashqari, qobiqqa o'zingizning shaxsiy buyruqlaringizni yaratish uchun o'zingizning shaxsiy kodingizni qanday qo'shishingiz kerakligini ko'rsatib berdingiz va uni o'zingizning ehtiyojlaringiz uchun moslashtirasiz. Hatto buyruq tarjimonini ham, agar u sizning ehtiyojlaringizga mos keladigan bo'lsa, faqat sizning shaxsiy buyruqlaringizni o'z ichiga olishi mumkin. Umid qilamanki, sizga bu ko'rsatma yoqdi va AVR Shell siz uchun foydali bo'lishi mumkin, yoki real vaqtda buyruq tarjimoni sifatida Har doimgidek, men bu ko'rsatmalarni qanday yaxshilash mumkinligi haqida sharhlar yoki takliflarni kutaman! AVR -dan zavqlaning!

Tavsiya: