共用方式為


教學課程:建置即時可用的應用程式

重要

這是 Azure Sphere (舊版) 檔。 Azure Sphere(舊版)將於 2027 年 9 月 27 日淘汰,且使用者此時必須移轉至 Azure Sphere(整合式)。 使用位於 TOC 上方的版本選取器來檢視 Azure Sphere (整合式) 檔。

本教學課程示範如何在 Azure Sphere 裝置上建置即時核心的範例應用程式。 如需即時可用的應用程式的基本資訊,請參閱 Azure Sphere 應用程式 概觀。

在本教學課程中,您會了解如何:

  • 下載範例應用程式
  • 安裝 GNU Arm 工具鏈
  • 設定硬體以顯示輸出
  • 啟用開發和偵錯
  • 啟動終端機模擬器以檢視輸出
  • 建置、執行及偵錯即時可用的應用程式

重要

這些指示假設您使用的是遵循 MT3620 參考板設計 (RDB) 硬體的硬體,例如 Seeed Studios 中的 MT3620 開發工具包。 如果您使用不同的 Azure Sphere 硬體,請參閱製造商的檔,以瞭解 UART 是否公開,以及如何存取它。 您可能需要 設定硬體以不同的方式顯示輸出 ,並更新app_manifest.json檔案的範例程式代碼和 「Uarts」 字段,以使用不同的 UART。

必要條件

下載範例應用程式

您可以下載 HelloWorld 應用程式,如下所示:

  1. 將瀏覽器指向 Microsoft範例瀏覽器
  2. 在 [搜尋] 方塊中輸入 “Azure Sphere”。
  3. 從搜尋結果中選取 [Azure Sphere - Hello World ]。
  4. 選取 [ 下載 ZIP]。
  5. 開啟下載的檔案並解壓縮至本機目錄。

安裝適 GNU Arm 內嵌式工具鏈

您可以從 Arm 開發人員網站下載 並安裝 GNU Arm Embedded Toolchain。 或者,您可以使用 vcpkg 成品 來自動安裝及設定開發環境。

  • Visual Studio 2022:如果您使用 Visual Studio 2022,請從 Arm 開發人員網站安裝 GNU Arm Embedded Toolchain (arm-none-eabi)。
  • Visual Studio 2019:工具鏈會自動與 Visual Studio 2019 上的適用於 Visual Studio 的 Azure Sphere 延伸模組一起安裝。 如果您使用 Visual Studio 2019,請繼續設定 硬體以顯示輸出。 不過,如果您手動安裝 GNU Arm Embedded Toolchain,Visual Studio 將會使用您安裝的版本。

若要安裝工具鏈,請在 Arm 開發人員網站上尋找 GNU Arm Embedded Toolchain (arm-none-eabi),其中包含 ARM Cortex-M4 處理器的編譯程式。 請遵循該處的指示,下載並安裝操作系統平臺的編譯程式。

根據預設,Visual Studio Code 會搜尋工具鏈,並尋找您安裝的版本。 如果您遇到與工具鏈相關的建置問題,請輸入路徑,如下所示:

  1. 選取 [檔案>喜好設定>] [>擴充功能>] [Azure Sphere]。
  2. 在 Azure Sphere:Arm Gnu 路徑設定中 輸入 GNU Arm Embedded Toolchain 安裝路徑

若要安裝工具鏈,請在 Arm 開發人員網站上尋找 GNU Arm Embedded Toolchain (arm-none-eabi),其中包含 ARM Cortex-M4 處理器的編譯程式。 請遵循該處的指示,下載並安裝操作系統平臺的編譯程式。

設定硬體以顯示輸出

目前,每個即時核心都支援僅限 TX 的 UART。 RTApps 可以使用此 UART 從裝置傳送記錄輸出。 在應用程式開發和偵錯期間,您通常需要讀取和顯示輸出的方式。 HelloWorld_RTApp_MT3620_BareMetal範例示範應用程式如何寫入 UART。

使用 FTDI Friend 之類的 USB 對序列適配卡,將即時核心上的 UART 連接到電腦上的 USB 埠。 您也需要 終端機模擬器 來建立具有 115200-8-N-1 終端機設定的序列連線(115200 bps、8 位、無同位位、一個停止位)來顯示輸出。

