Samouczek: tworzenie aplikacji z obsługą czasu rzeczywistego

W tym samouczku pokazano, jak utworzyć przykładową aplikację dla rdzeni w czasie rzeczywistym na urządzeniu Azure Sphere. Zobacz Omówienie aplikacji Azure Sphere , aby uzyskać podstawowe informacje o aplikacjach z obsługą czasu rzeczywistego.

W tym samouczku dowiesz się, jak:

  • Pobieranie przykładowej aplikacji
  • Instalowanie narzędzia GNU Arm
  • Konfigurowanie sprzętu do wyświetlania danych wyjściowych
  • Włączanie tworzenia i debugowania
  • Uruchamianie emulatora terminali w celu wyświetlenia danych wyjściowych
  • Tworzenie, uruchamianie i debugowanie aplikacji z obsługą czasu rzeczywistego

Ważne

W tych instrukcjach założono, że używany jest sprzęt zgodny ze sprzętem do projektowania tablic referencyjnych MT3620 (RDB), takim jak MT3620 Dev Kit firmy Seeed Studios. Jeśli używasz innego sprzętu Azure Sphere, zapoznaj się z dokumentacją producenta, aby dowiedzieć się, czy grafika UART jest narażona i jak uzyskać do niego dostęp. Może być konieczne skonfigurowanie sprzętu w celu innego wyświetlania danych wyjściowych oraz zaktualizowanie przykładowego kodu i pola Uarts pliku app_manifest.json w celu użycia innego obiektu UART.

Wymagania wstępne

Pobierz przykładowe aplikacje

Aplikację HelloWorld można pobrać w następujący sposób:

  1. Wskaż przeglądarce microsoft samples browser.
  2. Wpisz "Azure Sphere" w polu Search.
  3. Wybierz pozycję Azure Sphere — Hello world z wyników wyszukiwania.
  4. Wybierz pozycję Pobierz plik ZIP.
  5. Otwórz pobrany plik i wyodrębnij go do katalogu lokalnego.

Instalowanie narzędzia GNU Arm Embedded Toolchain

Narzędzie GNU Arm Embedded Toolchain można pobrać i zainstalować z witryny internetowej dewelopera arm. Możesz też użyć artefaktów vcpkg, aby automatycznie zainstalować i skonfigurować środowisko programistyczne.

  • Visual Studio 2022: Jeśli korzystasz z programu Visual Studio 2022, zainstaluj narzędzie GNU Arm Embedded Toolchain (arm-none-eabi) z witryny internetowej dewelopera Arm.
  • Visual Studio 2019: Narzędzie jest automatycznie instalowane z rozszerzeniem azure-sphere dla programu Visual Studio w programie Visual Studio 2019. Jeśli używasz programu Visual Studio 2019, przejdź do tematu Konfigurowanie sprzętu do wyświetlania danych wyjściowych. Jeśli jednak ręcznie zainstalowano narzędzie GNU Arm Embedded Toolchain, program Visual Studio użyje zainstalowanej wersji.

Aby zainstalować narzędzie, w witrynie internetowej dewelopera Arm znajdź GNU Arm Embedded Toolchain (arm-none-eabi), który zawiera kompilator dla procesora ARM Cortex-M4. Postępuj zgodnie z instrukcjami, aby pobrać i zainstalować kompilator dla platformy systemu operacyjnego.

Domyślnie Visual Studio Code wyszukuje narzędzie i powinna znaleźć zainstalowaną wersję. Jeśli wystąpią problemy z kompilacją związane z narzędziem, wprowadź ścieżkę w następujący sposób:

  1. Wybierz pozycjęUstawienia>preferencji plików>>>RozszerzeniaAzure Sphere.
  2. Wprowadź ścieżkę instalacji GNU Arm Embedded Toolchain w ustawieniu Azure Sphere: Arm Gnu Path .

