Агуулгын хүснэгт:

AVRSH: Arduino/AVR -ийн командын орчуулагч бүрхүүл: 6 алхам (зурагтай)
AVRSH: Arduino/AVR -ийн командын орчуулагч бүрхүүл: 6 алхам (зурагтай)

Видео: AVRSH: Arduino/AVR -ийн командын орчуулагч бүрхүүл: 6 алхам (зурагтай)

Видео: AVRSH: Arduino/AVR -ийн командын орчуулагч бүрхүүл: 6 алхам (зурагтай)
Видео: AVR Shell Command Interpreter 2024, Долдугаар сарын
Anonim
AVRSH: Arduino/AVR -ийн команд орчуулагч бүрхүүл
AVRSH: Arduino/AVR -ийн команд орчуулагч бүрхүүл

Та AVR микроконтроллер дээрээ "нэвтрэхийг" хүсч байсан уу? Бүртгэлийн агуулгыг үзэхийн тулд "муур" хийх нь сайхан байх болно гэж та бодож байсан уу? Та AVR эсвэл Arduino-ийн бие даасан захын дэд системийг * бодит цаг хугацаанд * асаах, унтраах аргыг үргэлж хүсч байсан уу? Би ч гэсэн, би AVR Shell, UNIX шиг бүрхүүлийг бичсэн. Энэ нь таны irc nick-ийн мөргөлдөөнийг эхлүүлэхийн тулд гадагш гарч, худалдаж авсан бүрхүүлийн дансыг санагдуулам, мөн нийтлэг ганц хоёр тушаалтай байдаг тул энэ нь UNIX-тэй төстэй юм. Энэ нь мөн гадаад EEPROM ашиглан UNIX extf-тэй төстэй файлын системтэй боловч энэ нь өөрөө төсөл болсон тул би уг модулийг үйлдвэрлэхэд бэлэн болсны дараа өөр зааврын дагуу тусад нь гаргах болно. AVR Shell дээр одоо хийж болох зүйлсийн жагсаалтыг энд оруулав.

  • Өгөгдлийн чиглэлийн бүх бүртгэл (DDRn), порт, зүүг бодит цаг хугацаанд уншаарай
  • Мотор, LED асаах, мэдрэгчийг бодит цаг хугацаанд уншихын тулд бүх DDRn, порт, зүү рүүгээ бичээрэй.
  • Систем дээрх бүх мэдэгдэж буй бүртгэлүүдийг жагсаана уу
  • EEPROM-ээр нөөцлөгдсөн хэрэглэгчийн тодорхойлсон хувьсагчдад утгыг үүсгэж хадгалах.
  • Үндэс нууц үг үүсгэж, түүний эсрэг баталгаажуулна уу (telnet хандалтанд ашиглагддаг)
  • Тохируулсан CPU цагийн хурдыг уншина уу
  • Урьдчилан тооцоолуур тохируулах замаар CPU -ийнхээ цагийн хурдыг өөрчилнө үү
  • Төрөл бүрийн зүйлд цаг гаргах зориулалттай 16 битийн таймерыг эхлүүлж, зогсоо
  • Захын дэд системийг асаах ба/эсвэл унтраах: Дижитал хөрвүүлэгч (ADC), Цуваа захын интерфэйс (SPI), Хоёр утастай интерфэйс (TWI/I2C), UART/USART. Микроконтроллерийн эрчим хүчний хэрэглээг багасгах эсвэл зарим функцийг идэвхжүүлэхийг хүсч байвал ашигтай болно.
  • Дахин ашиглах боломжтой объектуудтай C ++ хэл дээр бичигдсэн.

Энэхүү зааварчилгаа нь avrsh -ийг суулгах, ашиглах, тохируулах замаар явах болно.

Алхам 1: Танд хэрэгтэй зүйл

Танд хэрэгтэй зүйл
Танд хэрэгтэй зүйл

Энэхүү зааварчилгаа нь танд дараахь зүйлээс бусад зүйлийг шаарддаггүй.

  • Arduino эсвэл ATmega328P програмтай байх. Бусад AVR нь ажиллах боломжтой боловч та өөрийн MCU -д өвөрмөц бүртгэлүүдийг жагсаахын тулд кодыг өөрчлөх шаардлагатай болж магадгүй юм. Нэрс нь зөвхөн таны MCU -ийн өвөрмөц толгой файлд жагсаасан зүйлтэй тохирч байх ёстой. Бүртгэлийн олон нэр нь AVR -ийн хооронд ижил байдаг тул тээвэрлэх үед таны миль өөр өөр байж болно.
  • Arduino/AVR -ийн цуврал USART -тэй холбогдох боломжтой болно. Системийг Windows эсвэл AVR терминал ашиглан туршиж үзсэн бөгөөд энэ нь таны USB эсвэл COM портоор цуваа холболт хийдэг. USB холболтыг ашиглан Arduinos-тэй ажилладаг бөгөөд Moderndevice.com дээрээс USB-BUB ашиглан ямар ч AVR-тэй ажилладаг. Бусад терминалын сонголтууд нь: Putty, minicom (Linux ба FreeBSD), дэлгэц (Linux/FreeBSD), Hyperterminal, Teraterm. Би холболт хийхдээ шаваас, тератерм хог илгээдэг болохыг олж мэдсэн тул таны анхны тушаал эвдэрсэн байж магадгүй юм.
  • AVR Shell програмыг суулгаж ажиллуулж, эдгээр хуудсуудаас татаж авах эсвэл BattleDroids.net -ээс хамгийн сүүлийн хувилбарыг авах боломжтой.

AVR терминалыг суулгахын тулд үүнийг задалж ажиллуулна уу. AVR Shell програмыг суулгахын тулд үүнийг татаж аваад зургаан өнцөгт файлыг шууд байршуулж, цуваа терминалаа 9600 baud -д холбоно уу, эсвэл өөрөө "make" -ээр эмхэтгээд дараа нь hex -ийг байршуулахын тулд "програм хийх" хэрэгтэй. Анхаарна уу, та COM портоо тусгахын тулд AVRDUDE тохиргоог өөрчлөх шаардлагатай болж магадгүй юм. Тэмдэглэл: PROGMEM шинж чанар нь одоогийн AVR GCC хэрэгслээр C ++ дээр эвдэрсэн бөгөөд энэ нь мэдэгдэж буй алдаа юм. Хэрэв та үүнийг эмхэтгэвэл "анхааруулга: зөвхөн эхлүүлсэн хувьсагчдыг програмын санах ойн хэсэгт байрлуулах боломжтой" гэсэн олон анхааруулах мессеж хүлээж авах болно. Харахаас залхахаас гадна энэ анхааруулга нь гэм хоргүй юм. Суурилуулсан платформ дээрх C ++ нь AVR GCC -ийн тэргүүлэх чиглэлүүдийн жагсаалтад өндөр биш тул үүнийг хэзээ засах нь тодорхойгүй байна. Хэрэв та кодыг шалгавал миний хувийн шинж чанарын мэдэгдлийг хэрэгжүүлснээр энэ сэрэмжлүүлгийг багасгахын тулд би хаана ажилласныг олж харах болно. Танд хэрэгтэй бүх зүйлийг татаж аваад суулгаарай, дараа нь хуудсыг эргүүлээд харцгаая.

Алхам 2: Унших, бичих бүртгэл

Унших, бичих бүртгэл
Унших, бичих бүртгэл

AVR Shell нь үндсэндээ миний AVR -тэй холбогдсон зарим мэдрэгч рүү хандах зорилгоор бичигдсэн болно. Энэ нь энгийн LED -ээр эхэлж, дараа нь гэрэл мэдрэгч, температур мэдрэгч, эцэст нь хоёр хэт авианы хувиргагч руу шилжсэн. avrsh нь эдгээр мэдрэгчийн дижитал бүрэлдэхүүн хэсгүүдийг хянадаг регистрүүдэд бичиж тохируулах боломжтой. Ажиллаж байхдаа AVR бүртгэлийг удирдах

регистрүүдийг хэвлэх мөн та иймэрхүү хэвлэмэл хуудас авах болно

Би дараахь бүртгэлийн талаар мэддэг.

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 ЯЭК 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 эх> Аливаа бүртгэлд тус тусад нь битүүдийг хэрхэн тохируулж байгааг харахын тулд cat эсвэл echo командыг ашиглана уу

