Udostępnij za pośrednictwem


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ą).

Za pomocą programu Visual Studio, Visual Studio Code lub wiersza polecenia (interfejs wiersza polecenia) można tworzyć i debugować aplikacje obsługujące czas rzeczywisty (RTApps) w taki sam sposób jak aplikacje wysokiego poziomu.

Wymagania wstępne

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.

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, wiersza polecenia systemu Windows lub powłoki poleceń systemu Linux 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 kończy się niepowodzeniem z następującym komunikatem o błędzie, zobacz Rozwiązywanie problemów z usługą Azure Sphere, aby uzyskać pomoc.

error: The device did not accept the device capability configuration. Please check the Azure Sphere OS on your device is up-to-date using 'azsphere device show-deployment-status'.

Tworzenie aplikacji RTApp przy użyciu programu Visual Studio Code

Aby utworzyć aplikację RTApp:

  1. W programie Visual Studio Code otwórz folder HelloWorld_RTApp_MT3620_BareMetal w sklonu repozytorium przykładów usługi Azure Sphere. Jeśli zostanie wyświetlony monit o wybranie zestawu, wybierz pozycję "Nie używaj zestawu".

  2. 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.

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

    Tick

    Tock

    Uwaga

    Program Visual Studio Code udostępnia funkcję IntelliSense, ale nie zostanie automatycznie zaktualizowany podczas modyfikowania CMakeLists.txt. Aby odświeżyć funkcję IntelliSense, należy uruchomić polecenie CMake: Delete Cache and Reconfigure . Widok obiektów docelowych narzędzia CMake można znaleźć w widoku rozszerzenia CMake na pasku po lewej stronie.

Tworzenie aplikacji RTApp przy użyciu programu Visual Studio

Aby utworzyć aplikację RTApp:

  1. W programie Visual Studio wybierz pozycję Plik>CMake i przejdź do folderu zawierającego przykład.

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

  3. W programie Visual Studio wyświetl>dane wyjściowe Pokaż dane wyjściowe>z: dane wyjściowe narzędzia CMake powinny wyświetlać komunikaty i CMake generation started.CMake generation finished.

  4. W menu narzędzia CMake (jeśli istnieje) wybierz pozycję Skompiluj 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 usługi Azure Sphere zostanie wyświetlona w oknie Dane wyjściowe .

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

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

    Tick

    Tock

    Uwaga

    • Program Visual Studio udostępnia funkcję IntelliSense dla usługi Azure Sphere RTApps, zbierając dane z pamięci podręcznej CMake. Program Visual Studio aktualizuje pamięć podręczną za każdym razem, gdy plik CMakeLists.txt lub CMakeSettings.json w aplikacji RTApp ulegnie zmianie.

    • Domyślnie program Visual Studio używa widoku Folder. Jeśli wolisz widok logiczny projektu CMake, możesz przejść do widoku Cele narzędzia CMake. W Eksplorator rozwiązań wybierz ikonę przełącznika folderu:

      Przełączanie między widokami rozwiązania i folderu

      Z menu rozwijanego wybierz pozycję CMake Targets View (Widok obiektów docelowych narzędzia CMake).

    • 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ę przy użyciu debugowania, 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.

Kompilowanie aplikacji RTApp przy użyciu interfejsu wiersza polecenia

W poniższych instrukcjach założono, że używasz narzędzia CMake. Jeśli wolisz budować w wierszu polecenia bez użycia narzędzia CMake, możesz określić odpowiednie opcje kompilatora i konsolidatora, przeglądając pliki AzureSphereToolchainBase.cmake i AzureSphereRTCoreToolchain.cmake, które są instalowane przy użyciu zestawu Azure Sphere SDK.

  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 HelloWorld RTApp:

    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.

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

    azsphere device sideload delete
    
  5. Wdróż pakiet obrazów utworzony przez ninja:

    azsphere device sideload deploy --image-package <package-name>
    
  6. 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>
    
  7. Określ, na którym rdzeniu działa aplikacja.

    Domyślnie aplikacja RTApp jest wdrażana na pierwszym dostępnym rdzeniu czasu rzeczywistego na urządzeniu; obecnie nie można określić określonego rdzenia. Aby dowiedzieć się, na którym rdzeniu działa aplikacja, użyj polecenia azsphere device app , aby zatrzymać, a następnie ponownie uruchomić aplikację. Podaj identyfikator składnika dla aplikacji w poleceniach . Na przykład:

    azsphere device app stop --component-id <component id>
    <component id>: App state: stopped
    
    azsphere device app start --component-id <component id>
    <component id>
    App state: running
    Core     : Real-time 0
    
  8. Połączony emulator terminalu powinien wyświetlać dane wyjściowe z aplikacji. Program wysyła następujące wyrazy w odstępach jednej sekundy:

    Tick

    Tock

Dane wyjściowe dziennika z aplikacji RTApp

Każdy rdzeń czasu rzeczywistego w mt3620 ma dedykowany UART przeznaczony do rejestrowania danych wyjściowych. Rdzenie czasu rzeczywistego mogą również uzyskiwać dostęp do jednostek UART isu. Baza danych RDB MT3620 uwidacznia tylko numer PIN TX, którego można użyć do wyświetlania danych wyjściowych dziennika z aplikacji. Inny sprzęt może uwidocznić to inaczej lub w ogóle nie. Aby wyświetlić dane wyjściowe dziennika, skonfiguruj sprzęt, aby wyświetlić te dane wyjściowe zgodnie z opisem w przewodniku Szybki start. Dedykowany element UART nie wymaga wymagania manifestu Uart aplikacji, ale nie powinien być używany do celów innych niż rejestrowanie danych wyjściowych dla aplikacji RTApp.

Programowanie przy użyciu 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 .

Rozwiązywanie problemów

Jeśli wystąpią problemy, zobacz Rozwiązywanie problemów z aplikacjami obsługującymi czas rzeczywisty.

Dodatkowe zasoby

Dodatkowe sterowniki i przykłady dla aplikacji RTApps, które są przeznaczone dla rdzeni czasu rzeczywistego M4 na mikroukładie MT3620, są dostępne w witrynie GitHub od partnerów usługi Azure Sphere: