教學課程:建置即時可用的應用程式
重要
這是 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。
必要條件
- 安裝適用於 Visual Studio 的 Azure Sphere 擴充功能。
- 安裝適用於 Windows 或 Linux 的 Azure Sphere SDK
- 選擇租使用者並宣告您的裝置
- 設定網路功能並更新裝置 OS
下載範例應用程式
您可以下載 HelloWorld 應用程式,如下所示:
- 將瀏覽器指向 Microsoft範例瀏覽器。
- 在 [搜尋] 方塊中輸入 “Azure Sphere”。
- 從搜尋結果中選取 [Azure Sphere - Hello World ]。
- 選取 [ 下載 ZIP]。
- 開啟下載的檔案並解壓縮至本機目錄。
安裝適 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 會搜尋工具鏈,並尋找您安裝的版本。 如果您遇到與工具鏈相關的建置問題,請輸入路徑,如下所示:
- 選取 [檔案>喜好設定>] [>擴充功能>] [Azure Sphere]。
- 在 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 介面頭座有助於判斷針腳位置。
- 將 USB 轉序列配接器上 GND 連接到開發套件上的 GND。 在 MT3620 RDB 硬體上,GND 是頭座 3,針腳 2。
- 將 USB 轉序列配接器上的 RX 連接到開發套件上的 IOM4-0 TX。 在 MT3620 RDB 硬體上,IOM4-0 TX 是頭座 3,針腳 6。
- 將 USB 到序列適配卡連線到開發電腦上的免費 USB 埠,並判斷序列裝置所連接的埠。 在 Windows 上,啟動 裝置管理員,選取 [依容器檢視>裝置],然後尋找 [USB UART]。 例如,FT232R USB UART 表示 FTDI Friend 適配卡。
- 啟動終端機模擬器程式,並將 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 介面頭座有助於判斷針腳位置。
將 USB 轉序列配接器上 GND 連接到開發套件上的 GND。 在 MT3620 RDB 硬體上,GND 是頭座 3,針腳 2。
將 USB 轉序列配接器上的 RX 連接到開發套件上的 IOM4-0 TX。 在 MT3620 RDB 硬體上,IOM4-0 TX 是頭座 3,針腳 6。
將 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
啟動終端機模擬器程式,並將 115200-8-N-1 終端機開啟至配接器所使用的 COM 連接埠。 請參閱終端機模擬器的檔,以瞭解如何指定埠和速度。
啟用開發和偵錯
您必須先啟用開發和偵錯,才能在 Azure Sphere 裝置上建置範例應用程式,或為其開發新的應用程式。 根據預設,Azure Sphere 裝置會「鎖定」;也就是說,它們不允許從計算機載入開發中的應用程式,而且不允許對應用程式進行偵錯。 準備裝置以進行偵錯會移除這項限制,並載入偵錯和解除鎖定裝置功能所需的軟體,如裝置功能和通訊中所述。
若要對即時核心進行偵錯,請使用 azsphere device enable-development 命令。 此命令會將裝置設定為接受來自計算機的應用程式進行偵錯,並將裝置指派給開發裝置群組,而此群組不允許雲端應用程式更新。 在應用程式開發和偵錯期間,您應該讓裝置留在此群組中,讓雲端應用程式更新不會覆寫開發中的應用程式。
在 Windows 上,您必須新增 --enable-rt-core-debugging
參數,以將偵錯伺服器和每種核心類型所需的驅動程式載入裝置上。
如果您尚未登入 Azure Sphere,請執行此動作:
azsphere login
使用 PowerShell 或具有系統管理員許可權的 Windows 命令提示字元開啟命令行介面。 參數
--enable-rt-core-debugging
需要系統管理員許可權,因為它會安裝調試程式的USB驅動程式。輸入下列命令:
azsphere device enable-development --enable-rt-core-debugging
關閉命令完成後的視窗,因為不再需要系統管理員許可權。 最佳做法是,您應該一律使用可完成工作的最低許可權。
如果 azsphere device enable-development 命令失敗,請參閱針對 Azure Sphere 問題進行疑難解答以取得協助。
使用 Visual Studio 建置並執行 HelloWorld RTApp 應用程式
啟動 Visual Studio。 選取 [開啟本機資料夾],流覽至您擷取下載Azure_Sphere___Hello_World.zip檔案的資料夾,然後選取HelloWorld_RTApp_MT3620_Baremetal資料夾。
如果您不是使用 MT3620 RDB,請更新 app_manifest.json檔案 和範例程式代碼來指定正確的 UART,例如 ISU1。
如果 CMake 產生未自動啟動,請選取CMakeLists.txt檔案。
在 Visual Studio [輸出 ] 視窗中,CMake 輸出應該會顯示訊息
CMake generation started.
和CMake generation finished.
選取 [全部建置>]。 如果功能表不存在,請開啟 方案總管,以滑鼠右鍵按兩下CMakeLists.txt檔案,然後選取 [建置]。 HelloWorld_RTApp_MT3620_Baremetal應用程式的輸出位置會出現在 [輸出 ] 視窗中。
在 [選取啟動專案] 功能表上,選取 [HelloWorld_RTApp_MT3620_Baremetal [RTCore]。
按 F5 部署應用程式。
連接的終端機模擬器應該會顯示來自HelloWorld_RTApp_MT3620_Baremetal程序的輸出。 程式會以一秒的間隔傳送下列單字:
Tick
Tock
使用調試程式來設定斷點、檢查變數,以及嘗試其他偵錯工作。
使用 Visual Studio Code 建置和執行 HelloWorld RTApp 應用程式
在 Visual Studio Code 中,開啟您解壓縮下載Azure_Sphere___Hello_World.zip檔案之資料夾中的 HelloWorld_RTApp_MT3620_BareMetal資料夾。 如果系統提示您選取套件,請選擇 [不要使用套件]。
如果使用的不是 MT3620 RDB 硬體,請更新 app_manifest.json 檔和範例程式碼,以指定正確的 UART,例如 ISU1。
按 F5 啟動偵錯工具。 如果專案先前尚未建置,或檔案已變更並重建為必要專案,Visual Studio Code 會在偵錯開始之前建置專案。
Azure Sphere 輸出視窗應該會顯示「正在部署影像...」,後面接著 SDK 和編譯器的路徑。
連接的終端機模擬器應該會顯示來自HelloWorld_RTApp_MT3620_Baremetal程序的輸出。 程式會以一秒的間隔傳送下列單字:
Tick
Tock
使用 Visual Studio Code 偵錯功能來設定斷點、檢查變數,以及嘗試其他偵錯工作。
疑難排解
應用程式可能會在 OpenOCD 建立連接之前開始執行。 因此,可能會遺漏程式代碼早期設定的斷點。 這的簡單因應措施是延遲應用程式啟動,直到 OpenOCD 連線為止。
在應用程式進入點 RTCoreMain 的開頭插入下列程式代碼。 這會導致應用程式進入並維持在迴圈中
while
,直到變數f
設定為 true 為止。volatile bool f = false; while (!f) { // empty. }
按 F5 以偵錯啟動應用程式(F5),然後中斷執行。
在 [局部 變數 偵錯] 窗格中,將 的值
f
從零變更為一。如往常逐步執行程序代碼。
建置範例
使用 PowerShell、Windows 命令提示字元或 Linux 命令殼層開啟命令行介面。 流覽至您的專案組建目錄。
從您的項目建置目錄,在命令提示字元中,使用下列參數執行 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 的安裝路徑。
執行 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 命令進行任何變更之後,請刪除整個組建,然後再試一次。
執行範例
刪除已部署至裝置的任何應用程式:
azsphere device sideload delete
從您的項目目錄,在命令提示字元中,載入 ninja 建立的映射套件:
azsphere device sideload deploy --image-package <path-to-imagepackage>
取得映像的元件識別碼:
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>
對範例進行偵錯
如果應用程式正在執行,請停止該應用程式。
azsphere device app stop --component-id <component id>
重新啟動應用程式以進行偵錯。
azsphere device app start --component-id <component id>
此命令會傳回應用程式執行所在的核心。
<component id> App state : running Core : Real-time 0
流覽至應用程式所建置之 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
。如下列範例所示執行
openocd
。 此範例假設應用程式是在核心 0 上執行。 如果應用程式在核心 1 上執行,請將 「targets io0」 取代為 「targets io1」。瀏覽至包含應用程式 .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
OpenOCD 伺服器會在 :4444 上提供 GDB 伺服器介面。 設定偵錯的目標。
target remote :4444
您現在可以執行 gdb 命令。
連接的終端機模擬器應該會顯示應用程式的輸出。
使用合作夥伴應用程式
當您將應用程式載入 Azure Sphere 裝置時,Azure Sphere 部署工具預設會刪除所有現有的應用程式。 若要避免在開發彼此通訊的應用程式時發生此情況,您必須將應用程式標示為 合作夥伴。 當您部署其中一個應用程式時,將不會刪除其合作夥伴。 如需詳細資訊,請參閱 將應用程式標示為合作夥伴 。
下一步
- 瞭解如何使用 Azure Sphere 執行 Azure RTOS
- 探索即時可用的核心的其他範例:
- 深入瞭解 Azure Sphere 應用程式