муур %GPIOR0 Энд би командын тайлбарлагчаас Ерөнхий зориулалтын оролт/бүртгэлийн дугаар 0 -ийн агуулгыг харуулах, эсвэл цуурай гаргахыг хүсч байна. Бүртгэлийн нэрний урд талын хувь тэмдгийг (%) анхаарна уу. Энэ нь бүртгэлийг тодорхойлсон нөөцлөгдсөн түлхүүр үг гэдгийг бүрхүүлд харуулахын тулд танд энэ хэрэгтэй болно. Echo командын ердийн гаралт иймэрхүү харагдаж байна

GPIOR0 (0x0) -г [00000000] болгож тохируулсан Гаралт нь регистрийн нэр, бүртгэлээс олдсон арван зургаатын утга, бүртгэлийн хоёртын дүрслэлийг харуулдаг (бит тус бүрийг 1 эсвэл 0 гэж харуулдаг). Аливаа бүртгэлд тодорхой бит оруулахын тулд операторын "index of index" -г ашиглана уу. Жишээлбэл, би 3 дахь битийг 1 болгохыг хүсч байна гэж бодъё

%GPIOR0 [3] = 1 бүрхүүл нь танд түүний үйлдэл, үр дүнг харуулсан хариу өгөх болно

GPIOR0 (0x0) -г [00000000] болгож тохируулсан (0x8) -г [00001000] болгож тохируулсан Бүртгэлд ажиллаж байгаа бүрхүүлд хэлэх хувийн тэмдгийг бүү мартаарай. 3-р битийг тохируулснаар 4 бит байна гэдгийг анхаарна уу, учир нь манай AVR нь тэг дээр суурилсан индекс ашигладаг. Өөрөөр хэлбэл, 3 -р бит хүртэл тоолохдоо та 0, 1, 2, 3 гэж тоолох бөгөөд энэ нь 4 -р байр, харин 3 -р бит юм. Та жаахан тэг болгож жаахан арилгаж болно. Ийм бит тохируулснаар та AVR -ийнхээ ажиллагааг шууд өөрчилж болно. Жишээлбэл, OCR1A -д байгаа CTC таймерын тохирох утгыг өөрчилснөөр. Энэ нь кодоо програмчлах замаар шалгах шаардлагатай тохиргоонуудыг харах боломжийг танд олгоно. DDRn, PORTn, PINn -тэй ажиллах Оролтын гаралтын зүүг мөн бүртгэлд хуваарилдаг бөгөөд тэдгээрийг яг ижилхэн тохируулж болох боловч эдгээр төрлийн бүртгэлтэй ажиллах тусгай синтакс бий болсон. Кодын хувьд дижитал өндөр эсвэл бага шаарддаг LED эсвэл бусад төхөөрөмжийг асаах ердийн процесс байдаг. Энэ нь зүү нь гаралтанд зориулагдсан болохыг зааж өгөхийн тулд өгөгдлийн чиглэлийн бүртгэлийг тохируулж, дараа нь тухайн порт руу 1 эсвэл 0 -ийг зөв портод бичихийг шаарддаг. Бид дижитал зүү 13 (PB5) -д холбогдсон LED -тэй бөгөөд асаахыг хүсч байна гэж үзвэл таны AVR ажиллаж байх үед үүнийг хэрхэн хийх талаар эндээс үзнэ үү.

pin pb5 гаралтын бичих pin pb5 өндөр Гаралт нь таны LED асаж байгааг харахаас гадна иймэрхүү харагдах болно

root@ATmega328p> pin pb5 гаралтыг тохируулах pb5 -ийг outputroot@ATmega328p> pin pb5 high бичих "Root@ATmega328p>" нь бүрхүүлийн хүлээх мөр бөгөөд энэ нь танаас тушаалыг хүлээж авахад бэлэн байгааг илтгэнэ. LED -ийг унтраахын тулд та зүү рүү бага бичих хэрэгтэй. Хэрэв та тоон оролтыг зүүгээр уншихыг хүсвэл унших командыг ашиглана уу. Дээрх жишээг ашиглан

root@ATmega328p> pb5Pin зүүг унших: pb5 нь өндөр Эсвэл энэ зүү портыг хянадаг зүү бүртгэлийг цуурайт. Жишээлбэл, хэрэв бид дижитал зүү 7 ба 8 (PD7 ба PD8) -д холбогдсон залгууртай бол та командыг илгээж болно.

%PIND цуурай Дараа нь бүрхүүл нь тухайн регистрийн агуулгыг харуулах бөгөөд холбогдсон төхөөрөмжүүдийн оролт/гаралтын бүх төлөв, шилжүүлэгчийн төлөв асаалттай эсвэл унтраалттай байгааг харуулна.

Алхам 3: Гал хамгаалагчийг унших, бичих

Унших ба бичих гал хамгаалагч
Унших ба бичих гал хамгаалагч

Гал хамгаалагч нь тусгай төрлийн бүртгэл юм. Тэд таны микроконтроллерийн цагийн хурдаас эхлээд EEPROM-ийг бичихээс хамгаалах ямар програмчлалын аргууд байдаг. Заримдаа та эдгээр тохиргоог өөрчлөх шаардлагатай болно, ялангуяа хэрэв та бие даасан AVR системийг бий болгож байгаа бол. Та Arduino дээрх гал хамгаалагчийнхаа тохиргоог өөрчлөх ёстой гэдэгт итгэлтэй биш байна. Гал хамгаалагчдаа болгоомжтой байгаарай; Хэрэв та тэдгээрийг буруу тохируулсан бол өөрийгөө түгжих боломжтой болно. Өмнөх зааварчилгаанд би програмист болон avrdude ашиглан гал хамгаалагчаа хэрхэн уншиж, тохируулж болохыг харуулсан. Энд би MCU -ийг хэрхэн яаж тохируулсан болохыг харахын тулд гал хамгаалагчийг ажиллуулах үед хэрхэн буцааж уншихыг танд үзүүлэх болно. Анхаарна уу, энэ нь таны тодорхойлсон тодорхойлолтоос авах хөрвүүлэлтийн цагийн тохиргоо биш бөгөөд MCU-ийг ажиллуулах явцад уншдаг бодит гал хамгаалагч юм. ATmega328P мэдээллийн хүснэгтийн 27-9-р хүснэгтээс (мэдээллийн сан, үүнтэй төстэй) Fuse Low Byte-ийн битүүд дараах байдалтай байна.

CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0Сонирхолтой зүйл бол гал хамгаалагчийн хувьд 0 нь програмчлагдсан гэсэн үг бөгөөд 1 нь тухайн битийг програмчлаагүй гэсэн үг юм. Зөн совинтой байдаг, гэхдээ үүнийг мэдмэгц та үүнийг мэддэг.

  • CKDIV8 нь таны CPU -ийн цагийг 8 -д хуваана. ATmega328P нь дотоод осцилляторыг 8MHz дээр CKDIV8 програмчлагдсан (өөрөөр хэлбэл 0 болгож тохируулсан) ашиглахаар програмчлагдсан үйлдвэрээс гаралтай бөгөөд танд эцсийн F_CPU эсвэл CPU давтамж 1MHz байна. Arduino дээр 16MHz давтамжтай гадаад осциллятор ашиглахаар тохируулагдсан тул үүнийг өөрчилдөг.
  • Програмчлагдсан үед CKOUT нь таны CPU цагийг PB0 дээр гаргадаг бөгөөд энэ нь Arduinos дээрх дижитал зүү 8 юм.
  • SUT [1..0] нь таны AVR -ийг эхлүүлэх хугацааг заана.
  • CKSEL [3..0] нь дотоод RC осциллятор, гадаад осциллятор гэх мэт цагийн эх үүсвэрийг тохируулдаг.

Та гал хамгаалагчаа уншаад арван зургаан оронтой тоогоор буцааж өгөх болно. Хэрэв та гал хамгаалагчийг avrdude -ээр бичихийг хүсч байвал энэ формат танд хэрэгтэй болно. Миний arduino дээр доод гал хамгаалагчийн байтыг уншиж байхдаа дараахь зүйлийг олж авлаа.

root@ATmega328p> lfuseLower Fuse -ийг уншина уу: 0xffТиймээс, бүх битүүдийг 1 болгож тохируулсан. Би Arduino клон дээр ижил процедурыг хийж, ижил утгыг авсан. Миний бие даасан AVR системүүдийн нэгийг шалгаж үзэхэд би 0xDA-ийг авсан бөгөөд энэ нь чипийг тохируулахдаа хэсэг хугацаанд буцааж тогтоосон утга юм. Энэ процедурыг өндөр гал хамгаалагч байт, өргөтгөсөн гал хамгаалагч байт, түгжигч гал хамгаалагчийг шалгахад ашигладаг. Шалгалт тохируулга болон гарын үсгийн гал хамгаалагч байтууд нь #if 0 урьдчилсан процессорын удирдамжийн дагуу кодонд идэвхгүй болсон бөгөөд хэрэв та эвдэрсэн бол өөрчлөх боломжтой.

