Սովորաբար windows-ում AVR միկրոկոնտրոլերների ծրագրավորման համար օգագործում էնք CodeVisionAvr, WinAvr, AvrStudio և այլ ծրագրային միջավայրերը։ Իսկ ինչ կասեք, որ ասեմ ծրագրավորելու ենք AVR միկրոկոնտրոլերները միայն GNU-ի տրամադրած միջոցներով ու ծրագրերով։ Հետաքրքրե՞ց։ Եթե այո, ուրեմն սկսեցինք։ Դրա համար նախ տեղակայում ենք հետևյալ անհրաժեշտ ծրագրերը՝ avr-gcc, avrdude և AVR միկրոկոնտրոլերների ծրագրավորման համար C-ական avr-libc գրադարանը։ Տեղակայում ենք հետևյալ կերպ․ բացում ենք տերմինալը և գրում ենք ՝
sudo apt-get install gcc-avr avr-libc avrdude
Այժմ կարող ենք գրել ինչ-որ փորձնական կոդ ստուգելու համար, այս մեթոդը աշխատում է, թե ոչ, գրենք main.c ֆայլը։
#include <avr/io.h> #include <util/delay.h> void main(void) { DDRB=0xFF; while (1) { /* PORTB high -> LED on */ PORTB=0xFF; /* wait */ _delay_ms(1800); /* PORTB low -> LED off */ PORTB=0x00; /* wait */ _delay_ms(800); } }
Բերենք այս կոդը կոմպիլացման և կատարողական ֆայլի ստացման համար անհրաժեշտ make ֆայլը` makefile
AVRDUDE=avrdude -F -V PROGRAMMER=stk500v1 DEVICE=/dev/ttyACM0 BAUD_RATE=115200 OBJCOPY=avr-objcopy -O ihex -R EEPROM=.eeprom CC=avr-gcc MCU=atmega328p F_CPU=16000000UL CFLAGS=-Wall -Os -DF_CPU=$(F_CPU) -mmcu=$(MCU) RM=rm -rf SOURCES=main EXECUTABLE=main ${EXECUTABLE}.hex : ${EXECUTABLE} $(OBJCOPY) $(EEPROM) $(EXECUTABLE) $(EXECUTABLE).hex ${EXECUTABLE} : ${SOURCES}.o $(CC) -$(CFLAGS) ${SOURCES}.o -o ${EXECUTABLE} ${SOURCES}.c : ${SOURCES}.o $(CC) $(CFLAGS) -c -o ${SOURCES}.o ${SOURCES}.c .PHONY: upload upload: $(AVRDUDE) -c $(PROGRAMMER) -p $(MCU) -P $(DEVICE) -b $(BAUD_RATE) -U flash:w:${EXECUTABLE}.hex:i .PHONY: clean clean: $(RM) ${EXECUTABLE}.o ${EXECUTABLE}.hex ${EXECUTABLE} *.swf
Օգտագործում ենք վերը բերված makefile ֆայլը հետևյալ կերպ։ makefile-ը և ծրագրի կոդի ֆայլը՝ main.c -ն copy ենք անում միևնույն պանակի մեջ (ինչ-որ մի տեղ ստեղծում էք ինչ-որ մի պանակ և մեջը copy էք անում նշված երկու ֆայլերը՝ makefile և main.c)։
Նյութը հասարակ չէ և միաժամանակ կողմնորոշված է դեպի սկսնակները, դրա համար ավելի մանրամասն կնկարագրենք կոմպիլացման և վերջնական ֆայլի ստացման գործընթացը։
ՈՒրեմն ստեղծում ենք avr անունով պանակ, ասենք Desktop-ի վրա, դրա նախ գնում ենք Desktop․
cd ~/Desktop
և ստեղծում ենք avr անունով պանակ․
mkdir avr
Մտնում ենք avr պանակ և ստեղծում ենք երկու դատարկ ֆայլ՝ main.c և makefile անուններով․
cd avr touch main.c makefile
Այժմ բացում ենք main.c ֆայլը gedit տեքստային խմբագրիչի ծրագրով․
gedit main.c
և բրաուզերից copy էք անում վերը բերված main.c -ի կոդը (նախ մկնիկով նշում էք 1-ից մինչև 17-րդ տողերը, հետո սեղմում էք մկնիկի աջը ու սեղմում էք copy) և past էք անում gedit -ի մեջ։ Դրանից հետո save էք անում ու փակում gedit-ը։ Նույն կերպ copy էք անում նաև makefile-ը։
Հիմա կոմպիլացնում ենք կոդը և ստանում ենք ․hex ձևաչափով firmware -ի ֆայլը, որով պետք է upload անենք միկրոկոնտրոլերի flash հիշողության մեջ։ Դրա համար նույն պանակից (հիշենք մենք մտել էինք Desctop -ի avr պանակը), որտեղ գտնվում է makefile -ը տալիս ենք make հրամանը․
make
Եվ ինչպես տեսնում ենք ստորև բեված նկարում կստանանք main․hex firmware ֆայլը․
Հիմա ՈՒՇԱԴՐՈՒԹՅՈՒՆ !!! ծրագրավորում ենք միկրոկոնտրոլերը:
Դրա համար հավաքում ենք ընդամենը մեկ հրաման․
make upload
Շնորհավորում ենք, հենց նոր, դուք ինքներդ, առանց որևէ մեկի մունաթի օգնության հաջող ծրագրավորեցիք ձեր առաջին միկրոկոնտրոլերը !!!
Բայց այնուամենայնիվ սկսնակի համար makefile -ը չինարեն է գրված, դրա համար բերենք, ավելի պարզ ձևով գրված makefile (դուք ընտրեք, որն էք ցանկանում օգտագործել)
main.hex : main avr-objcopy -O ihex -R .eeprom main main.hex main : main.o avr-gcc -mmcu=atmega328p main.o -o main main.c : main.o avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o main.o main.c upload: avrdude -F -V -c stk500v1 -p ATMEGA328P -P /dev/ttyACM0 -b 115200 -U flash:w:main.hex:i clean: rm -rf main.o main.hex main *.swf
Բացարձակ նույն makefile-ն է :): Հիմա, այս պարզ makefile-ը բերեցի, որպեսզի մի քիչ խոսենք դրա ֆլագերի մասին։ -DF_CPU=16000000UL սրանով տալիս ենք միկրոկոնտրոլերի հաճախությունը 16 mghz, -mmcu=atmega328p տալիս ենք միկրոկոնտրոլերի մոդելը (եթե ձեր մոտ atmega8- է գրեք atmega8, եթե atmega16-է գրեք atmega16 և այդպես)․ avr-gcc -ի միջոցով կոմպիլացնում ենք կոդը և դրանից ստանում ենք elf ձևաչափով կատարողական ֆայլ, որից էլ պետք է ստանանք .hex ձևաչափոխ firmware-ի ֆայլը։ Դրա համար օգտագործում ենք avr-objcopy գործիքը (ուտիլիտը), որտեղ գրված ihex-ը նշանակում է՝ ստանալ hex ֆայլ intel -ի կանոններով։
Լրիվ նույն փուլերով կարող էք ծրագարավորել նաև ցանկացած Arduino պլատա, դրա համար ընդամենը պետք է փոխեք, մեկ ֆլագ՝ վերը նշված -mmcu=atmega328p -ը, օրինակ, եթե ասենք ձեր bord -ի վրա atmega8 է ուրեմն գրում էք -mmcu=atmega8․
Իսկ թե ինչ է makefile-ը կգրեմ մի ուրիշ անգամ։
Comments: no replies