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

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

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. 3. Tworzenie ikonki dla wybranej reguły make w zakładce make targets

 

 

Rys. 4. Ikona program

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

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

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

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. 8. Zalecane ustawienia w zakładce Debugger

 

 

Rys. 9. Zalecane  ustawienia w podzakładce Connection

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.

O autorze