Алхам 4: Бусад тушаалууд

Бусад тушаалууд
Бусад тушаалууд

Анхдагч команд тайлбарлагч танд хэрэгтэй байж магадгүй гэж ойлгодог өөр хэд хэдэн команд байдаг. Та хүлээгдэж буй тусламж эсвэл цэс гаргаснаар хэрэгжүүлсэн болон ирээдүйд гарах бүх командыг харах боломжтой. Ихэнхдээ өөрсдийгөө тайлбарладаг тул би тэднийг энд хурдан оруулах болно. CPU цагны давтамжийн тохиргоо Та fcpu командыг ашиглан өөрийн програм хангамжийг CPU -ийн цагийн тохиргоонд ашиглахаар тохируулсан болохыг олж мэдэх боломжтой.

root@ATmega328p> fcpuCPU давтамж: 16000000Энэ нь 16 сая буюу 16 сая герц бөгөөд үүнийг ихэвчлэн 16 МГц гэж нэрлэдэг. Та үүнийг ямар ч шалтгаанаар цагны командыг ашиглан шууд өөрчилж болно. Энэ тушаал нь нэг аргумент шаарддаг: таны цагийн хурдыг хуваахдаа ашигладаг prescaler. Цагийн команд нь эдгээр prescaler утгыг ойлгодог.

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

Командыг ашиглан:

ckdiv цаг 2 Хэрэв таны CPU -ийн хурд 16 МГц бол таны цагийн хурдыг 8 МГц болгон өөрчлөх болно. Анхны цагийн хурд нь 16 МГц -тэй ckdiv64 -ийн урьдчилсан тооцоолуурыг ашиглавал эцсийн давтамж нь 250 КГц болно. Дэлхий дээр яагаад MCU -ийг удаашруулахыг хүсч байна вэ? Нэгдүгээрт, цагийн хурд бага байх нь бага эрчим хүч зарцуулдаг бөгөөд хэрэв танд MCU батерейг төслийн хашаан дотор ажиллуулж байгаа бол үүнийг хамгийн дээд хурдаар ажиллуулах шаардлагагүй байж магадгүй тул хурдыг бууруулж, эрчим хүчний хэрэглээг бууруулж магадгүй юм., батерейны ашиглалтын хугацааг нэмэгдүүлдэг. Түүнчлэн, хэрэв та цагийг өөр MCU -тэй холбоотой цаг хугацааны аливаа асуудалд ашиглаж байгаа бол, жишээ нь UART програм хангамж эсвэл үүнтэй төстэй програм хангамжийг ашиглаж байгаа бол та үүнийг тодорхой утгатай болгож тохируулахыг хүсч болно. алдааны түвшин бага байна. Захын дэд системүүдийг асаах, унтраах Өмнө дурьдсан эрчим хүчний хэрэглээг багасгахын зэрэгцээ та ашигладаггүй зарим самбарын дагалдах хэрэгслийг унтрааж, эрчим хүчээ цаашид бууруулахыг хүсч магадгүй юм. Командын тайлбарлагч болон бүрхүүл нь одоогоор дараах дагалдах хэрэгслийг асааж, унтрааж болно.

  • Аналог-тоон хөрвүүлэгч (ADC). Энэхүү нэмэлт төхөөрөмж нь өгөгдөл (температур, гэрэл, хурдатгал гэх мэт) өгдөг аналог мэдрэгчтэй бөгөөд үүнийг тоон утга болгон хөрвүүлэх шаардлагатай үед ашиглагддаг.
  • Цуваа захын интерфэйс (SPI). SPI автобус нь гадаад санах ой, LED драйвер, гадаад ADC гэх мэт SPI-ийг идэвхжүүлсэн бусад төхөөрөмжтэй харилцахад ашиглагддаг. SPI-ийн зарим хэсгийг ISP програмчлалд ашигладаг, эсвэл наад зах нь тээглүүрийг ашигладаг тул үүнийг унтрааж байхдаа болгоомжтой байгаарай. Хэрэв та ISP -ээр програмчилж байгаа бол.
  • Хоёр утастай интерфэйс. Зарим гадны төхөөрөмжүүд I2C автобусыг ашигладаг бөгөөд эдгээр төхөөрөмжүүд нь SPI-ийг идэвхжүүлсэн төхөөрөмжүүдээр хурдан солигддог боловч SPI нь илүү их нэвтрүүлэх чадвартай байдаг.
  • USART. Энэ бол таны цуваа интерфейс юм. Хэрэв та AVR -т цуваа холболтоор холбогдсон бол үүнийг унтраахыг хүсэхгүй байгаа байх! Гэсэн хэдий ч би үүнийг ATmega162 эсвэл ATmega644P гэх мэт олон USART төхөөрөмжтэй төхөөрөмжүүдэд зөөвөрлөх араг яс болгон энд нэмсэн.
  • бүгд. Powerup эсвэл powerdown командын энэ аргумент нь дурдсан бүх дагалдах хэрэгслийг асаах эсвэл нэг тушаалаар бүгдийг нь унтраадаг. Дахин хэлэхэд энэ тушаалыг ухаалгаар ашиглаарай.

root@ATmega328p> powerdown twi twi -ийн бүрэн бууралт.root@ATmega328p> powerup twi

Таймерыг эхлүүлэх ба зогсоох Бүрхүүл нь 16 битийн таймертай бөгөөд ашиглах боломжтой. Та таймерыг таймерын тушаалаар эхлүүлнэ:

таймер эхлэхмөн зогсоох аргументаар таймерыг зогсооно

таймер зогсоохЭнэ таймер нь USART дотоод таймертай зөрчилдөхгүй. Хэрэв та ийм нарийн ширийн зүйлийг сонирхож байвал USART таймерын хэрэгжилтийн талаархи кодыг үзнэ үү

root@ATmega328p> timer startStarted timer.root@ATmega328p> timer stop Хугацаа дууссан: ~ 157 секунд Баталгаажуулалт Бүрхүүл нь 8 тэмдэгт бүхий нууц үгийг EEPROM-д хадгалах боломжтой. Энэхүү нууц үгийн механизмыг telnet -д нэвтрэх боломжийг дэмжих зорилгоор бүтээсэн боловч бусад зүйлийг хамгаалах зорилгоор өргөжүүлж болно. Жишээлбэл, та баталгаажуулалтын механизмаар бүртгэлийн утгыг өөрчлөх гэх мэт тодорхой тушаалуудыг шаардаж болно.

root@ATmega328p> passwd blahEEPROM -д root нууц үгийг бичнэ үүAuth командыг ашиглан нууц үгээ зөвшөөрөх (эсвэл кодоор програмчлах шаардлагатай). Анхаарна уу, хэрэв та root нууц үгээ солих гэж оролдсон бөгөөд root нууц үгийг аль хэдийн тохируулсан бол шинэ нууц үг оруулахыг зөвшөөрөхөөс өмнө хуучин нууц үгийн эсрэг өөрийгөө баталгаажуулах ёстой.

root@ATmega328p> passwd blinky Та эхлээд өөрийгөө баталгаажуулах ёстой.root@ATmega328p> auth blahAuthorized.root@ATmega328p> passwd blinky EEPROM -д шинэ root нууц үг бичихМэдээжийн хэрэг, хэрэв та хуучин утгууд болон хувьсагчдыг сэргээхийн тулд програмыг устгавал avrsh.eep файлыг ачаалах шаардлагатай болно. Makefile нь танд EEPROM файлыг үүсгэх болно. Хувьсагчууд Бүрхүүл нь хэрэглэгчийн тодорхойлсон хувьсагчдын тухай ойлголтыг ойлгодог. Код нь үүнийг 20 -оор хязгаарладаг боловч хэрэв та хүсвэл script.h дээрх MAX_VARIABLES тодорхойлолтыг өөрчилснөөр үүнийг өөрчилж болно. Та 16 битийн утгыг (өөрөөр хэлбэл 65, 536 хүртэлх тоо) дараа нь эргэн санах хувьсагч руу хадгалах боломжтой. Долларын тэмдэг ($) нь бүрхүүлд хувьсагчдыг тэмдэглэхээс бусад тохиолдолд синтакс нь бүртгэлтэй төстэй юм. Хэвлэх хувьсагч командыг ашиглан бүх хувьсагчаа жагсаана уу

