Kursy • Poradniki • Inspirujące DIY • Forum
Pracuje on w systemie Windows, a tworzy kod wynikowy przeznaczony dla mikrokontrolerów AVR. Jednak w odróżnieniu od programów komercyjnych, takich jak np. CodeVisionAVR, pakiet WinAvr nie dostarcza tzw. zintegrowanego środowiska programistycznego IDE (ang. Integrated Development Environment), tj. aplikacji pozwalającej:
- edytować teksty źródłowe programów,
- kompilować,
- debugować (szukać błędów, śledząc instrukcja po instrukcji wykonanie programu),
- programować pamięć układu AVR.
Po instalacji WinAvr otrzymujemy w katalogu zbiór programów, z których większość działa w konsoli tekstowej (w wierszu poleceń) i z którymi nie wiadomo, co dalej zrobić. Dlatego w tym krótkim artykule opisałem, jak, wykorzystując WinAvr, można szybko skompilować przykładowy program w C i zaprogramować pamięć mikrokontrolera AVR.
Instalacja WinAVR
Oczywiście trzeba zacząć od pobrania z Internetu i instalacji najnowszej wersji WinAVR, której szukać należy pod adresem: http://sourceforge.net/news/?group_id=68108. Obecnie najnowszą wersją jest 20070525. Pobrany plik instalacyjny WinAVR-20070525-install.exe ma rozmiar 18 MB, a instalowane pliki zajmą na twardym dysku 91 MB.
Program instalacyjny zapyta między innymi o katalog na dysku, gdzie WinAVR ma być umieszczony i które komponenty pakietu mają być zainstalowane. Lepiej tu nic nie zmieniać i przyjąć domyślne opcje, jakie proponuje instalator. Dodatkowo, by moc korzystać z programatora za pośrednictwem programu avrdude, należy uruchomić skrypt:
C:\WinAVR-20070525\bin\install_giveio.bat (nie dotyczy Win9x/Me)
WinAVR dostarcza następujące programy:
- GNU Compiler Collection (GCC)
- avr-libc
- GNU Binutils
- GNU Debugger (GDB)
- Insight
- SimulAVR
- AVaRICE
- avrdude
- avrdude-gui
- Programmers Notepad
- MFile
- SRecord
Kompilacja pierwszego programu
Poniżej znajduje się tekst przykładowego programu w C. Efektem działania programu będzie miganie diody LED przyłączonej do wyprowadzenia PD1 uC AVR. Zajmiemy się jego kompilacją, a następnie załadujemy wynikowy kod do pamięci flash mikrokontrolera AVR.
Wcześniej, by uniknąć bałaganu na dysku, warto utworzyć (np. w katalogu Moje dokumenty) podkatalog o nazwie Kurs avr-gcc, a w nim podkatalog o nazwie led. Będzie to miejsce dla plików kompilowanego programu.
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRD |= _BV(1);
PORTD &= ~_BV(1);
unsigned char i;
for (;;)
{
PORTD ^=_BV(1);
for (i = 0; i <100; i++)
_delay_ms(10);
}
return 0;
}
Zaczniemy od uruchomienia edytora tekstu Programmers Notepad dołączonego do WinAVR.
Start->Programy->WinAvr-20070525->Programmers Notepad [WinAVR]
Programmers Notepad jest prostym edytorem tekstu, posiada podświetlanie składni wielu języków programowania oraz możliwość tworzenia projektów i pracy z wieloma plikami naraz. Edytor został odpowiednio skonfigurowany do współpracy z programami pakietu WinAVR. Można uruchomić kompilację edytowanego programu i zaprogramować układ AVR, wybierając w menu Tools edytora odpowiednią opcję.
Często tekst źródłowy programu w C jest podzielony na wiele plików. Żeby nie musieć otwierać do edycji każdego z plików osobno, można utworzyć w edytorze projekt, dodać do niego każdy z plików programu i na koniec zapisać plik opisujący projekt na dysku.
Następnym razem, po uruchomieniu edytora i otwarciu pliku projektu, w okienku Projetcts pojawią się nazwy wszystkich plików dodanych wcześniej do projektu. Aby któryś z nich otworzyć do edycji, wystarczy kliknąć na jego nazwę.
Tworzymy w edytorze nowy projekt, mimo że przykładowy program mieści się w jednym pliku:
File->New->Project
Pojawia się okienko dialogowe New Project. W pole Name wpisujemy nazwę tworzonego projektu led. W polu Folder wpisujemy ścieżkę do katalogu, w którym znajdą się pliki przykładowego programu:
C:\Moje dokumenty\Kurs avr-gcc\led
Następnie kopiujemy i wklejamy tekst przykładowego programu do edytora i zapisujemy plik pod nazwą led.c w katalogu projektu:
File->Save As
Dalej dodajemy plik led.c do utworzonego wcześniej projektu. W okienku Projects należy zaznaczyć nazwę projektu led i w menu, które pojawi się po wciśnięciu prawego klawisza myszki, wybrać opcję Add Files. Pojawia się okienko wyboru pliku Add Files, w którym należy odnaleźć katalog projektu i wybrać plik led.c.
Zapisujemy wszystko na dysku:
File->Save All
Plik Makefile
To jeszcze nie wszystko. Żeby skompilować przykładowy program potrzebny nam będzie w katalogu projektu tzw. plik Makefile. Jest to specjalny plik tekstowy, który zawiera różne informacje potrzebne do kompilacji. Na szczęście nie trzeba go pisać samemu. By szybko utworzyć odpowiedni plik Makefile posłużymy się programem MFile.
Start->Programy->WinAvr-20070525->MFile [WinAVR]
Program MFile jest kreatorem plików Makefile. Z jego pomocą można szybko utworzyć gotowy plik Makefile, wybierając odpowiednie opcje z menu, bez konieczności poznawania reguł pisania plików Makefile.
W programie MFile, w kolejnych pozycjach menu Makefile ustawiamy parametry jak poniżej.
- Main file name: led
Po kliknięciu w pozycję menu "Main file name" pokaże się okienko z polem do wprowadzenia tekstu. Należy tem wpisać nazwę pliku programu, w którym znajduje się funkcja "main". Nazwę pliku należy wpisać bez rozszerzenia ".c" . - MCU type: ATmega8
Tu wybieramy typ mikrokontrolera AVR. - Output format: ihex
Tu wybieramy format pliku wynikowego. Do wyboru mamy: plik w formacie hex, plik binarny lub plik z kodem w asemblerze. - Optimization level: s
Optymalizacja kodu. Możemy wybrać jeden z trzech poziomów (1,2,3), wyłączyć optymalizację (0) lub wybrać optymalizację pod względem rozmiaru kodu (s). - C Standard level: gnu99
Wybór standardu języka C. - Debugging format: ELF/stabs
Wybór formatu pliku do debugowania. - C/C++ source file(s): (pomijamy, program składa się tylko z jednego pliku)
Jeśli tekst programu podzielony jest na wielu plików, to należy wpisać nazwy wszystkich plików z wyjątkiem pliku zawierającego funkcję "main". Nazwy plików trzeba rozdzielić spacją i tym razem należy wpisać je wraz z rozszerzeniami. - Assembler source file(s): (pomijamy, piszemy tylko w C)
Wpisuje się tu nazwy plików z kodem w asemblerze. - printf() options: none/standard ( nie używamy funkcji "printf" )
Funkcja printf ze standardowej biblioteki jest bardzo rozbudowana i może zająć znaczną część pamięci programu uC. Dla zaoszczędzenia pamięci można zrezygnować z użycia funkcji "printf" lub wybrać jej wersję okrojoną. - scanf() options: none/standard (nie używamy funkcji "scanf")
Podobnie jak z funkcją printf. - Programmer: stk200 (użyjemy programatora zgodnego z popularnym STK200)
Wybieramy typ programatora. - Port: lpt1 (programator podłączony do portu drukarki lpt1)
Wybieramy nazwę portu komputera, do którego przyłączono programator.
Mfile wygląda i zachowuje się jak zwykły edytor tekstu. Jednak by móc ręcznie edytować treść tworzonego pliku Makefile, trzeba odfajkować w menu Makefile pozycję Enable Editing of Makefile. Robimy to. Dodatkowo należy wpisać, z jaką częstotliwością pracuje mikrokontroler oraz kilka innych informacji, których nie można zamieścić przez menu.
Będziemy programować nową ATmega8, która domyślnie skonfigurowana jest do pracy z wewnętrznym generatorem 1MHz. Odnajdujemy w nowo utworzonym pliku Makefile fragment tekstu zaczynającym się od:
#Processor frequency
i zaraz po nim dopisujemy linię:
F_CPU = 1000000
Następnie odnajdujemy sekcję, gdzie zapisane są informacje dla programu avrdude, który służy do programowania pamięci mikrokontrolera (część softwarowa programatora). Sekcja ta zaczyna się od linii:
#---------------- Programming Options (avrdude) ----------------
Na końcu sekcji dopisujemy dwie linie, tę na początku i tę na końcu poniższego fragmentu:
AVRDUDE_EXITMODE = noreset
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
AVRDUDE_FLAGS += -E $(AVRDUDE_EXITMODE)
Dzięki temu po zakończeniu programowania pamięci mikrokontrolera, avrdude wyłączy sygnał reset i procesor rozpocznie pracę z nowym programem. Domyślnie avrdude pozostawia reset włączony.
Gotowy plik Makefile zapisujemy w katalogu projektu pod nazwą Makefile:
File->Save As
Gdy mamy już w katalogu projektu gotowy plik Makefile, możemy powrócić do edytora tekstu Programmers Notepad i uruchomić kompilację:
Tools->[WinAVR]Make All
W trakcie kompilacji pojawi się okienko "Output" z informacjami o jej przebiegu, a pod koniec wypisany zostanie komunikat:
> Process Exit Code: 0
Zwrócona wartość zero oznacza, że kompilacja przebiegła bez błędów. Istotną informacją jest też, ile kod programu zajmie w pamięci uC.
Programowanie pamięci układu AVR
Gdy kompilacja przebiegła bez błędów i w katalogu projektu jest gotowy plik led.hex, można spróbować zaprogramować pamięć mikrokontrolera AVR:
Tools->[WinAVR] Program
Uruchomiony zostanie program avrdude i w okienku Output wypisane zostaną komunikaty o przebiegu programowania pamięci układu AVR.
Problem z Windows 98/ME
W systemie Windows 98/ME kompilator avr-gcc z WinAVR w wersji 20070525 może w ogóle nie działać. Na szczęście można w Internecie znaleźć poprawioną wersję pliku avr-gcc.exe.
Jeśli podczas kompilacji otrzymamy komunikat o błędzie:
avr-gcc: _spawnv: No such file or directory
Należy odszukać w Internecie plik o nazwie _spawnv-20070525.zip. Po jego rozpakowaniu otrzymamy plik o nazwie avr-gcc.patched.exe. Musimy zmienić jego nazwę na avr-gcc.exe i podmienić z plikiem C:\WinAVR-20070525\bin\avr-gcc.exe
Artykuł ten był wstępem do kursu C dla AVR. Zapraszamy do lektury!
To nie koniec, sprawdź również
Przeczytaj powiązane artykuły oraz aktualnie popularne wpisy lub losuj inny artykuł »
avr, gcc, kompilator, mikrokontroler, programowanie, start, WInAVR
Trwa ładowanie komentarzy...