Eclipse dla AVR – biblioteki LUFA

Od kilku dni w wolnych chwilach pracuję nad małym projektem w którym używam procesora Atmel: ATMega32U4. Procesor posiada zaimplementowany interface USB, za pomocą którego można łączyć się dla przykładu z komputerem emulując port szeregowy. Dzięki takiemu rozwiązaniu przestaje być konieczne pakowanie wszelkiego rodzaju translatorów magistral USB-Serial (FT232RL itd.) do projektu, jeżeli chcemy coś wysłać do okna terminala lub po prostu uzyskać komunikację z komputerem.

Aktualnie cały projekt budowany jest w oparciu o Arduino Micro, z oryginalnym bootloaderem. Całość oprogramowania piszę w C przy użyciu IDE Eclipse.Eclipse_LUFA_ATMega Jakoś nie mogę się przekonać do korzystania z Arduino IDE, ale to inna sprawa. Jak możecie się dowiedzieć z kanałów społecznościowych stosunkowo niedawno zrezygnowałem z używania AVR Studio właśnie przerzucając się na Eclipse. Nawet nie próbowałem używać środowiska Atmel Studio (aktualnie w wersji 6.1) z prostego powodu – nie lubię Visual Studio, które zdecydował się używać Atmel.

Wracając do meritum sprawy. Mając już w pełni działające środowisko programistyczne Eclipse oczywiście z możliwością programowania procesorów stanąłem przed problemem wykorzystania bibliotek LUFA w swoim projekcie. O ile LUFA integruje się z AVR/Atmel Studio pozwalając wykorzystywać w projekcie wszystkie zasoby o tyle z Eclipse nie jest już tak słodko, tym bardziej, że postanowiłem użyć bibliotek LUFA w wersji 140928 z której jeszcze wcześniej nie korzystałem.

Poniżej metoda na wykorzystanie projektu LUFA w swoich projektach pisanych i kompilowanych przy pomocy Eclipse. W podanym poniżej przepisie skupiam się ma mechanizmie CDC – wirtualny port szeregowy bazując na zawartym w bibliotece przykładzie. Dla innych zastosowań można postąpić analogicznie zwracając uwagę na punkt gdzie wyłączamy z projektu zbędne pliki z katalogu LUFA.

Jak już wspomniałem zastosowanie bibliotek LUFA w naszym projekcie składanym w Eclipse jest nieco kłopotliwe ale nie niemożliwe. Na końcu artykułu będziecie mogli ściągnąć sobie w pełni działający projekt, gdzie będzie można podejrzeć zastosowaną metodę.

Aby użyć bibliotek LUFA w naszym projekcie dla procesora Atmel należy posiadać skonfigurowane środowisko Eclipse wraz z działającym dodatkiem AVR Eclipse Plugin. W przypadku wersji Eclipse MARS (interesuje nas oczywiście wersja dla języka C/C++) instalacja jest banalna, ponieważ dodatek znajduje się w Eclipse Marketplace i instalacja jest banalnie prosta – po prostu wyszukujemy pluginu AVR Eclipse Plugin i instalujemy go w naszym środowisku. Potrzebujemy jeszcze cross-kompilatora. Do wyboru mamy WinAvr lub AVR Toolchain od Atmela. WinAVR nie jest już od jakiegoś czasu rozwijany a do bibliotek LUFA zalecany jest Toolchain od Atmela, który możemy pobrać ze stron Atmela lub wyłuskać z pakietu instalacyjnego Atmel Studio. Po wykonaniu instalacji należy wskazać kompilatorowi właściwe ścieżki, gdzie znajdują się narzędzia i biblioteki toolchaina do kompilacji i wgrywania (avrdude) plików hex do samego procesora. W tym momencie jesteśmy gotowi do pisania programów na procesory Atmela.

Tworzymy nowy projekt. Rozpakowujemy plik archiwum z bibliotekami LUFA 140928 a następnie kopiujemy katalog LUFA do naszego katalogu gdzie znajduje się projekt. Do głównego katalogu projektu kopiujemy 4 pliki: Descriptors.c/.h oraz VirtualSerial.c/.h  z katalogu archiwum: lufa-LUFA-140928\Demos\Device\ClassDriver\VirtualSerial\ a następnie odświeżamy projekt w Eclipse klawiszem F5. Oryginalnie przykładowy program wpisuje na konsolę szeregową wartości odczytane z urządzenia jakim jest dżojstik. Na potrzeby testu zmieniłem nieznacznie przykład tak aby na konsoli przy każdym przebiegu pojawiał się napis „Hello World”.

Kod w projekcie LUFA wymaga stosowania standardu GNU99 C, więc musimy się upewnić, że projekt jest pisany w tym standardzie.

Language Standard

Przy stosowaniu przykładów z biblioteki LUFA należy w liniach zawierających #include <LUFA/*> zamienić nawiasy ostre cudzysłowami w plikach .h (Descriptors.h oraz VirtualSerial.h ). Stosowane nawiasy ostre mają zastosowanie dla bibliotek dostarczonych wraz z toolchainem, prawdopodobnie autor miał na uwadze wyłącznie sytuację, gdy występuje integracja z Atmel Studio.

Następnie należy ustawić wskazać lokalizację źródeł – katalog z naszym projektem z wyłączeniem katalogu LUFA oraz lokalizację samych bibliotek LUFA.

Source Location

Wymagane jest także uzupełnienie listy symboli przez stosowne deklaracje symboli i ich wartości w ustawieniach projektu.

Symbols

Kolorem błękitnym oznaczyłem symbole, które są wymagane do poprawnej kompilacji, kolorem żółtym symbole, które ustawione są w zależności od platformy na której pracujemy. Symbol „BOARD” ma zastosowanie do konfiguracji m.in. diod LED na płytkach prototypowych.

Najbardziej czasochłonną częścią jest odłączanie z projektu zbędnych źródeł biblioteki LUFA, które jeżeli są nieużyte to generują nam błędy kompilacji lub po prostu zwiększają czas kompilacji i wielkość pliku wynikowego nie wnosząc nic dodatkowego. Na potrzeby tego konkretnie przykładu pomocne okazało się wyłączenie z projektu zbędnych plików i katalogów jak na obrazku poniżej.

Excluded from project

Aby wyłączyć katalog/plik z projektu należy wybrać obiekt z eksploratora projektu, kliknąć prawym klawiszem myszy, wybrać opcję „Exclude from Build” i wybrać konfiguracje do których zmiana ma być zastosowana.

Exclude from project 1 Exclude from project 2

Po załadowaniu projektu do procesora i podłączeniu przez port USB w menedżerze urządzeń powinno pojawić się nowe nierozpoznane urządzenie. Należy zaktualizować sterownik wskazując na plik .inf w katalogu projektu (lub w katalogu przykładowego programu VirtualSerial). Po zainstalowaniu sterownika w systemie powinien pojawić się dodatkowy port COM za pomocą którego możemy podejrzeć zawartość wysyłaną przez procesor.

Serial Port Driver Unknown  Serial Port Driver

Przykładowy projekt z zastosowaniem bibliotek LUFA 140928 – CDC Virtual Serial

VirtualSerialUSB.7z (59 pobrań) MD5: 5AA244C8078703B40827BF8464B961D2
SHA-1: AC238F857F025C7AB86DEF6A810E82356E964F91

Mam nadzieję, że pokrótce przedstawiona tu metoda będzie pomocna w pisaniu własnych projektów.

 

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *