概觀
在開發過程中,任何軟體應用程式均將產生某種錯誤。為了更正這些軟體瑕疵,工程師必須使用強大的除錯工具,以有效深入其應用並發現錯誤。與桌上型環境的除錯應用相較,適用於 ARM 微控制器的 LabVIEW 嵌入式 (Embedded) 模組,即提供強大除錯環境,讓工程師可輕鬆進行嵌入式程式碼的除錯作業。此外,工程師亦可使用 LabVIEW 搭配 Keil uVision,於 ARM 微控制器中依 C 與組合程式碼,執行 LabVIEW 程式區的除錯作業。此篇文章將說明連接嵌入式系統的多種方式、進行除錯的技術,並逐步同時進行 LabVIEW 與 C 程式碼產生。
目錄
啟動 ARM 微控制器的除錯模式
在開始除錯作業之前,必須先於「Build Specification」啟動除錯作業。下列則為啟動除錯作業的步驟。
1. 在「Project Explorer」視窗中展開「Build Specifications」,並按下滑鼠右鍵選擇「Properties」。

2. 接著將顯示「Build Specification Properties」視窗。接著於「Category」欄中選擇「Application Information」。

3. 在「Application Information」欄位中,確定勾選「Enable debugging」方塊。在「Debug Options」中選擇「Run on target using ULINK2」或「Run on host computer using simulator」。若裝置中包含硬體並想要測試實際環境中的程式碼作業情形,則可選擇「ULINK2」進行除錯。此方法會耗費較多時間,以將軟體載入至開發系統中;但卻可在實際情況下測試設計所產生的動作。如果系統並未包含硬體,或要於模擬環境中執行快速測試,則可選擇「Simulator」。

4. 接著可從清單中選擇「Advanced Debugging Options」。在「Debug mode」下,可選擇下列選項之一:Serial port、TCP port,或 USB ULINK2 JTAG 除錯作業。這些模式將於文章後段進行詳述。

5. 按下「OK」。則現在啟動了除錯功能。在「Project Explorer」視窗中按下滑鼠右鍵,點選「Application」並按下「Run」。

基本除錯技術
當進行任何 LabVIEW 應用的除錯作業時,斷點 (Breakpoint) 與探針 (Probe) 為發現程式設計錯誤的有效方法。若要建立斷點或探針,則可於連接線上方按下滑鼠右鍵,接著選擇清單中的「Probe」或「Set Breakpoint」。

若是設定斷點,則連接線將出現 1 個小紅點,以代表圖形化程式碼的斷點。若以除錯模式執行應用,當達到斷點時,即可使用工具欄上的按鈕逐步進行程式碼。

探針 (Probe) 功能可於 LabVIEW 程式碼中檢查連接線的值。探針將建立另 1 個視窗,在程式執行期間更新連接線的值。

在 ARM 微控制器中,我們亦可用「Processor Status」視窗進行除錯。處理器狀態視窗將以 3 個方式顯示除錯結果 -- 以 C 程式碼表示的「printf」、ARM Palette 專屬的「Console Out.vi」,或「One Button Dialog.vi」。下方程式區則為單一時脈迴路中的各個顯示方法。

當執行此程式碼之後,將輸出該指令串 (string) 至「Processor Status」視窗。

亦可透過序列埠擷取除錯結果。使用「Build Specification Properties」視窗即可啟動此功能。在「Communication Options」中,可於「Console Output」框中選擇「Serial port」按鈕。若未選擇「Serial port debugging」,則必須啟動此功能方可進行作業。

在嵌入式系統中,若未啟動除錯功能,則亦將無法使用 LabVIEW 人機介面。若未選擇「Build Specifications Properties」視窗中的「Enable debugging」,系統將以釋放 (Release) 模式進行佈署。此外,人機介面可透過 USB、TCP,或序列,並根據系統狀態的即時資訊進行更新。如圖表與數字的傳統 LabVIEW 人機介面指標,均為蒐集互動式資料的有效除錯技術。
除錯應用的最後 1 像技術,即是使用內建的 ARM 模擬器。此功能不需實際硬體,即可進行除錯。模擬器將透過模擬硬體,進行應用的除錯與測試作業,並可模擬輸入至系統。使用「Build Specification Properties」視窗即可啟動模擬器。在「Application Information」視窗中,選擇「Run on host computer using simulator」。

若要進一步使用 LabVIEW ARM 模擬器的相關資訊,可點選此處。
以序列連結進行除錯
下列步驟將顯示進行序列除錯的方法。
1. 在「Build Specification Properties」視窗中,選擇「Debugging Mode」框中的「Serial port」按鈕。