хэвлэх хувьсагч Хэрэглэгчийн тодорхойлсон хувьсагчид: Индексийн нэр -> Утга (01): $ FREE $ -> 0 (02): $ үнэгүй $ -> 0 (03): $ үнэгүй $ -> 0 (04): $ үнэгүй $ -> 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): $ үнэгүй $ -> 0 Бүрэн. Хувьсагч тохируулах

$ newvar = 25 $ timeout = 23245Өгөгдсөн хувьсагчийн утгыг олж аваарай

root@ATmega328p> echo $ newvar $ newvar 25Та аль хэдийн мэддэг хэвлэх командын тусламжтайгаар одоо ашиглаж байгаа бүх хувьсагчдыг харж болно

Хэрэглэгчийн тодорхойлсон хувьсагчид: Индексийн нэр -> Утга (01): newvar -> 25 (02): цаг дуусах -> 23245 (03): $ ҮНЭГҮЙ $ -> 0 (04): $ ҮНЭГҮЙ $ -> 0 (05): $ Үнэгүй $ -> 0 (06): $ үнэгүй $ -> 0 (07): $ үнэгүй $ -> 0 (08): $ үнэгүй $ -> 0 (09): $ үнэгүй $ -> 0 (10): $ Үнэгүй $ -> 0 (11): $ үнэгүй $ -> 0 (12): $ үнэгүй $ -> 0 (13): $ үнэгүй $ -> 0 (14): $ үнэгүй $ -> 0 (15): $ FREE $ -> 0 (16): $ FREE $ -> 0 (17): $ FREE $ -> 0 (18): $ FREE $ -> 0 (19): $ FREE $ -> 0 (20): $ ҮНЭГҮЙ $ -> 0 Бүрэн.$ FREE $ нэр нь хувьсагчийн байршил үнэгүй бөгөөд хараахан хувьсагчийн нэр өгөөгүй байгааг харуулж байна.

Алхам 5: Shell -ийг тохируулах

Shell -ийг тохируулах
Shell -ийг тохируулах

Хэрэв та хүсвэл кодыг хакердах, өөрийн хэрэгцээнд нийцүүлэн өөрчлөх боломжтой. Хэрэв би энэ кодыг гаргах болно гэдгээ мэдэж байсан бол би тусдаа команд тайлбарлагчийн анги, командын бүтэц хийж, функц заагчийг дуудах замаар давтах байсан. Энэ нь кодын хэмжээг бууруулдаг боловч бүрхүүл нь тушаалын мөрийг задлан шинжилж, тохирох бүрхүүлийн аргыг дууддаг. Өөрийн захиалгат командыг нэмэхийн тулд дараах зүйлийг хийнэ үү. тушаалын мөрийг задлан шинжилж, тушаал болон бусад аргументыг тусад нь өгнө. Аргументуудыг заагч эсвэл олон заагч руу дамжуулдаг боловч та тэдэнтэй ажиллах дуртай. Үүнийг shell.cpp дээрээс олж болно. Shell.cpp -ийг нээгээд AVRShell ангийн ExecCmd аргыг олоорой. Та програмын санах ойд командыг нэмж оруулахыг хүсч болно. Хэрэв тийм бол progmem.h болон progmem.cpp дээр командыг нэмнэ үү. Та командыг PSTR () макро ашиглан програмын санах ойд шууд нэмж болно, гэхдээ та өмнө дурдсан төрлийн өөр анхааруулгыг өгөх болно. Дахин хэлэхэд, энэ нь C ++ дээр ажилладаг мэдэгдэж буй алдаа боловч та миний хийсэн шиг програмыг* файлд шууд командыг нэмж оруулснаар үүнийг даван туулж чадна. Хэрэв та SRAM -ийн хэрэглээндээ нэмэрлэхийг хүсэхгүй байгаа бол "цаг" командын дагуу миний дүрсэлсэн шиг командыг нэмж болно. Та "newcmd" нэртэй шинэ тушаал нэмэхийг хүсч байгаагаа хэлээрэй. AVRShell:: ExecCmd руу ороод дараах кодыг оруулах тохиромжтой газрыг олоорой.

өөр бол (! strcmp (c, "newcmd")) cmdNewCmd (args);Энэ нь таны тушаалыг нэмж, дараагийн алхамд бичих cmdNewCmd аргыг дуудах болно. 2. Өөрийн захиалгат командын кодыг бичнэ үү Нэг файлд өөрийн захиалгат командын кодыг нэмнэ үү. Энэ бол аргын тодорхойлолт юм. Та тунхаглалыг shell.h дээр нэмсээр байх болно. Үүнийг бусад тушаалд хавсаргана уу. Өмнөх жишээнд код иймэрхүү харагдаж магадгүй юм

voidAVRShell:: cmdNewCmd (char ** args) {sprintf_P (buff, PSTR ("Таны тушаал бол %s / r / n", args [0]); WriteRAM (buff);}Энд хэд хэдэн зүйл бий. Нэгдүгээрт, "buff" нь таны ашиглахад зориулагдсан 40 тэмдэгт бүхий массив буфер юм. Бид програмын санах ойн хувилбар болох sprintf -ийг PSTR дамжуулж байгаа тул ашигладаг. Хэрэв та хүсвэл ердийн хувилбарыг ашиглаж болно, гэхдээ форматыг PSTR дээр дамжуулахгүй байгаа эсэхийг шалгаарай. Мөн аргументууд args массивт байдаг. Хэрэв та "newcmd arg1 arg2" гэж бичсэн бол args [0] болон args [1] дэд бичвэрүүдийг ашиглан эдгээр аргументыг авах боломжтой. Та кодонд тодорхойлсон хамгийн их MAX_ARGS аргументыг дамжуулж болно. WriteLine болон WriteRAM нь UART -ийн ижил нэртэй аргуудыг буцааж өгдөг дэлхийн функцууд юм. Энэ функцын 2 -р аргумент нь далд байна. Хэрэв та юу ч дамжуулаагүй бол дараа нь командын мөрийг бичих болно. Хэрэв та 2 -р аргумент болгон 0 -ийг өгвөл сануулга бичихгүй. Командын мөрийг хэрэглэгч рүү буцаахаас өмнө хэд хэдэн тусдаа мөр бичихийг хүсч байвал энэ нь ашигтай болно. 3. Бүрхүүлийг командын кодыг гүйцэтгүүлээрэй Та шинэ командыг тохируулахдаа cmdNewCmd аргыг ажиллуулахыг бүрхүүлийн гүйцэтгэгчид аль хэдийн хэлсэн боловч бүрхүүлийн объектод ойлгуулахын тулд shell.h файлд нэмж оруулаарай. Үүнийг сүүлчийн командын доор эсвэл эхний командын өмнө эсвэл хаана ч хамаагүй нэмж оруулаарай. Програмыг Arduino -д дахин хөрвүүлж, байршуулах ба таны шинэ командыг хүлээх мөрөн дээрээс авах боломжтой.

Алхам 6: Дүгнэлт

Та AVR/Arduino -г хэрхэн суулгах, холбохоо мэдэж байх ёстой бөгөөд ажиллаж байгаа микроконтроллер дээрээ шууд хариу өгөх болно. Та MCU -аас ажлын цагийн өгөгдлийг татаж авах эсвэл MCU -д утгыг тохируулах хэд хэдэн тушаалуудыг мэддэг. Та өөрийн хэрэгцээт кодоо хэрхэн яаж нэмж, бүрхүүлд өөрийн өвөрмөц командыг үүсгэж, цаашид өөрийн хэрэгцээнд нийцүүлэн өөрчлөхийг зааж өгсөн болно. Та командын тайлбарлагчийг өөрийн хэрэгцээнд нийцүүлэн зөвхөн өөрийн захиалгат тушаалуудыг агуулсан байлгахын тулд гэдэс дотрыг нь ажиллуулж болно. Энэ заавар танд таалагдсан гэж найдаж байна, мөн AVR Shell нь танд бодит цагийн команд орчуулагч эсвэл ашиг тустай байх болно гэж найдаж байна. Үргэлж урьдын адил энэхүү сургамжийг хэрхэн сайжруулах талаар ямар нэгэн сэтгэгдэл, санал хүлээж байна. AVR -ээ хөгжилтэй өнгөрүүлээрэй!

Зөвлөмж болгож буй: