Ćwiczenie 1: Sprawdzenie poprawność instalacji środowiska mbed-cli
To ćwiczenie stanowi naturalną kontynuację instrukcji konfiguracji i uruchamiania przykładowego programu na mikrokontrolerze STM platformy NUCLEO-F401RE (Ilustracja 1), kompilowanego przy użyciu ARM mbed-cli systemu MBED OS Internetu Rzeczy.
Kilkamy Add Board, wskazujemy platformę i klikamy Add to your Mbed compiler. W menu okna Mbed IDE klikamy New i wybieramy pierwszy przykładowy program (Template) o nazwie "Blinky LED test for the ST Nucleo boards". Program jest bardzo krótki i zawiera tylko kilka linii kodu. Usuwamy zawartość okna edytora i przepisujemy kod z Wydruku 1.
* kod sformatowano w kolorach C++ za pomocą narzędzia konwersji kodu do html na stronie hilite.me
Inicjujemy kompilację wciskając Compile. Po zakończeniu, zapisujemy wygenerowany plik "bin" w pamięci flash układu, widocznej w eksploratorze Windows'a pod określonym dyskiem (tutaj, G:). Teraz wciskamy niebieski przycisk na płytce NUCLEO. Uruchamia się program, wykonujący w nieskończonej pętli zapisane instrukcje.
Konfigurując zmienną MBED_OS_DIR, wskazującą na katalog "mbed-os" sprawimy, że jedna biblioteka mbed-os będzie wspólna dla wszystkich programów tworzonych w podkatalogach katalogu projektów "./ARMmbed-Projects". W linii poleceń Anaconda prompt lub systemowej (jeśli polecenie mbed jest rozpoznawalne po dodaniu ścieżki systemowej wskazującej na program mbed) wywołujemy:
> mbed config -G MBED_OS_DIR "C:\Users\PC\Backup\GrantyDydaktycznePL-2018\ROBOCZY\ARMmbed-Projects\mbed-os"
Z poziomu utworzonego katalogu projektów "ARMmbed-Projects" tworzymy nowy program, wywołując:
> mbed new mbed-two-tickers-blinky-led
> mbed new .
Pierwsze wywołanie utworzy katalog programu mbed-two-tickers-blinky-led i szkielet projektu (strukturę plików), a drugie uchroni nas przed ostrzeżeniami braku takiego szkieletu w aktualnym katalogu (projektów) przy współdzieleniu biblioteki mbed-os. Ta biblioteka będzie importowana ze wskazanego katalogu projektów MBED_OS_DIR podczas kompilacji kodu ze źródła (tutaj, np. w postaci pliku "main.cpp", dokującym w katalogu naszego programu). Dlatego należy sprawdzić, czy katalog "mbed-os" z bibliotekami systemu Mbed OS jest w katalogu projektów. Jeśli go nie ma, to wywołuje się jak poniżej:
> mbed import mbed-os
W katalogu projektu ".\ARMmbed-Projects\mbed-two-tickers-blinky-led" tworzymy plik "main.cpp" i zapisujemy w nim kod programu z Wydruku 1, który kompilujemy przywołując polecenie mbed compile z odpowiednimi parametrami:
./ARMmbed-Projects> mbed compile -t GCC_ARM -m NUCLEO_F401RE --source mbed-two-tickers-blinky-led --source mbed-os --build BUILD/mbed-two-tickers-blinky-led
Pierwsza kompilacja trwa dość długo, zanim nie uzyskamy skompilowanych wersji wszystkich bibliotek. Kolejne, w trakcie rozwoju aplikacji są szybsze ze względu na przyrostowe budowanie pliku wynikowego. Tutaj należy podkreślić, że katalog projektu (naszego programu) ".\ARMmbed-Projects\mbed-two-tickers-blinky-led" i katalog z bibliotekami systemu Mbed OS ".\ARMmbed-Projects\mbed-os" zawierają kody źródłowe i biblioteki nagłówkowe, a plik skompilowany - wynikowy, jest generowany do katalogu ".\ARMmbed-Projects\BUILD\mbed-two-tickers-blinky-led".
W efekcie, uzyskujemy plik z rozszerzeniem "bin", którym przez skopiowanie zapisujemy pamięć flash układu rozwojowego NUCLEO-F401RE. W eksploratorze Windows'a reprezentuje ją odpowiednia litera dysku (tutaj, G:).
> copy BUILD\mbed-two-tickers-blinky-led\mbed-two-tickers-blinky-led.bin G:
Podobnie jak pierwszym sposobem, po wciśnięciu niebieskiego przełącznika na płytce NUCLEO uruchamia się program, wykonujący w nieskończonej pętli zapisane instrukcje. Dioda cyklicznie zmienia częstotliwość błyskania.
Dalszy rozwój: 1) Przedstawione w kodzie rozwiązanie jest tylko jedną z możliwości. Proponuje się samodzielne opracowanie innej metody obsługi platformy celem wykonania tego samego lub innego, ciekawszego zadania sterowania cyfrowego. 2) Oprogramowanie urządzenia przy użyciu ARM Mbed Studio lub innych narzędzi, wymienionych w treści zadania projektowego z "Mechatroniki". 3) Modyfikację zaproponowanego kodu z wykorzystaniem programowania obiektowego.
![]() |
Ilustracja 1: Platforma NUCLEO-F401RE [UM1724] z trzema modułami rozszerzeń zainstalowanymi kaskadowo. |
1. Programowanie przy użyciu kompilatora działającego w chmurze obliczeniowej
W pierwszej części tego ćwiczenia wykorzystamy platformę os.mbed.com, udostępniającą narzędzie programistyczne Cloud SDK. W tym celu należy utworzyć konto na platformie mbed i po zalogowaniu się, otworzyć podstronę kompilatora ide.mbed.com/compiler. W prawym górnym rogu (Ilustracja 2) uruchamiamy okno wyboru platformy (ST-LINK/V2-1 jest zainstalowany i nasz układ jest w tym momencie podłączony do komputera za pomocą kabla do portu USB obsługiwanego przez emulator portu szeregowego, zob. opis do Projektu z "Mechatroniki" ).Ilustracja 2: Przycisk okna wyboru platformy rozwojowej |
Kilkamy Add Board, wskazujemy platformę i klikamy Add to your Mbed compiler. W menu okna Mbed IDE klikamy New i wybieramy pierwszy przykładowy program (Template) o nazwie "Blinky LED test for the ST Nucleo boards". Program jest bardzo krótki i zawiera tylko kilka linii kodu. Usuwamy zawartość okna edytora i przepisujemy kod z Wydruku 1.
WYDRUK 1
/* Ćwiczenie nr 1 * * Wykorzystanie dwóch zegarów do zmiany częstotliwości * * błyskania diody (naprzemiennie 2 i 10 razy/sek.) * */ #include "mbed.h" InterruptIn button(USER_BUTTON); DigitalOut led(LED1); Ticker tic1, tic2; int state = 3; void led_on(){ led = 1; printf("LED ON\r\n"); //wyświetl w oknie terminala, jeśli jest podłączony } void led_off(){ led = 0; printf("LED OFF\r\n"); } void switch_blinking(){ if(state == 2) state = 1; if(state == 3) state = 0; } int main() { button.rise(&switch_blinking); while(1){ if(state == 0){ tic1.attach(&led_on, 0.1); tic2.attach(&led_off, 0.5); //zgaśnie po 0.5 sek. state = 2; } if(state == 1){ tic1.detach(); tic2.detach(); led = 0; state = 3; } } }
Inicjujemy kompilację wciskając Compile. Po zakończeniu, zapisujemy wygenerowany plik "bin" w pamięci flash układu, widocznej w eksploratorze Windows'a pod określonym dyskiem (tutaj, G:). Teraz wciskamy niebieski przycisk na płytce NUCLEO. Uruchamia się program, wykonujący w nieskończonej pętli zapisane instrukcje.
2. Programowanie lokalne z wykorzystaniem biblioteki mbed-os i interfejsu mbed-cli
W drugiej części tego ćwiczenia, najpierw zainstalujemy rozszerzenie powłoki Windows'a o nazwie TortoiseHg (tutaj Mercurial 4.9.0 MSI installer - x64 Windows - requires admin rights), pozwalające na uruchomienie narzędzia zarządzającego Mercurial, które używamy do kontroli źródeł rozproszonych.Konfigurując zmienną MBED_OS_DIR, wskazującą na katalog "mbed-os" sprawimy, że jedna biblioteka mbed-os będzie wspólna dla wszystkich programów tworzonych w podkatalogach katalogu projektów "./ARMmbed-Projects". W linii poleceń Anaconda prompt lub systemowej (jeśli polecenie mbed jest rozpoznawalne po dodaniu ścieżki systemowej wskazującej na program mbed) wywołujemy:
> mbed config -G MBED_OS_DIR "C:\Users\PC\Backup\GrantyDydaktycznePL-2018\ROBOCZY\ARMmbed-Projects\mbed-os"
Z poziomu utworzonego katalogu projektów "ARMmbed-Projects" tworzymy nowy program, wywołując:
> mbed new mbed-two-tickers-blinky-led
> mbed new .
Pierwsze wywołanie utworzy katalog programu mbed-two-tickers-blinky-led i szkielet projektu (strukturę plików), a drugie uchroni nas przed ostrzeżeniami braku takiego szkieletu w aktualnym katalogu (projektów) przy współdzieleniu biblioteki mbed-os. Ta biblioteka będzie importowana ze wskazanego katalogu projektów MBED_OS_DIR podczas kompilacji kodu ze źródła (tutaj, np. w postaci pliku "main.cpp", dokującym w katalogu naszego programu). Dlatego należy sprawdzić, czy katalog "mbed-os" z bibliotekami systemu Mbed OS jest w katalogu projektów. Jeśli go nie ma, to wywołuje się jak poniżej:
> mbed import mbed-os
W katalogu projektu ".\ARMmbed-Projects\mbed-two-tickers-blinky-led" tworzymy plik "main.cpp" i zapisujemy w nim kod programu z Wydruku 1, który kompilujemy przywołując polecenie mbed compile z odpowiednimi parametrami:
./ARMmbed-Projects> mbed compile -t GCC_ARM -m NUCLEO_F401RE --source mbed-two-tickers-blinky-led --source mbed-os --build BUILD/mbed-two-tickers-blinky-led
Pierwsza kompilacja trwa dość długo, zanim nie uzyskamy skompilowanych wersji wszystkich bibliotek. Kolejne, w trakcie rozwoju aplikacji są szybsze ze względu na przyrostowe budowanie pliku wynikowego. Tutaj należy podkreślić, że katalog projektu (naszego programu) ".\ARMmbed-Projects\mbed-two-tickers-blinky-led" i katalog z bibliotekami systemu Mbed OS ".\ARMmbed-Projects\mbed-os" zawierają kody źródłowe i biblioteki nagłówkowe, a plik skompilowany - wynikowy, jest generowany do katalogu ".\ARMmbed-Projects\BUILD\mbed-two-tickers-blinky-led".
W efekcie, uzyskujemy plik z rozszerzeniem "bin", którym przez skopiowanie zapisujemy pamięć flash układu rozwojowego NUCLEO-F401RE. W eksploratorze Windows'a reprezentuje ją odpowiednia litera dysku (tutaj, G:).
> copy BUILD\mbed-two-tickers-blinky-led\mbed-two-tickers-blinky-led.bin G:
Podobnie jak pierwszym sposobem, po wciśnięciu niebieskiego przełącznika na płytce NUCLEO uruchamia się program, wykonujący w nieskończonej pętli zapisane instrukcje. Dioda cyklicznie zmienia częstotliwość błyskania.
Dalszy rozwój: 1) Przedstawione w kodzie rozwiązanie jest tylko jedną z możliwości. Proponuje się samodzielne opracowanie innej metody obsługi platformy celem wykonania tego samego lub innego, ciekawszego zadania sterowania cyfrowego. 2) Oprogramowanie urządzenia przy użyciu ARM Mbed Studio lub innych narzędzi, wymienionych w treści zadania projektowego z "Mechatroniki". 3) Modyfikację zaproponowanego kodu z wykorzystaniem programowania obiektowego.
Komentarze
Prześlij komentarz