建置支援即時的應用程式

您可以使用 Visual Studio、Visual Studio Code 或 CLI) (命令行,在 RTApps (開發和偵錯具有即時功能的應用程式,) 的方式與高階應用程式大致相同。

先決條件

啟用開發與偵錯

您必須先啟用開發和偵錯,才能在 Azure 球體裝置上建立範例應用程式或開發新的應用程式。 根據預設,Azure 球體裝置會被「鎖定」;也就是說,他們不允許從計算機載入開發中的應用程式,也不允許偵錯應用程式。 準備裝置進行偵錯會移除此限制,並載入偵錯和解除鎖定裝置功能 所需的軟體。

若要偵錯即時核心,請使用 az 球體裝置啟用開發 命令。 此命令會將裝置設定為接受來自計算機的應用程式進行偵錯,並將裝置指派給「開發裝置」群組,而此群組不允許雲端應用程式更新。 在應用程式開發和偵錯期間,您應將裝置留在此群組中,讓雲端應用程式更新不會覆寫開發中的應用程式。

在 Windows 上,您必須新增 --enable-rt-core-debugging 參數,將偵錯伺服器和每種核心類型的必要驅動程式載入裝置上。

  1. 如果您尚未登入 Azure 球體,請登入:

    az login
    
  2. 使用 PowerShell 或具有系統管理員許可權的 Windows 命令提示字元開啟命令行介面。 參數 --enable-rt-core-debugging 需要系統管理員許可權,因為它會安裝偵錯程式的USB驅動程式。

  3. 輸入下列命令:

    az sphere device enable-development --enable-rt-core-debugging  --catalog <CatalogName>  --resource-group <ResourceGroupName>
    
  4. 由於不再需要系統管理員許可權,所以在命令完成後關閉視窗。 最佳作法是一律使用能完成工作的最低許可權。

如果 az 球體裝置啟用開發 命令失敗,請參閱 Azure 球體問題的疑難解答 以取得協助。

啟用開發與偵錯

您必須先啟用開發和偵錯,才能在 Azure 球體裝置上建立範例應用程式或開發新的應用程式。 根據預設,Azure 球體裝置會被「鎖定」;也就是說,他們不允許從計算機載入開發中的應用程式,也不允許偵錯應用程式。 準備裝置進行偵錯會移除此限制,並載入偵錯和解除鎖定裝置功能所需的軟體,如 裝置功能和通訊中所述。

若要偵錯即時核心,請使用 az 球體裝置啟用開發 命令。 此命令會將裝置設定為接受來自計算機的應用程式進行偵錯,並將裝置指派給「開發裝置」群組,而此群組不允許雲端應用程式更新。 在應用程式開發和偵錯期間,您應將裝置留在此群組中,讓雲端應用程式更新不會覆寫開發中的應用程式。

在 Windows 上,您必須新增 --enable-rt-core-debugging 參數,將偵錯伺服器和每種核心類型的必要驅動程式載入裝置上。

  1. 如果您尚未登入 Azure,請執行下列動作:

    az login
    
  2. 使用 PowerShell、Windows 命令提示字元或具有系統管理員許可權的 Linux 命令殼層開啟命令行介面。 參數 --enable-rt-core-debugging 需要系統管理員許可權,因為它會安裝偵錯程式的USB驅動程式。

  3. 輸入下列命令:

    az sphere device enable-development --enable-rt-core-debugging
    
  4. 由於不再需要系統管理員許可權,所以在命令完成後關閉視窗。 最佳作法是一律使用能完成工作的最低許可權。

如果 az 球體裝置啟用開發 命令失敗,並出現下列錯誤訊息,請參閱 疑難解答 Azure 球體問題 以取得協助。

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

使用 Visual Studio Code 建立 RTApp

若要建立 RTApp:

  1. 在 Visual Studio Code 中,開啟 Azure 球體樣本復HelloWorld_RTApp_MT3620_BareMetal中的HelloWorld_RTApp_MT3620_BareMetal資料夾。 如果系統提示您選取套件,請選擇 [不要使用套件]。

  2. F5 啟動調試程式。 如果專案先前尚未建立,或是需要檔案變更並重建,Visual Studio Code 會在偵錯開始之前建立專案。

  3. 連接的終端機模擬器應該會顯示應用程式的輸出。 程式會每隔一秒傳送下列文字:

    Tick

    Tock

    注意

    Visual Studio Code 提供 Intellisense,但不會在您修改 CMakeLists.txt 時自動更新。 您必須執行 [CMake:刪除快取] 和 [重新設定] 命令,才能重新整理 Intellisense。 您可以在左側列的 CMake 擴充功能檢視中找到 CMake 目標檢視。

使用 Visual Studio 建立 RTApp

若要建立 RTApp:

  1. 在 Visual Studio 中,選取 [檔案>CMake ],然後流覽至包含樣本的資料夾。

  2. 如果 CMake 產生不會自動啟動,請選取 CMakeLists.txt 檔案。

  3. 在 Visual Studio 中, 檢視>輸出>顯示輸出來源CMake 輸出應該會顯示訊息 CMake generation started.CMake generation finished.

  4. 在 [CMake] 功能表 (如果有) ,請選取 [ 全部建立]。 如果功能表不存在,請開啟 方案總管,以滑鼠右鍵按兩下 CMakeLists.txt 檔案,然後選取 [組建]。 Azure 球體應用程式的輸出位置會出現在 [ 輸出 ] 視窗中。

  5. F5 以部署應用程式。

  6. 連接的終端機模擬器應該會顯示應用程式的輸出。 程式會每隔一秒傳送下列文字:

    Tick

    Tock

    注意

    • Visual Studio 透過從 CMake 快取收集數據,為 Azure 球體 RTApps 提供 Intellisense。 每當 RTApp 中的 CMakeLists.txt 或CMakeSettings.json檔案變更時,Visual Studio 會更新快取。

    • 根據預設,Visual Studio 會使用 [資料夾] 檢視。 如果您偏好使用 CMake 專案的邏輯檢視,可以變更為 [CMake 目標] 檢視。 在 方案總管 中,選取資料夾切換圖示:

      在解決方案和資料夾檢視之間切換

      從下拉功能表中,選取 [CMake 目標檢視]

    • 應用程式可能會在 OpenOCD 連線之前開始執行。 因此,在程式代碼早期設定的斷點可能會遺漏。 一個簡單的因應措施是延後應用程式的啟動,直到 OpenOCD 連線。

      1. 在應用程式進入點 RTCoreMain 的開頭插入下列程式代碼。 這會導致應用程式進入並保持迴圈, while 直到變數 f 設為 True 為止

          volatile bool f = false;
          while (!f) {
            // empty.
          }
        
      2. F5 以啟動具有偵錯功能的應用程式,然後中斷執行。

      3. 在 [ 本地 人偵錯] 窗格中,將值 f 從零變更為一。

      4. 以正常方式逐步執行程序代碼。

使用 CLI 建置 RTApp

後續指示假設您使用的是 CMake。 如果您想要在命令行上建置而不使用 CMake,您可以查看 AzureSphereToolchainBase.cmake 和 AzureSphereCoreToolchain.cmake 檔案,以判斷適當的編譯程式和鏈接器選項,這些檔案是隨 Azure 球體 SDK 一起安裝。

  1. 使用 PowerShell、Windows 命令提示字元或 Linux 命令殼層開啟命令行介面。 流覽至您的專案組建目錄。

  2. 在專案組建目錄的命令提示字元中,使用下列參數執行 CMake:

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

      組建設定預設名稱,如 CMakePresets.json 中所定義。

    • --build <cmake-path>

      包含 CMake 快取的二進位目錄。 例如,如果您在 Azure 球體樣本上執行 CMake,則組建命令會是 cmake --build out/ARM-Debug

    • <source-path>

      包含範例應用程式之來源檔案的目錄路徑。 在範例中,Azure 球體樣本存放庫已下載到名為 AzSphere 的目錄。

      CMake 參數會以空格分隔。 Windows 命令行的線條延續字元 (^、 \ for Linux 命令行或 ' for PowerShell) 可用於可讀性,但並非必要。

    下列範例顯示 HelloWorld RTApp 的 CMake 命令:

    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. 執行忍者以建立應用程式並建立影像套件檔案:

    ninja -C out/ARM-Debug
    

    忍者會將產生的應用程式和 .imagepackage 檔案放在指定的目錄中。

    您也可以使用下列命令透過 CMake 叫用忍者:

    cmake --build out/<binary-dir>
    

    設定 <binary-dir> 為包含 CMake 快取的二進位目錄。 例如,如果您在 Azure 球體樣本上執行 CMake,則組建命令會是 cmake --build out/ARM-Debug

  4. 刪除已部署到裝置的任何應用程式:

    az sphere device sideload delete
    
  5. 部署忍者建立的影像套件:

    az sphere device sideload deploy --image-package <package-name>
    
  6. 取得影像的元件識別碼:

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

    命令會傳回圖像套件的所有元數據。 應用程式的元件識別碼會出現在應用程式圖像類型的 [身分識別] 區段中。 例如:

    ...
      "Identity": {
        "ComponentId": "<component-id>",
        "ImageId": "<image-id>",
        "ImageType": "Application"
      },
    ...
    
  7. 判斷您的應用程式正在執行哪個核心。

    根據預設,RTApp 會部署到裝置上第一個可用的即時核心;您目前無法指定特定核心。 若要找出應用程式執行的核心,請使用 az 球形裝置應用程式 命令來停止,然後重新啟動應用程式。 在命令中提供應用程式的元件標識碼。 例如:

    az sphere device app stop --component-id <component id>
    <component id>: App state: stopped
    
    az sphere device app start --component-id <component id>
    <component id>
    App state: running
    Core     : Real-time 0
    
  8. 連接的終端機模擬器應該會顯示應用程式的輸出。 程式會每隔一秒傳送下列文字:

    Tick

    Tock

來自 RTApp 的記錄輸出

MT3620 上的每個即時核心都有專為記錄輸出所用的專用UART。 即時核心也可以存取 ISU UART。 MT3620 RDB 只會公開 TX 圖釘,您可以用來顯示應用程式的記錄輸出。 其他硬體可能會以不同的方式公開,或完全不會公開。 若要查看記錄輸出,請設定您的硬體以顯示此輸出,如 快速入門中所述。 專用 UART 不需要 Uart 應用程式指令清單需求,但不應用於 RTApp 記錄輸出以外的用途。

與合作夥伴應用程式一起開發

當您將應用程式載入 Azure 球體裝置時,Azure 球體部署工具預設會刪除所有現有的應用程式。 若要避免在您開發彼此通訊的應用程式時發生這種情況,您必須將應用程式標示為 合作夥伴。 當您部署其中一個應用程式時,不會刪除其合作夥伴。 如需詳細資訊,請參閱 將應用程式標示為合作夥伴

故障排除

如果您遇到問題,請參閱 疑難解答支持即時的應用程式

其他資源

針對 MT3620 晶片上的 M4 即時核心目標之 RTApps 的其他驅動程式和範例,可從 Azure 球體合作夥伴的 GitHub 上取得: