Udostępnij za pośrednictwem


Samouczek: tworzenie aplikacji obsługującej czas rzeczywisty

Ważne

Jest to dokumentacja usługi Azure Sphere (starsza wersja). Usługa Azure Sphere (starsza wersja) zostanie wycofana 27 września 2027 r., a użytkownicy muszą przeprowadzić migrację do usługi Azure Sphere (zintegrowanej) do tej pory. Użyj selektora wersji znajdującego się powyżej spisu treści, aby wyświetlić dokumentację usługi Azure Sphere (zintegrowaną).

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

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Pobieranie przykładowej aplikacji
  • Instalowanie łańcucha narzędzi ARM GNU
  • Konfigurowanie sprzętu do wyświetlania danych wyjściowych
  • Włączanie programowania i debugowania
  • Uruchamianie emulatora terminalu w celu wyświetlenia danych wyjściowych
  • Kompilowanie, uruchamianie i debugowanie aplikacji obsługującej czas rzeczywisty

Ważne

W tych instrukcjach przyjęto założenie, że używasz sprzętu zgodnego ze sprzętem tablicy referencyjnej MT3620 (RDB), takim jak zestaw deweloperski MT3620 z witryny Seeed Studios. Jeśli używasz innego sprzętu usługi Azure Sphere, zapoznaj się z dokumentacją producenta, aby dowiedzieć się, czy uART jest uwidoczniony i jak uzyskać do niego dostęp. Może być konieczne skonfigurowanie sprzętu do wyświetlania danych wyjściowych w inny sposób i zaktualizowanie przykładowego kodu oraz pola "Uarts" pliku app_manifest.json w celu użycia innego schematu UART.

Wymagania wstępne

Pobieranie przykładowej aplikacji

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

  1. Wskaż przeglądarkę w przeglądarce Microsoft Samples Browser.
  2. Wpisz "Azure Sphere" w polu Wyszukiwania.
  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.

Zainstaluj osadzony łańcuch narzędzi GNU dla procesorów ARM

Możesz pobrać i zainstalować osadzony łańcuch narzędzi GNU Arm z witryny internetowej dla deweloperów arm. Możesz też użyć artefaktów vcpkg do automatycznego instalowania i konfigurowania środowiska deweloperskiego.

  • Visual Studio 2022: Jeśli używasz programu Visual Studio 2022, zainstaluj osadzony łańcuch narzędzi GNU ARM (arm-none-eabi) z witryny internetowej dla deweloperów arm.
  • Visual Studio 2019: Łańcuch narzędzi jest automatycznie instalowany z rozszerzeniem usługi Azure Sphere dla programu Visual Studio w programie Visual Studio 2019. Jeśli używasz programu Visual Studio 2019, przejdź do sekcji Konfigurowanie sprzętu do wyświetlania danych wyjściowych. Jednak w przypadku ręcznego zainstalowania osadzonego łańcucha narzędzi GNU arm program Visual Studio będzie używać zainstalowanej wersji.

Aby zainstalować łańcuch narzędzi, na stronie dla deweloperów arm znajdź osadzony łańcuch narzędzi GNU ARM (arm-none-eabi), który zawiera kompilator procesora ARM Cortex-M4. Postępuj zgodnie z instrukcjami, aby pobrać i zainstalować kompilator dla platformy systemu operacyjnego.

Domyślnie program Visual Studio Code wyszukuje łańcuch narzędzi i powinien znaleźć zainstalowaną wersję. Jeśli wystąpią problemy z kompilacją związane z łańcuchem narzędzi, wprowadź ścieżkę w następujący sposób:

  1. Wybierz pozycję Rozszerzenia>ustawień>preferencji>plików>Azure Sphere.
  2. Wprowadź ścieżkę instalacji osadzonego łańcucha narzędzi GNU w ustawieniu Azure Sphere: Ścieżka Arm Gnu.

Aby zainstalować łańcuch narzędzi, na stronie dla deweloperów arm znajdź osadzony łańcuch narzędzi GNU ARM (arm-none-eabi), który zawiera kompilator 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ń czasu rzeczywistego obsługuje moduł UART tylko tx. Aplikacja RTApps może użyć tego UART do wysyłania danych wyjściowych dziennika z urządzenia. Podczas tworzenia i debugowania aplikacji zazwyczaj potrzebny jest sposób odczytywania i wyświetlania danych wyjściowych. W przykładzie HelloWorld_RTApp_MT3620_BareMetal pokazano, jak aplikacja może zapisywać dane w usłudze UART.

Użyj adaptera USB-to-serial, takiego jak FTDI Friend, aby podłączyć UART na rdzeniu czasu rzeczywistego do portu USB na maszynie. Do wyświetlenia danych wyjściowych będzie również potrzebny emulator terminalu do nawiązania połączenia szeregowego z ustawieniami terminalu 115200-8-N-1 (115200 bps, 8 bitów, bez bitów parzystości, jeden bit zatrzymania).

Aby skonfigurować sprzęt do wyświetlania danych wyjściowych z aplikacji RTApp, wykonaj poniższe kroki. Należy zapoznać się z dokumentacją producenta sprzętu, aby określić lokalizacje pinezek. Jeśli używasz sprzętu, który jest zgodny z referencyjnym projektem płyty (RDB) MT3620, takiego jak zestaw deweloperski MT3620 firmy Seeed Studios, to użycie nagłówków interfejsu RDB może pomóc w ustaleniu lokalizacji pinezek.

  1. Połącz złącze GND na adapterze z portu USB na port szeregowy ze złączem GND w zestawie deweloperskim. Na sprzęcie RDB MT3620 złącze GND ma nagłówek 3, pinezka — 2.
  2. Połącz złącze RX na adapterze z portu USBna port szeregowy ze złączem IOM4-0 TX w zestawie deweloperskim. Na sprzęcie RDB MT3620 złącze IOM4-0 TX ma nagłówek 3, pinezka — 6.
  3. Podłącz adapter USB-szeregowy do wolnego portu USB na maszynie dewelopera i określ, z którym portem jest podłączone urządzenie szeregowe. W systemie Windows uruchom Menedżer urządzeń, wybierz pozycję Wyświetl>urządzenia według kontenera i wyszukaj ciąg "USB UART". Na przykład FT232R USB UART wskazuje adapter FTDI Friend.
  4. Uruchom program emulatora terminalu 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ń czasu rzeczywistego obsługuje moduł UART tylko tx. Aplikacja RTApps może użyć tego UART do wysyłania danych wyjściowych dziennika z urządzenia. Podczas tworzenia i debugowania aplikacji zazwyczaj potrzebny jest sposób odczytywania i wyświetlania danych wyjściowych. W przykładzie HelloWorld_RTApp_MT3620_BareMetal pokazano, jak aplikacja może zapisywać dane w usłudze UART.

Użyj adaptera USB-to-serial, takiego jak FTDI Friend, aby podłączyć UART na rdzeniu czasu rzeczywistego do portu USB na maszynie. Do wyświetlenia danych wyjściowych będzie również potrzebny emulator terminalu do nawiązania połączenia szeregowego z ustawieniami terminalu 115200-8-N-1 (115200 bps, 8 bitów, bez bitów parzystości, jeden bit zatrzymania).

Aby skonfigurować sprzęt do wyświetlania danych wyjściowych z aplikacji RTApp, wykonaj poniższe kroki. Należy zapoznać się z dokumentacją producenta sprzętu, aby określić lokalizacje pinezek. Jeśli używasz sprzętu, który jest zgodny z referencyjnym projektem płyty (RDB) MT3620, takiego jak zestaw deweloperski MT3620 firmy Seeed Studios, to użycie nagłówków interfejsu RDB może pomóc w ustaleniu lokalizacji pinezek.

  1. Połącz złącze GND na adapterze z portu USB na port szeregowy ze złączem GND w zestawie deweloperskim. Na sprzęcie RDB MT3620 złącze GND ma nagłówek 3, pinezka — 2.

  2. Połącz złącze RX na adapterze z portu USBna port szeregowy ze złączem IOM4-0 TX w zestawie deweloperskim. Na sprzęcie RDB MT3620 złącze IOM4-0 TX ma nagłówek 3, pinezka — 6.

  3. Podłącz adapter USB-szeregowy do wolnego portu USB na maszynie dewelopera i określ, z którym portem jest podłączone urządzenie szeregowe.

    • W systemie Windows uruchom Menedżer urządzeń, wybierz pozycję Wyświetl>urządzenia według kontenera i wyszukaj ciąg "USB UART". Na przykład FT232R USB UART wskazuje adapter 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 dmesg wyświetla kilka portów USB, ten, który jest podłączony do typowego ostatniego zgłoszonego jako dołączony. Na przykład w następujących celach należy użyć polecenia 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 terminalu 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 programowania i debugowania

Aby można było utworzyć przykładową aplikację na urządzeniu usługi Azure Sphere lub utworzyć dla niej nowe aplikacje, musisz włączyć programowanie i debugowanie. Domyślnie urządzenia usługi Azure Sphere są "zablokowane"; oznacza to, że nie zezwalają na ładowanie aplikacji z komputera i nie zezwalają na debugowanie aplikacji. Przygotowanie urządzenia do debugowania powoduje usunięcie tego ograniczenia i załadowanie oprogramowania wymaganego do debugowania i odblokowania możliwości urządzenia zgodnie z opisem w temacie Możliwości i komunikacja urządzenia.

Aby debugować rdzenie czasu rzeczywistego, użyj polecenia azsphere device enable-development. To polecenie umożliwia skonfigurowanie urządzenia do akceptowania aplikacji z komputera na potrzeby debugowania i przypisywania urządzenia do grupy urządzeń deweloperskich, która nie zezwala na aktualizacje aplikacji w chmurze. Podczas tworzenia i debugowania aplikacji należy pozostawić urządzenie w tej grupie, aby aktualizacje aplikacji w chmurze nie zastępowały aplikacji w trakcie programowania.

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

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

    azsphere 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. Podaj następujące polecenie:

    azsphere device enable-development --enable-rt-core-debugging
    
  4. Zamknij okno po zakończeniu polecenia, ponieważ uprawnienia administratora nie są już wymagane. Najlepszym rozwiązaniem jest zawsze użycie najniższych uprawnień, które mogą wykonać zadanie.

Jeśli polecenie azsphere device enable-development zakończy się niepowodzeniem, zobacz Rozwiązywanie problemów z usługą Azure Sphere, aby uzyskać pomoc.

Kompilowanie 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 wyodrębniono 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 przykładowy kod, aby określić poprawny kod UART, na przykład ISU1.

  3. Jeśli generowanie narzędzia CMake nie zostanie uruchomione automatycznie, wybierz plik CMakeLists.txt.

  4. W oknie Dane wyjściowe programu Visual Studio dane wyjściowe narzędzia CMake powinny zawierać komunikaty CMake generation started. iCMake generation finished.

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

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

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

  8. Połączony emulator terminalu powinien wyświetlać dane wyjściowe z programu HelloWorld_RTApp_MT3620_Baremetal. Program wysyła następujące wyrazy w odstępach jednej sekundy:

    Tick

    Tock

  9. Użyj debugera, aby ustawić punkty przerwania, sprawdzić zmienne i wypróbować inne zadania debugowania.

Kompilowanie i uruchamianie aplikacji HelloWorld RTApp za pomocą programu Visual Studio Code

  1. W programie Visual Studio Code otwórz folder HelloWorld_RTApp_MT3620_BareMetal w folderze, w którym wyodrębniono 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 korzystasz ze sprzętu RDB MT3620, zaktualizuj plik app_manifest.json i przykładowy kod, aby określić poprawny moduł UART, na przykład ISU1.

  3. Naciśnij F5, aby uruchomić debuger. Jeśli projekt nie został wcześniej skompilowany lub jeśli pliki uległy zmianie i ponowne kompilowanie jest wymagane, program Visual Studio Code skompiluje projekt przed rozpoczęciem debugowania.

  4. W oknie danych wyjściowych usługi Azure Sphere powinna zostać wyświetlona wartość „Trwa wdrażanie obrazu...” ze ścieżkami do zestawu SDK i kompilatora.

  5. Połączony emulator terminalu powinien wyświetlać dane wyjściowe z programu HelloWorld_RTApp_MT3620_Baremetal. Program wysyła następujące wyrazy w odstępach jednej sekundy:

    Tick

    Tock

  6. Użyj funkcji debugowania programu Visual Studio Code, aby ustawić punkty przerwania, sprawdzić zmienne i wypróbować inne zadania debugowania.

Rozwiązywanie problemów

Aplikacja może rozpocząć wykonywanie, zanim usługa OpenOCD nawiązuje 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 z usługą OpenOCD.

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

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

  3. W okienku debugowania Lokalne zmień wartość f z zera na jedną.

  4. Wykonaj kroki kodu w zwykły sposób.

Tworzenie przykładu

  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 narzędzie CMake z następującymi parametrami:

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

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

    • --build <cmake-path>

      Katalog binarny zawierający pamięć podręczną CMake. Jeśli na przykład uruchomisz narzędzie CMake w usłudze Azure Sphere, polecenie kompilacji będzie następujące: cmake --build out/ARM-Debug.

    • <source-path>

      Ścieżka katalogu zawierającego pliki źródłowe przykładowej aplikacji. W tym przykładzie repozytorium przykładów usługi Azure Sphere zostało pobrane do katalogu o nazwie AzSphere.

      Parametry narzędzia 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 do odczytu, ale nie jest wymagany.

    W poniższych przykładach przedstawiono polecenia narzędzia CMake dla aplikacji RTApp. W przypadku wskazania zastąp <ścieżkę pliku ścieżką> instalacji dla osadzonego łańcucha narzędzi GNU Arm 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 narzędzie Ninja, aby skompilować aplikację i utworzyć plik pakietu obrazu:

    ninja -C out/ARM-Debug
    

    Ninja umieszcza wynikową aplikację i pliki imagepackage w określonym katalogu.

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

    cmake --build out/<binary-dir>
    

    Ustaw <binary-dir> na katalog binarny zawierający pamięć podręczną CMake. Jeśli na przykład uruchomisz narzędzie CMake w usłudze Azure Sphere, polecenie kompilacji będzie następujące: cmake --build out/ARM-Debug.

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

Uruchamianie aplikacji przykładowej

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

    azsphere device sideload delete
    
  2. Z katalogu projektu w wierszu polecenia załaduj pakiet obrazu utworzony przez ninja:

    azsphere device sideload deploy --image-package <path-to-imagepackage>
    
  3. Pobierz identyfikator składnika dla obrazu:

    azsphere image-package show --image-package <path-to-imagepackage>
    

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

    Image package metadata:
    Section: Identity
    Image Type:           Application
    Component ID:         <component id>
    Image ID:             <image id>
    

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

    azsphere device app stop --component-id <component id>
    
    azsphere device app start --component-id <component id>
    
    azsphere device app show-status --component-id <component id>
    

Debugowanie przykładu

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

    azsphere device app stop --component-id <component id>
    
  2. Uruchom ponownie aplikację na potrzeby debugowania.

    azsphere device app start --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 folderu sysroot, za pomocą którego utworzono aplikację. Katalogi sysroot są instalowane w folderze instalacyjnym zestawu SDK usługi Azure Sphere. Na przykład w systemie Windows folder jest instalowany domyślnie w folderze C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd i w systemie Linux pod adresem /opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux.

  4. Uruchom polecenie , openocd jak pokazano w poniższym przykładzie. W przykładzie założono, że aplikacja działa na rdzeniu 0. Jeśli aplikacja jest uruchomiona na rdzeniu 1, zastąp ciąg "targets io0" ciągiem "targets 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-gdbplik , który jest częścią osadzonego łańcucha narzędzi GNU Arm:

    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 udostępnia interfejs serwera GDB w systemie :4444. Ustaw element docelowy na potrzeby debugowania.

    target remote :4444

  7. Teraz można uruchamiać polecenia gdb.

  8. Połączony emulator terminalu powinien wyświetlać dane wyjściowe z aplikacji.

Korzystanie z aplikacji partnerskich

Podczas ładowania aplikacji na urządzenie usługi Azure Sphere narzędzia wdrażania usługi Azure Sphere domyślnie usuwają wszystkie istniejące aplikacje. Aby zapobiec temu podczas tworzenia aplikacji komunikujących się ze sobą, należy 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