Cortex-M3: pierwszy projekt w Open Source
Zintegrowane komercyjne środowiska programistyczne są wyposażane w kreatory umożliwiające stworzenie projektu za pomocą kilku kliknięć myszką. Eclipse nie ma żadnych ułatwień w tym kierunku, ale ten problem można rozwiązać bardzo prosto: poprzez wykorzystanie plików z wzorcowego projektu (tu opisanego).
Zaczynając naukę programowania najczęściej pierwszym przykładem prezentowanym w książkach jest aplikacja typu „hello World” wypisująca tekst na ekranie, podobnie w przypadku mikrokontrolerów zazwyczaj pierwszym programem jest przykład z migającymi diodami LED. Krok po kroku pokażemy jak – bazując na wzorcowym projekcie – stworzyć własną aplikację migającą diodami zestawu STM32Butterfly.
Przygotowaną wzorcową aplikację należy pobrać, następnie uruchomić środowisko Eclipse ( tu przedstawiamy sposób instalacji wersji dla Windows, tu dla Linuksa).
Z menu wybieramy opcję File->New->C Project , co spowoduje wyświetlenie okna kreatora aplikacji. W oknie nazwy projektu ( Project Name ) wpisujemy nazwę projektu, (w tym przypadku leds ), natomiast pozostałe ustawienia pozostawiamy jak na rys. 1.
Rys. 1. Zalecane ustawienia w oknie kreatora aplikacji
Po kliknięciu Finish zostanie utworzony pusty projekt, który należy dostosować do naszego kompilatora. W tym celu w oknie Project Explorer klikamy prawym klawiszem myszy na katalogu projektu leds , następnie z menu kontekstowego wybieramy opcję Properties . Pojawi się okno dialogowe, w którego zakładce Discovery Options (rys. 2) należy zaznaczyć opcję Automate Discovery Path And Symbols , a w oknie Compiler invocation command ” zmienić nazwę kompilatora gcc na arm-none-eabi-gcc i potwierdzić wprowadzone ustawienia klawiszem OK . Modyfikacja umożliwia automatyczne wykrywanie i parsowanie plików nagłówkowych dołączonych do projektu za pomocą dyrektywy include .
Rys. 2. Zalecane ustawienia w zakładce Discovery Options
Następnie w zakładce C/C++ build->Settings w oknie Binary Parsers należy zaznaczyć opcję Elf Parser , co zapewni środowisku możliwość parsowania plików wynikowych aplikacji.
Po ustawieniu wymaganych opcji możemy przystąpić do importu projektu stm32-examples.tgz , w tym celu w oknie Project Explorer klikamy prawym klawiszem na projekcie i z menu kontekstowego wybieramy opcję Import . Pojawi się okno źródła importu w którym należy wybrać opcję Archive File , następnie przechodzimy do kolejnego okna dialogowego (przycisk Next ). W oknie importu należy wcisnąć przycisk Browse i wskazać plik stm32-examples.tgz , w wyniku czego zostanie wyświetlona lista plików znajdująca się w archiwum. Należy wybrać wszystkie pliki oraz zakończyć import plików za pomocą klawisza Finish .
Po zaimportowaniu projektu możemy przystąpić do jego kompilacji (klawisze CTRL+B lub z menu Project->Build All ). Jeżeli wszystko przebiegło pomyślnie na dole w oknie Console powinniśmy zobaczyć logi z kompilacji, natomiast w oknie Problems nie powinno być żadnych informacji. Po skompilowaniu projektu zostało nam zaprogramowanie mikrokontrolera z zestawu STM32Butterfly . Programowanie układu odbywa się poprzez wywołanie polecenia make install , które można również wywoływać bezpośrednio z poziomu Eclipse . Odbywa się to poprzez stworzenie ikonki dla wybranej reguły make w zakładce make targets znajdującej się po prawej stronie okna głównego. Aby to zrobić wystarczy kliknąć ikonkę z symbolem zielonego okręgu znajdującego się na tej zakładce, co spowoduje wyświetlenie okna dialogowego umożliwiającego skonfigurowanie ikony dla wybranej reguły make. W oknie tym należy wpisać regułę program a następnie nacisnąć przycisk OK (rys. 3).
Rys. 3. Tworzenie ikonki dla wybranej reguły make w zakładce make targets
Rys. 4. Ikona program
Po wykonaniu tej czynności w zakładce Make Targets będziemy mogli zobaczyć ikonę z opisem program (rys. 4).
Aby zaprogramować urządzenie należy do komputera USB podłączyć interfejs ocdlink (np. BF-30), podłączyć zasilanie zestawu STM32Butterfly, a następnie kliknąć we wspomnianą wcześniej ikonę. Po krótkiej chwili układ powinien zostać zaprogramowany, a diody LEDD1, D2 (fot. 5) powinny migać naprzemiennie. Potrafimy już kompilować programy oraz programować mikrokontroler, do omówienia pozostało nam jeszcze debugowanie aplikacji.
Fot. 5. Diody LED na płytce STM32Butterfly
Debugowanie w środowisku Open Source odbywa się za pomocą programu debugera OpenOCD , którego zadaniem jest bezpośrednia obsługa interfejsu JTAG oraz mikrokontrolera. Program ten nasłuchuje na wybranym porcie (3333) na połączenia od programu debugera gdb ,który umożliwia bezpośrednią interakcję z użytkownikiem. Komunikuje się on z użytkownikiem za pomocą konsoli, więc użytkownicy systemu Windows mogą z jego obsługą mieć problemy. W przypadku środowiska Eclipse odpowiednie polecenia dla debugera wysyła samo środowisko, umożliwiając wygodną pracę bez konieczności wpisywania dodatkowych poleceń.
Przygotowanie projektu do debugowania, rozpoczniemy od dodania programu OpenOCD , tak aby uruchamiał się po wciśnięciu pojedynczego przycisku. W tym celu z menu Start wybieramy opcję Run->External Tools->External Tools Configuration , co spowoduje wyświetlenie okna dialogowego umożliwiającego konfigurację uruchomienia zewnętrznych programów. W oknie należy wybrać ikonę New Launch Configuration , która utworzy nową konfigurację uruchomieniową. W oknie konfiguracyjnym (rys. 6), należy wprowadzić ścieżkę do programu OpenOCD , wskazać katalog roboczy oraz argumenty.
Rys. 6. Okno konfiguracyjne OpenOCD
Po wprowadzeniu konfiguracji możemy spróbować uruchomić aplikację wybierając przycisk Run . Aplikacja zostanie uruchomiona w wewnętrznej konsoli, gdzie wypisze komunikat o znalezieniu mikrokontrolera oraz pozostanie aktywna w tle. Zatrzymanie aplikacji możliwe jest po wciśnięciu ikony z symbolem Stop (rys. 7).
Rys. 7. Czerwony kwadrat oznacza Stop – zatrzymanie debugowanej aplikacji
Pozostało nam jeszcze skonfigurowanie Eclipse tak, aby IDE potrafiło połączyć się serwerem OpenOCD i przejść do trybu debugowania. Aby to zrobić należy z menu wybrać opcję R un->Debug Configurations , co spowoduje wyświetlenie okna dialogowego z ustawieniami konfiguracyjnymi. W oknie tym po lewej stronie należy kliknąć na ikonę z opisem C/C++ Application , która wygeneruje nową konfigurację. W oknie konfiguracji należy wybrać projekt, który chcemy debugować (w tym przypadku leds ), co powinno zaowocować automatycznym przypisaniem pliku binarnego aplikacji w polu C/C++ Application . Teraz należy przejść do zakładki Debugger , w której w polu debugger należy z listy wybrać opcję gdbserver debugger oraz ustawić nazwę pliku programu debugera GDB (rys. 8).
Rys. 8. Zalecane ustawienia w zakładce Debugger
Rys. 9. Zalecane ustawienia w podzakładce Connection
Następnie w podzakładce Connection wybieramy typ połączenia ( Connection type ) TCP, nazwę hosta ( hostname ) należy ustawić na localhost , natomiast w pole port należy wpisać wartość 3333 (rys. 9). Teraz należy jeszcze wcisnąć przycisk Apply , następnie zamknąć okno przyciskiem Close .
Zalecane jest aby przed debugowaniem skompilować aplikację z opcją optymalizacji 0, programem wynikowym zaprogramować pamięć mikrokontrolera i dopiero teraz rozpocząć sesję debuggera. |