abxyz
Expert programowanie

Pomógł: 16 razy Posty: 158 Otrzymał 26 piw(a) Skąd: zza winkla
|
Wysłany: 16 Paź 07 11:40 Szybki start z WinAVR
|
|
|
Szybki start z WinAVR
Pakiet programów WinAVR zawiera w sobie całkiem dobry i zupełnie darmowy (na licencji GPL) kompilator języka C wraz z kompletem narzędzi do tworzenia programów dla 8-bitowych mikroprocesorów AVR firmy ATMEL. Jest to odmiana znanego, np. z systemu Linux, kompilatora GCC (GNU Compiler Collection), która pracuje 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, 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 instalujący zapyta między innymi o katalog na dysku gdzie WinAVR ma być zamontowany 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. Zajmniemny się jego kompilacją, a następnie załadujemy wynikowy kod do pamięci flash mikrokontroler 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.
| Kod: | #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ć kompilacje edytowanego programu i zaprogramować układ AVR wybierając w menu Tools edytora odpowiednią opcję.
Często tekst źródłowy programu w C podzielony bywa 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, by któryś otworzyć do edycji, wystarczy kliknąć w jego nazwę.
Więc tworzymy w edytorze nowy projekt, mimo, że przykładowy program mieści się w jednym pliku (na razie).
File->New->Project
Pojawi się okienko dialogowe "New Project". W pole "Name" wpiszemy nazwę tworzonego projektu "led", w polu "Folder" wpiszemy ś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
Następnie dodajemy plik "led.c" do utworzonego wcześniej projektu. W okienku "Projects" trzeba zaznaczyć nazwę projektu "led" i w menu, które pojawi się po wciśnięciu prawego klawisza myszki wybrać opcje "Add Files". Pojawi się okienko dialogowe wyboru pliku "Add Files", w który należy odnaleźć katalog projektu i wybrać plik "led.c".
Następnie zapisujemy wszystko na dysku.
File->Save All
Ale to jeszcze nie wszystko, żeby skompilować przykładowy program potrzebny będzie w katalogu projektu tzw. plik Makefile. Jest to specjalny plik tekstowy, 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 poznania 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 wprowadzania teksu, gdzie należy wpisać nazwę pliku programu, w którym znajduje się funkcja "main"; nazwę pliku należy wpisać bez rozszerzenia ".c" .
*MCU type: ATmega8
Tu wybiera się typ mikrokontrolera AVR
*Output format: ihex
Tu wybiera się format pliku wynikowego, do wyboru są: plik w formacie hex, plik binarny lub plik z kodem w asemblerze
*Optimization level: s
Optymalizacja kodu, można wybrać jeden z trzech poziomów(1,2,3) lub wyłączyć optymalizację(0), albo wybrać optymalizacja 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 program podzielony jest na wielu plików, to należy wpisać nazwy wszystkich plików z wyjątkiem pliku zawierającego funkcje "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ę nazwy plików z kodem w asemblerze
*printf() options: none/standart ( 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/standart (nie używamy funkcji "scanf")
Podobnie jak z funkcją printf
*Programmer: stk200 (użyjemy programator zgodny z popularnym STK200)
Wybiera się typ programatora
*Port: lpt1 (programator podłączony do portu drukarki lpt1)
Wybiera się 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". Wiec robimy to, bo dodatkowo należy wpisać z jaką częstotliwością pracuje mikrokontroler oraz kilka innych informacji, a czego nie można zrobić poprzez menu.
Będziemy programować nowego ATmega8, które domyślnie skonfigurowane są do pracy z wewnętrznym generatorem 1MHz. Więc odnajdujemy w nowo tworzonym pliku Makefile fragment tekstu zaczynającym się od
i zaraz po nim dopisujemy linię
Następnie odnajdujemy sekcje, gdzie zapisane są informacje dla programu avrdude, program avrdude służy do programowania pamięci mikrokontrolera (część softwarowa programatora). Sekcja ta zaczyna się od linii:
| Kod: | #---------------- Programming Options (avrdude) ---------------- |
Na końcu sekcji dopisujemy dwie linie, tę na początku i tę na końcu poniższego fragmentu:
| Kod: | 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. Bo domyślnie avrdude pozostawia reset włączony.
Gotowy plik Makefile zapisujemy w katalogu projektu pod nazwą "Makefile"
File->Save As
Gdy już mamy w katalogu projektu gotowy plik Makefile, możemy powrócić do edytora tekstu Programmers Notepad i uruchomić kompilacje
Tools->[WinAVR]Make All
W trakcie kompilacji pojawi się okienko "Output" z informacjami o jej przebiegu, pod koniec wypisany zostanie komunikat
| Kod: | > 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:
| Kod: | 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, trzeba zmienić jego nazwę na avr-gcc.exe i podmienić z plikiem C:\WinAVR-20070525\bin\avr-gcc.exe |
|
|