Aby zainstalować narzędzie, w witrynie internetowej dewelopera Arm znajdź GNU Arm Embedded Toolchain (arm-none-eabi), który zawiera kompilator dla procesora ARM Cortex-M4. Postępuj zgodnie z instrukcjami, aby pobrać i zainstalować kompilator dla platformy systemu operacyjnego.

Konfigurowanie sprzętu do wyświetlania danych wyjściowych

Obecnie każdy rdzeń w czasie rzeczywistym obsługuje grafikę UART obsługą samego rekordu TX. Funkcja RTApps może używać tego obiektu UART do wysyłania danych wyjściowych dziennika z urządzenia. Podczas tworzenia i debugowania aplikacji zwykle potrzebny jest sposób odczytywania i wyświetlania danych wyjściowych. Przykład HelloWorld_RTApp_MT3620_BareMetal pokazuje, jak aplikacja może pisać w UART.

Użyj adaptera USB-to-serial, takiego jak FTDI Friend, aby podłączyć grafikę UART z rdzenia w czasie rzeczywistym do portu USB w komputerze. Do nawiązania połączenia szeregowego z ustawieniami terminali 115200-8-N-1 (115200 bps, 8 bitów, bez bitów parzystości, bitów jednoskładnościowych) będzie potrzebny emulator terminalowy .

Aby skonfigurować sprzęt do wyświetlania danych wyjściowych z aplikacji RTApp, wykonaj poniższe czynności. Aby ustalić lokalizacje numerów PIN, należy zapoznać się z dokumentacją producenta sprzętu. Jeśli używasz sprzętu zgodnego ze sprzętem do projektowania tablic referencyjnych MT3620 (RDB), takim jak MT3620 Dev Kit firmy Seeed Studios, poszukaj nagłówków interfejsu RDB może pomóc w określeniu lokalizacji pinezki.

  1. Podłącz GND za pomocą adaptera USB-do-szeregowego do GND w zestawie deweloperów. Na sprzęcie RDB MT3620 GND to Nagłówek 3, pin 2.
  2. Podłącz RX za pomocą adaptera USB-do-szeregowego do IOM4-0 TX w zestawie deweloperów. Na sprzęcie MT3620 RDB IOM4-0 TX to Nagłówek 3, pin 6.
  3. Podłącz adapter USB-do-szeregowy do bezpłatnego portu USB w komputerze deweloperskim i określ, do którego portu jest podłączone urządzenie szeregowe. W systemie Windows uruchom Menedżer urządzeń, wybierz pozycję Wyświetl>urządzenia według kontenera i poszukaj ciągu "USB UART". Na przykład karta FT232R USB UART wskazuje kartę FTDI Friend.
  4. Uruchom program emulatora terminali i otwórz terminal 115200-8-N-1 do portu COM używanego przez adapter. Zapoznaj się z dokumentacją emulatora terminalu, aby dowiedzieć się, jak określić port i szybkość.

Konfigurowanie sprzętu do wyświetlania danych wyjściowych

Obecnie każdy rdzeń w czasie rzeczywistym obsługuje grafikę UART obsługą samego rekordu TX. Funkcja RTApps może używać tego obiektu UART do wysyłania danych wyjściowych dziennika z urządzenia. Podczas tworzenia i debugowania aplikacji zwykle potrzebny jest sposób odczytywania i wyświetlania danych wyjściowych. Przykład HelloWorld_RTApp_MT3620_BareMetal pokazuje, jak aplikacja może pisać w UART.

Użyj adaptera USB-to-serial, takiego jak FTDI Friend, aby podłączyć grafikę UART z rdzenia w czasie rzeczywistym do portu USB w komputerze. Do nawiązania połączenia szeregowego z ustawieniami terminali 115200-8-N-1 (115200 bps, 8 bitów, bez bitów parzystości, bitów jednoskładnościowych) będzie potrzebny emulator terminalowy .

Aby skonfigurować sprzęt do wyświetlania danych wyjściowych z aplikacji RTApp, wykonaj poniższe czynności. Aby ustalić lokalizacje numerów PIN, należy zapoznać się z dokumentacją producenta sprzętu. Jeśli używasz sprzętu zgodnego ze sprzętem do projektowania tablic referencyjnych MT3620 (RDB), takim jak MT3620 Dev Kit firmy Seeed Studios, poszukaj nagłówków interfejsu RDB może pomóc w określeniu lokalizacji pinezki.

  1. Podłącz GND za pomocą adaptera USB-do-szeregowego do GND w zestawie deweloperów. Na sprzęcie RDB MT3620 GND to Nagłówek 3, pin 2.

  2. Podłącz RX za pomocą adaptera USB-do-szeregowego do IOM4-0 TX w zestawie deweloperów. Na sprzęcie MT3620 RDB IOM4-0 TX to Nagłówek 3, pin 6.

  3. Podłącz adapter USB-do-szeregowy do bezpłatnego portu USB w komputerze deweloperskim i określ, do którego portu jest podłączone urządzenie szeregowe.

    • W systemie Windows uruchom Menedżer urządzeń, wybierz pozycję Wyświetl>urządzenia według kontenera i poszukaj ciągu "USB UART". Na przykład karta FT232R USB UART wskazuje kartę FTDI Friend.

    • W systemie Linux wpisz następujące polecenie:

      dmesg | grep ttyUSB
      

      Port powinien mieć nazwę ttyUSBn, gdzie n wskazuje numer portu. Jeśli polecenie zawiera listę dmesg kilku portów USB, ten, który jest połączony z zazwyczaj ostatnim zgłaszanym jako dołączony. Na przykład w poniższym przykładzie należy użyć wartości ttyUSB4:

    ~$ dmesg | grep ttyUSB
    [  144.564350] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB0
    [  144.564768] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB1
    [  144.565118] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB2
    [  144.565593] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB3
    [  144.570429] usb 1-1.1.3: FTDI USB Serial Device converter now attached to ttyUSB4
    [  254.171871] ftdi_sio ttyUSB1: FTDI USB Serial Device converter now disconnected from ttyUSB1
    
  4. Uruchom program emulatora terminali i otwórz terminal 115200-8-N-1 do portu COM używanego przez adapter. Zapoznaj się z dokumentacją emulatora terminalu, aby dowiedzieć się, jak określić port i szybkość.

Włączanie tworzenia i debugowania

Aby można było utworzyć przykładową aplikację na urządzeniu Azure Sphere lub opracować dla niej nowe aplikacje, musisz włączyć tworzenie i debugowanie. Domyślnie urządzenia Usługi Azure Sphere są "zablokowane"; oznacza to, że nie zezwalają na aplikacje w trakcie opracowywania, które mają być ładowane z komputera, i nie zezwalają na debugowanie aplikacji. Przygotowanie urządzenia do debugowania usuwa to ograniczenie i ładuje oprogramowanie wymagane do debugowania i odblokowuje możliwości urządzenia.

Aby debugować rdzenie w czasie rzeczywistym, użyj polecenia az sphere device enable-development . To polecenie konfiguruje urządzenie do akceptowania aplikacji z komputera do debugowania i przypisuje urządzenie do grupy urządzeń deweloperów, która nie zezwala na aktualizacje aplikacji w chmurze.This command configures the device to accept applications from a PC for debugging and assigns the device to the development device group, which does not allow cloud application updates. Podczas tworzenia i debugowania aplikacji należy pozostawić urządzenie w tej grupie, aby aktualizacje aplikacji w chmurze nie zastępować aplikacji w trakcie opracowywania.

W systemie Windows musisz dodać --enable-rt-core-debugging parametr, który ładuje serwery debugowania i wymagane sterowniki dla każdego typu rdzenia na urządzeniu.

  1. Jeśli jeszcze tego nie zrobiono, zaloguj się do usługi Azure Sphere:

    az login
    
  2. Otwórz interfejs wiersza polecenia przy użyciu programu PowerShell lub wiersza polecenia systemu Windows z uprawnieniami administratora. Parametr --enable-rt-core-debugging wymaga uprawnień administratora, ponieważ instaluje sterowniki USB dla debugera.

  3. Wprowadź następujące polecenie:

    az sphere device enable-development --enable-rt-core-debugging  --catalog <CatalogName>  --resource-group <ResourceGroupName>
    
  4. Zamknij okno po zakończeniu wykonywania polecenia, ponieważ uprawnienia administratora nie są już wymagane. Najlepszym rozwiązaniem jest zawsze użycie najniższego uprawnienia, które może wykonać zadanie.

Jeśli polecenie az sphere device enable-development nie powiedzie się, zobacz Rozwiązywanie problemów z usługą Azure Sphere , aby uzyskać pomoc.

Tworzenie i uruchamianie aplikacji HelloWorld RTApp za pomocą programu Visual Studio

  1. Uruchom program Visual Studio. Wybierz pozycję Otwórz folder lokalny, przejdź do folderu, w którym został wyodrębniony pobrany plik Azure_Sphere___Hello_World.zip, a następnie wybierz folder HelloWorld_RTApp_MT3620_Baremetal.

  2. Jeśli nie używasz bazy danych RDB MT3620, zaktualizuj plik app_manifest.json i kod przykładowy, aby określić prawidłowy obiekt UART, na przykład ISU1.

  3. Jeśli generowanie klucza CMake nie uruchamia się automatycznie, wybierz plik CMakeLists.txt.

  4. W oknie Wyjścia programu Visual Studio dane wyjściowe CMake powinny zawierać komunikaty CMake generation started. i CMake generation finished..

  5. Wybierz pozycję Kompilacja>wszystko. Jeśli menu nie jest dostępne, otwórz Eksplorator rozwiązań, kliknij prawym przyciskiem myszy plik CMakeLists.txt i wybierz pozycję Konstruuj. Lokalizacja wyjściowa aplikacji HelloWorld_RTApp_MT3620_Baremetal jest wyświetlana w oknie Dane wyjściowe .

  6. W menu Wybierz element startowy wybierz pozycję HelloWorld_RTApp_MT3620_Baremetal (RTCore).

  7. Naciśnij klawisz F5 , aby wdrożyć aplikację.

  8. Emulator podłączonego terminalu powinien wyświetlać dane wyjściowe z programu HelloWorld_RTApp_MT3620_Baremetal. Program wysyła następujące wyrazy w interwałach jednosekundowych:

    Tick

    Tock

  9. Debuger służy do ustawiania punktów przerwania, sprawdzania zmiennych i wykonywania innych zadań debugowania.

Stwórz i uruchom aplikację HelloWorld RTApp z Visual Studio Code

  1. W Visual Studio Code otwórz folder HelloWorld_RTApp_MT3620_BareMetal w folderze, w którym pobrano pobrany plik Azure_Sphere___Hello_World.zip. Jeśli zostanie wyświetlony monit o wybranie zestawu, wybierz pozycję Nie używaj zestawu.

  2. Jeśli nie używasz sprzętu RDB MT3620, zaktualizuj plik app_manifest.json i kod przykładowy, aby określić poprawny obiekt UART, na przykład ISU1.

  3. Naciśnij klawisz F5 , aby uruchomić debuger. Jeśli projekt nie został wcześniej utworzony lub wymagane są zmiany plików i ich odbudowanie, Visual Studio Code utworze projekt przed rozpoczęciem debugowania.

  4. W oknie danych wyjściowych usługi Azure Sphere powinien być wyświetlany komunikat "Wdrażanie obrazu..." następnie ścieżki do zestawu SDK i kompilatora.

  5. Emulator podłączonego terminalu powinien wyświetlać dane wyjściowe z programu HelloWorld_RTApp_MT3620_Baremetal. Program wysyła następujące wyrazy w interwałach jednosekundowych:

    Tick

    Tock

  6. Za pomocą funkcji debugowania Visual Studio Code możesz ustawiać punkty przerwania, sprawdzać zmienne i wykonywać inne zadania debugowania.

Rozwiązywanie problemów

Aplikacja może rozpocząć wykonywanie przed OpenOCD tworzy połączenie. W związku z tym punkty przerwania ustawione na początku kodu mogą zostać pominięte. Prostym obejściem tego problemu jest opóźnienie uruchamiania aplikacji do momentu nawiązania połączenia przez openOCD.

  1. Wstaw następujący kod na początku punktu wejścia aplikacji RTCoreMain. Spowoduje to, że aplikacja będzie wprowadzać i pozostać w while pętli, dopóki zmienna f nie zostanie ustawiona na wartość true.

     volatile bool f = false;
     while (!f) {
        // empty.
     }
    
  2. Naciśnij klawisz F5 , aby uruchomić aplikację z debugowaniem (F5), a następnie włamać się do wykonania.

  3. W okienku Debugowanie miejscowi zmień wartość f z zero na jedną.

  4. Przeprowadź kod w zwykły sposób.

Stwórz próbkę

  1. Otwórz interfejs wiersza polecenia przy użyciu programu PowerShell, wiersza polecenia systemu Windows lub powłoki poleceń systemu Linux. Przejdź do katalogu kompilacji projektu.

  2. W katalogu kompilacji projektu w wierszu polecenia uruchom program CMake z następującymi parametrami:

    cmake --preset <preset-name> <source-path>
    
    • --preset <preset-name>

      Wstępnie ustawiona nazwa konfiguracji kompilacji zdefiniowana w CMakePresets.json.

    • --build <cmake-path>

      Katalog binarny zawierający pamięć podręczną CMake. Jeśli na przykład uruchomisz narzędzie CMake na przykładzie usługi Azure Sphere, polecenie kompilacji będzie miało wartość cmake --build out/ARM-Debug.

    • <source-path>

      Ścieżka katalogu zawierającego pliki źródłowe dla przykładowej aplikacji. W tym przykładzie repozytorium próbek azure Sphere zostało pobrane do katalogu o nazwie AzSphere.

      Parametry klucza CMake są oddzielone spacjami. Znak kontynuacji wiersza (^ dla wiersza polecenia systemu Windows, \dla wiersza polecenia systemu Linux lub ' dla programu PowerShell) może być używany w celu zwiększenia czytelności, ale nie jest wymagany.

    W poniższych przykładach pokazano polecenia CMake dla funkcji RTApp. Tam, gdzie jest to wskazane, zamień <ścieżkę> pliku na ścieżkę instalacji narzędzia GNU Arm Embedded Toolchain w systemie.

    Wiersz polecenia systemu Windows

    cmake ^
    --preset "ARM-Debug" ^
    "C:\AzSphere\azure-sphere-samples\Samples\HelloWorld\HelloWorld_RTApp_MT3620_BareMetal"
    

    Windows PowerShell

    cmake `
    --preset "ARM-Debug" `
    "C:\AzSphere\azure-sphere-samples\Samples\HelloWorld\HelloWorld_RTApp_MT3620_BareMetal"
    
  3. Uruchom ninja, aby zbudować aplikację i utworzyć plik pakietu obrazów:

    ninja -C out/ARM-Debug
    

    Ninja umieszcza otrzymane pliki aplikacji i plików imagepackage w określonym katalogu.

    Możesz również wywołać ninja za pośrednictwem CMake za pomocą następującego polecenia:

    cmake --build out/<binary-dir>
    

    Ustaw <binary-dir> na katalog binarny, który zawiera pamięć podręczną CMake. Jeśli na przykład uruchomisz narzędzie CMake na przykładzie usługi Azure Sphere, polecenie kompilacji będzie miało wartość cmake --build out/ARM-Debug.

Podczas rozwiązywania problemów, zwłaszcza po wprowadzeniu jakichkolwiek zmian w poleceniach CMake, usuń całą kompilację i spróbuj ponownie.

Uruchom próbkę

  1. Usuń wszystkie aplikacje, które są już wdrożone na urządzeniu:

    az sphere device sideload delete
    
  2. Z katalogu projektu w wierszu polecenia załaduj pakiet obrazów utworzony przez ninja:

    az sphere device sideload deploy --image-package <path-to-imagepackage>
    

    Aplikacja zacznie działać wkrótce po jej załadowaniu. Na podłączonym emulatorze terminalu zostaną wyświetlone następujące elementy:

    Tick
    
    Tock
    
    Tick
    .
    .
    .
    
  3. Uzyskaj identyfikator składnika obrazu:

    az sphere image-package show --image-package <path-to-imagepackage>
    

    Polecenie zwróci wszystkie metadane pakietu obrazów. Identyfikator składnika aplikacji jest wyświetlany w sekcji Tożsamość dla typu obrazu aplikacji. Na przykład:

    ...
      "Identity": {
        "ComponentId": "<component-id>",
        "ImageId": "<image-id>",
        "ImageType": "Application"
      },
    ...
    

    Aby zatrzymać, uruchomić i uzyskać stan aplikacji, możesz użyć następujących poleceń:

    az sphere device app stop --component-id <component id>
    
    az sphere device app start --component-id <component id>
    
    az sphere device app show-status --component-id <component id>
    

Debugowanie próbki

  1. Zatrzymaj aplikację, jeśli jest uruchomiona.

    az sphere device app stop --component-id <component id>
    
  2. Uruchom ponownie aplikację do debugowania.

    az sphere device app start --debug-mode true  --component-id <component id>
    

    To polecenie zwraca rdzeń, na którym działa aplikacja.

    <component id>
    App state   : running
    Core        : Real-time 0
    
  3. Przejdź do folderu Openocd dla sysroot, za pomocą których aplikacja została utworzona. Sysroots są instalowane w folderze instalacji Azure Sphere SDK. Na przykład w systemie Windows folder jest domyślnie instalowany w systemie C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd Linux i w systemie Linux pod adresem /opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux.

  4. Uruchom openocd , jak pokazano w poniższym przykładzie. W przykładzie założono, że aplikacja jest uruchomiona na rdzeniu 0. Jeśli aplikacja działa na rdzeniu 1, zamień elementy docelowe io0 na "cele io1".

    openocd -f mt3620-rdb-ftdi.cfg -f mt3620-io0.cfg -c "gdb_memory_map disable" -c "gdb_breakpoint_override hard" -c init -c "targets io0" -c halt -c "targets"
    
  5. Przejdź do folderu zawierającego plik .out aplikacji i uruchom arm-none-eabi-gdb, który jest częścią GNU Arm Embedded Toolchain:

    Wiersz polecenia systemu Windows

    "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" HelloWorld_RTApp_MT3620_BareMetal.out
    

    Windows PowerShell

    & "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" HelloWorld_RTApp_MT3620_BareMetal.out
    
  6. Serwer OpenOCD zapewnia interfejs serwera GDB w systemie :4444. Ustaw cel debugowania.

    target remote :4444

  7. Teraz można uruchamiać polecenia gdb.

  8. Emulator podłączonego terminalu powinien wyświetlać dane wyjściowe aplikacji.

Korzystanie z aplikacji partnerów

Po załadowaniu aplikacji na urządzenie Azure Sphere narzędzia wdrażania Azure Sphere domyślnie usuwają wszystkie istniejące aplikacje. Aby zapobiec temu, gdy tworzysz aplikacje, które komunikują się ze sobą, musisz oznaczyć aplikacje jako partnerów. Po wdrożeniu jednej z aplikacji jej partnerzy nie zostaną usunięci. Aby uzyskać szczegółowe informacje, zobacz Oznaczanie aplikacji jako partnerów .

Następne kroki