若要設定硬體以顯示 RTApp 的輸出,請遵循下列步驟。 您必須參考硬體製造商的文件來判斷針腳位置。 如果您使用的硬體遵循 MT3620 參考開發板 (RDB) 設計,如 Seeed Studios 的 MT3620 開發套件,則查看 RDB 介面頭座有助於判斷針腳位置。

  1. 將 USB 轉序列配接器上 GND 連接到開發套件上的 GND。 在 MT3620 RDB 硬體上,GND 是頭座 3,針腳 2。
  2. 將 USB 轉序列配接器上的 RX 連接到開發套件上的 IOM4-0 TX。 在 MT3620 RDB 硬體上,IOM4-0 TX 是頭座 3,針腳 6。
  3. 將 USB 到序列適配卡連線到開發電腦上的免費 USB 埠,並判斷序列裝置所連接的埠。 在 Windows 上,啟動 裝置管理員,選取 [依容器檢視>裝置],然後尋找 [USB UART]。 例如,FT232R USB UART 表示 FTDI Friend 適配卡。
  4. 啟動終端機模擬器程式,並將 115200-8-N-1 終端機開啟至配接器所使用的 COM 連接埠。 請參閱終端機模擬器的檔,以瞭解如何指定埠和速度。

設定硬體以顯示輸出

目前,每個即時核心都支援僅限 TX 的 UART。 RTApps 可以使用此 UART 從裝置傳送記錄輸出。 在應用程式開發和偵錯期間,您通常需要讀取和顯示輸出的方式。 HelloWorld_RTApp_MT3620_BareMetal範例示範應用程式如何寫入 UART。

使用 FTDI Friend 之類的 USB 對序列適配卡,將即時核心上的 UART 連接到電腦上的 USB 埠。 您也需要 終端機模擬器 來建立具有 115200-8-N-1 終端機設定的序列連線(115200 bps、8 位、無同位位、一個停止位)來顯示輸出。

若要設定硬體以顯示 RTApp 的輸出,請遵循下列步驟。 您必須參考硬體製造商的文件來判斷針腳位置。 如果您使用的硬體遵循 MT3620 參考開發板 (RDB) 設計,如 Seeed Studios 的 MT3620 開發套件,則查看 RDB 介面頭座有助於判斷針腳位置。

  1. 將 USB 轉序列配接器上 GND 連接到開發套件上的 GND。 在 MT3620 RDB 硬體上,GND 是頭座 3,針腳 2。

  2. 將 USB 轉序列配接器上的 RX 連接到開發套件上的 IOM4-0 TX。 在 MT3620 RDB 硬體上,IOM4-0 TX 是頭座 3,針腳 6。

  3. 將 USB 到序列適配卡連線到開發電腦上的免費 USB 埠,並判斷序列裝置所連接的埠。

    • 在 Windows 上,啟動 裝置管理員,選取 [依容器檢視>裝置],然後尋找 [USB UART]。 例如,FT232R USB UART 表示 FTDI Friend 適配卡。

    • 在 Linux 上,輸入下列命令:

      dmesg | grep ttyUSB
      

      埠應該命名為 ttyUSBn,其中 n 表示埠號碼。 dmesg如果命令列出數個 USB 埠,則連接到 通常回報為附加的最後一個埠。 例如,在下列專案中,您會使用 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. 啟動終端機模擬器程式,並將 115200-8-N-1 終端機開啟至配接器所使用的 COM 連接埠。 請參閱終端機模擬器的檔,以瞭解如何指定埠和速度。

啟用開發和偵錯

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

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

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

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

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

  3. 輸入下列命令:

    azsphere device enable-development --enable-rt-core-debugging
    
  4. 關閉命令完成後的視窗,因為不再需要系統管理員許可權。 最佳做法是,您應該一律使用可完成工作的最低許可權。

如果 azsphere device enable-development 命令失敗,請參閱針對 Azure Sphere 問題進行疑難解答以取得協助。

使用 Visual Studio 建置並執行 HelloWorld RTApp 應用程式

  1. 啟動 Visual Studio。 選取 [開啟本機資料夾],流覽至您擷取下載Azure_Sphere___Hello_World.zip檔案的資料夾,然後選取HelloWorld_RTApp_MT3620_Baremetal資料夾。

  2. 如果您不是使用 MT3620 RDB,請更新 app_manifest.json檔案 和範例程式代碼來指定正確的 UART,例如 ISU1。

  3. 如果 CMake 產生未自動啟動,請選取CMakeLists.txt檔案。

  4. Visual Studio [輸出 ] 視窗中,CMake 輸出應該會顯示訊息 CMake generation started.CMake generation finished.

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

  6. 在 [選取啟動專案] 功能表上,選取 [HelloWorld_RTApp_MT3620_Baremetal [RTCore]。

  7. 按 F5 部署應用程式。

  8. 連接的終端機模擬器應該會顯示來自HelloWorld_RTApp_MT3620_Baremetal程序的輸出。 程式會以一秒的間隔傳送下列單字:

    Tick

    Tock

  9. 使用調試程式來設定斷點、檢查變數,以及嘗試其他偵錯工作。

使用 Visual Studio Code 建置和執行 HelloWorld RTApp 應用程式

  1. 在 Visual Studio Code 中,開啟您解壓縮下載Azure_Sphere___Hello_World.zip檔案之資料夾中的 HelloWorld_RTApp_MT3620_BareMetal資料夾。 如果系統提示您選取套件,請選擇 [不要使用套件]。

  2. 如果使用的不是 MT3620 RDB 硬體,請更新 app_manifest.json 檔和範例程式碼,以指定正確的 UART,例如 ISU1。

  3. 按 F5 啟動偵錯工具。 如果專案先前尚未建置,或檔案已變更並重建為必要專案,Visual Studio Code 會在偵錯開始之前建置專案。

  4. Azure Sphere 輸出視窗應該會顯示「正在部署影像...」,後面接著 SDK 和編譯器的路徑。

  5. 連接的終端機模擬器應該會顯示來自HelloWorld_RTApp_MT3620_Baremetal程序的輸出。 程式會以一秒的間隔傳送下列單字:

    Tick

    Tock

  6. 使用 Visual Studio Code 偵錯功能來設定斷點、檢查變數,以及嘗試其他偵錯工作。

疑難排解

應用程式可能會在 OpenOCD 建立連接之前開始執行。 因此,可能會遺漏程式代碼早期設定的斷點。 這的簡單因應措施是延遲應用程式啟動,直到 OpenOCD 連線為止。

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

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

  3. 在 [局部 變數 偵錯] 窗格中,將 的值 f 從零變更為一。

  4. 如往常逐步執行程序代碼。

建置範例

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

  2. 從您的項目建置目錄,在命令提示字元中,使用下列參數執行 CMake:

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

      CMakePresets.json中所定義的組建組態預設名稱。

    • --build <cmake-path>

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

    • <source-path>

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

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

    下列範例顯示 RTApp 的 CMake 命令。 如果指示,請將檔案路徑>取代<為您系統上 GNU Arm Embedded Toolchain 的安裝路徑。

    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 以建置應用程式並建立映像套件檔案:

    ninja -C out/ARM-Debug
    

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

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

    cmake --build out/<binary-dir>
    

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

進行疑難解答時,特別是在對 CMake 命令進行任何變更之後,請刪除整個組建,然後再試一次。

執行範例

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

    azsphere device sideload delete
    
  2. 從您的項目目錄,在命令提示字元中,載入 ninja 建立的映射套件:

    azsphere device sideload deploy --image-package <path-to-imagepackage>
    
  3. 取得映像的元件識別碼:

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

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

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

    您可以使用下列命令來停止、啟動與取得應用程式的狀態:

    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>
    

對範例進行偵錯

  1. 如果應用程式正在執行,請停止該應用程式。

    azsphere device app stop --component-id <component id>
    
  2. 重新啟動應用程式以進行偵錯。

    azsphere device app start --component-id <component id>
    

    此命令會傳回應用程式執行所在的核心。

    <component id>
    App state   : running
    Core        : Real-time 0
    
  3. 流覽至應用程式所建置之 sysroot 的 Openocd 資料夾。 sysroot 會安裝在 Azure Sphere SDK 安裝資料夾中。 例如,在 Windows 上,資料夾預設 C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd 會安裝在 Linux 上,位於 /opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux

  4. 如下列範例所示執行 openocd 。 此範例假設應用程式是在核心 0 上執行。 如果應用程式在核心 1 上執行,請將 「targets io0」 取代為 「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. 瀏覽至包含應用程式 .out 檔案並啟動 arm-none-eabi-gdb的資料夾,這是 GNU Arm Embedded Toolchain 的一部分:

    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. OpenOCD 伺服器會在 :4444 上提供 GDB 伺服器介面。 設定偵錯的目標。

    target remote :4444

  7. 您現在可以執行 gdb 命令。

  8. 連接的終端機模擬器應該會顯示應用程式的輸出。

使用合作夥伴應用程式

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

下一步