Pierwsze kroki z wielordzeniową płytką mikrokontrolera Raspberry Pi Pico przy użyciu języka C
Systemy wbudowane nie mogą się obyć bez wydajnych i niedrogich mikrokontrolerów MCU, jednak pierwsze kroki z nimi wymagają dogłębnego zrozumienia tej technologii i języków programowania niskiego poziomu.
Wybrać C czy MicroPython?
Systemy wbudowane były tradycyjnie pisane w języku C, ponieważ równoważy on kontrolę niskiego poziomu z podejściami do aplikacji systemowych wyższego poziomu. Obecnie problem z C polega na tym, że jest to przestarzały, pięćdziesięcioletni język programowania, którego rzadko naucza się na uniwersytetach. Zbyt łatwo jest też przypadkowo wprowadzić błędy i spowodować szkody. Pomimo tych potencjalnych problemów język C jest preferowanym językiem dla większości systemów wbudowanych.
Alternatywą dla C, dostarczaną przez ekosystem Raspberry Pi Pico, jest MicroPython. MicroPython to port języka CPython przeznaczony do pracy w systemach opartych na mikrokontrolerach MCU. Chociaż niewątpliwie bardziej obciąża procesor niż C, jest to nowoczesny język, z którym wielu programistów jest zaznajomionych i czuje się komfortowo. MicroPython może abstrahować niskopoziomowe szczegóły mikrokontrolera MCU i sprzętu. Dostęp sprzętowy odbywa się za pośrednictwem interfejsów programowania aplikacji (API) wysokiego poziomu, których można się łatwo nauczyć - jest to ważna funkcja przy napiętych terminach projektu.
Określając, który zestaw rozwojowy oprogramowania (SDK) należy wybrać - C czy MicroPython - deweloperzy muszą się skupić na określonych potrzebach. W porównaniu z MicroPythonem użycie języka C zapewni niskopoziomowy dostęp do rejestrów mikrokontrolera MCU, będzie zajmowało mniej pamięci i będzie bardziej wydajne.
Konfigurowanie zestawu rozwojowego oprogramowania (SDK) języka C
Aby utworzyć aplikację z migającą diodą za pomocą zestawu rozwojowego oprogramowania (SDK) języka C, do dyspozycji jest kilka opcji. Pierwszą z nich jest przejrzenie dokumentacji zestawu rozwojowego oprogramowania (SDK) i postępowanie zgodnie z instrukcjami. Drugą jest użycie gotowego kontenera Dockera, aby automatycznie zainstalować wszystkie narzędzia niezbędne do rozpoczęcia pracy. Trzecią opcją jest ręczna instalacja łańcuchów narzędzi i przykładowego kodu Raspberry Pi Pico, w tym:
- Git
- Python 3
- Cmake
- gcc-arm-none-eabi \
- libnewlib-arm-none-eabi
Pobranie przykładowego kodu Raspberry Pi Pico można wykonać poprzez sklonowanie repozytorium git Raspberry Pi za pomocą następującego polecenia:
git clone https://github.com/raspberrypi/pico-sdk /home/sdk/pico-sdk && \
cd /home/sdk/pico-sdk && \
git submodule update --init &&
Po zainstalowaniu tych bibliotek i kodu źródłowego następnym krokiem jest zbadanie i skompilowanie aplikacji migającej diody LED.
Pisanie pierwszej migającej aplikacji
Do zestawu rozwojowego oprogramowania (SDK) języka C dołączono przykład migającej aplikacji, którego deweloperzy mogą użyć do skompilowania swojej pierwszej aplikacji. Poniższy kod wykorzystuje wbudowaną diodę LED płytki Pico i dyrektywę PICO_DEFAULT_LED_PIN, aby skonfigurować wtyk wejścia-wyjścia i błyskać diodą z opóźnieniem 250 milisekund (ms).
Kopiuj /** * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/stdlib.h" int main() { #ifndef PICO_DEFAULT_LED_PIN #warning blink example requires a board with a regular LED #else const uint LED_PIN = PICO_DEFAULT_LED_PIN; gpio_init(LED_PIN); gpio_set_dir(LED_PIN, GPIO_OUT); while (true) { gpio_put(LED_PIN, 1); sleep_ms(250); gpio_put(LED_PIN, 0); sleep_ms(250); } #endif }
Listing kodu: płytka Raspberry Pi Pico wykorzystuje dyrektywę PICO_DEFAULT_LED_PIN, aby ustawić wtyk wejścia-wyjścia i błyskać diodą z opóźnieniem 250ms. (Źródło kodu: Raspberry Pi)
Zgodnie z listingiem do LED_PIN przypisano domyślny wtyk. Wywołania są następnie wykonywane do interfejsów API C wejścia-wyjścia ogólnego przeznaczenia. gpio_init służy do inicjalizacji wtyku, a gpio_set_dir służy do ustawienia LED_PIN jako wyjścia. Następnie tworzona jest nieskończona pętla, która przełącza stan diody LED co 250ms.
Skompilowanie aplikacji jest stosunkowo proste. Najpierw deweloper musi utworzyć katalog kompilacji w swoim folderze Raspberry Pi Pico za pomocą następujących poleceń:
mkdir build
cd build
Następnie należy przygotować cmake do kompilacji, wykonując następujące polecenie:
cmake
Teraz programista może przejść do katalogu blink i uruchomić polecenie make:
cd blink
make
Wynikiem procesu kompilacji będzie plik blinky.uf2. Skompilowany program można załadować do Raspberry Pi Pico, przytrzymując wtyk BOOTSEL i włączając zasilanie płytki. RP2 pojawi się wtedy jako urządzenie pamięci masowej. Deweloper musi przeciągnąć plik blinky.uf2 na dysk, po czym program ładujący zainstaluje aplikację. Po zakończeniu dioda LED powinna zacząć migać.
Podsumowanie
Raspberry Pi Pico to atrakcyjne rozwiązanie dla deweloperów systemów wbudowanych poszukujących elastyczności w cyklu rozwojowym. Dostępnych jest kilka opcji, w tym autonomiczne rozwiązania lub płytki z łącznością bezprzewodową. Ponadto ekosystem obsługuje język C i C++, a także MicroPython. Deweloperzy mogą wybrać, który język najlepiej pasuje do ich aplikacji, a następnie wykorzystać odpowiedni zestaw rozwojowy oprogramowania (SDK), aby przyspieszyć tworzenie oprogramowania.
Źródło: Pierwsze kroki z wielordzeniową płytką mikrokontrolera Raspberry Pi Pico przy użyciu języka C
Autor: Rolf Horn
Rolf Horn, Applications Engineer at DigiKey, has been in the European Technical Support group since 2014 with primary responsibility for answering any Development and Engineering related questions from final customers in EMEA, as well as writing and proof-reading German articles and blogs on DK’s TechForum and maker.io platforms. Prior to DigiKey, he worked at several manufacturers in the semiconductor area with focus on embedded FPGA, Microcontroller and Processor systems for Industrial and Automotive Applications. Rolf holds a degree in electrical and electronics engineering from the university of applied sciences in Munich, Bavaria and started his professional career at a local Electronics Products Distributor as System-Solutions Architect to share his steadily growing knowledge and expertise as Trusted Advisor.
Hobbies: spending time with family + friends, travelling in our VW-California transporter and motorbiking on a 1988 BMW GS 100.