2. 使用序列連接線以連接系統介面卡與開發機器。系統介面卡必須保持連接 USB ULINK2 JTAG 除錯器,以進行程式碼佈署作業。
3. 「Build」並「Run」該應用。該應用則將執行並更新人機介面的顯示。
以 TCP/IP 進行除錯
下列步驟將顯示進行序列除錯的方法。
1. 在「Build Specification Properties」視窗中,選擇「Debugging Mode」框中的「TCP port」按鈕。

2. 再從「Category 」欄中選擇「Communication Options」。此步驟將設定裝置的網路位址。不論開發環境是選擇狀態 IP 或 DHCP,均將根據可用的網路設定進行作業。此外,並提供裝置的「Host name」。

3. 透過乙太網路連接線,以銜接系統裝置與網路。系統介面卡必須保持連接 USB ULINK2 JTAG 除錯器,以進行程式碼佈署作業。
4. 「Build」並「Run」該應用。該應用則將執行並更新人機介面的顯示。
JTAG USB 除錯作業
下列步驟將顯示進行序列除錯的方法。
1. 在「Build Specification Properties」視窗中,選擇「Debugging Mode」框中的「USB ULINK2 JTAG」按鈕。

2.「Build」並「Run」該應用。該應用則將執行並更新人機介面的顯示。且不需使用其他連接線。
序列、TCP,與 JTAG 的比較
若啟動序列與 TCP 除錯功能,則將新增通訊程式碼至 LabVIEW 程式碼,適用於匯流排協定的資料轉換作業。針對考慮程式碼體積 (Footprint) 的應用來說,由於通訊層 (Layer) 將增加程式碼的體積,並可能導致無法將該應用佈署至硬體,因此應避免啟動序列或 TCP 的除錯功能。TCP 一般將透過序列通訊以提供較佳的效能,卻也可能提升人機介面的複雜度。相較於 JTAG,TCP 與序列可提供更精確的除錯結果,卻會影響應用的時脈。
JTAG 通訊並不需要其他連接線,亦不會影響程式碼的體積與應用時脈。針對 LabVIEW ARM 應用,則推薦使用 JTAG 的除錯方式。
除錯應用最後所考慮的方式,即是使用包含數值 (Scalar) 叢集或數值陣列的人機介面。若要使用此種方法,則必須設定單晶片除錯介面 (On-Chip Debugging Interface,OCDI)。對該系統按下滑鼠右鍵並選擇「Configure Target」。

若要啟動數值 (Scalar) 陣列或叢集的除錯作業,則勾選「Configure Target」視窗中的「Allow debugging of scalar arrays」與「Allow debugging of scalar clusters」方塊。進行除錯作業所必須注意的 1 點,即是「包含叢集的陣列」與「包含陣列的叢集」均無法透過人機介面進行除錯。此外,若系統是透過序列埠進行除錯,則無法透過此視窗設定序列與裝置之間的通訊。

於 LabVIEW 與已產生的 C 程式碼之間進行雙重除錯
LabVIEW 與 µVision 可同步進行程式區的程式碼除錯,並搜尋對應的 C 程式碼。下列步驟將顯示設定方式。
1. 首先建立將佈署至系統的 LabVIEW VI。下方的 VI 則專用於此範例:

2. 如先前基本除錯技術段落所述,將斷點插入至程式碼中。
3. 在「Build Properties」視窗中,啟動 JTAG USB 的除錯功能。
4. 在系統上方點選滑鼠右鍵,並選擇「Show Keil uVision」。

5. 接著將顯示「Keil µVision」環境。「Build」並「Run」該 LabVIEW 應用。一旦建立應用並佈署至系統之後,只要應用達到所設定的斷點,則將同時於螢幕上顯示 LabVIEW 程式圖與對應的 C 程式碼。而從此處則可設定新斷點、檢查執行中的 C 程式碼,並逐步完成 C 程式碼或 LabVIEW 程式碼。

摘要
LabVIEW 可讓工程師透過人機介面的連結功能,輕鬆進行嵌入式應用的除錯作業;並透過內建的除錯環境,發掘應用較粗淺的相關資訊。
合法
此教學由美商國家儀器 (以下簡稱 NI) 開發。此教學受 NI 技術支援,但未經完整測試及檢驗。NI 不保證品質,亦不為其更新版本、相關產品及驅動程式等後續支援負責。此教學不具任何形式保證,且不受任何特定用途規範。(http://ni.com/legal/termsofuse/unitedstates/us/)
