使用Eclipse C/C++ Development Tools開發可執行於NI Linux Real-Time之應用

更新 Aug 8, 2022

環境

軟體

  • LabVIEW
  • C/C++ Development Tools

操作系統

  • LabVIEW Real-Time (NI Linux Real-Time)

本教學說明如何使用用於NI Linux Real-Time Eclipse Edition的C/C++ Development Tools建立C/C++專案,並如何由專案原始碼產生可執行檔,以及如何在NI Linux Real-Time Target上執行和Debug執行檔。

文件目錄:


安裝

  1. 安裝Java(建議使用Java SE 6或更高版本),可以從http://www.java.com/getjava下載。
  2. 安裝適用於NI Linux Real-Time Eclipse Edition的C/C++ Development Tools
    對於LabVIEW 2014至LabVIEW 2016,請安裝
    C/C++ Development Tools for NI Linux Real-Time, Eclipse Edition 2014-2016
    對於LabVIEW 2017和LabVIEW 2018,請安裝C/C++ Development Tools for NI Linux Real-Time, Eclipse Edition 2017-2018

首次使用NI Linux Real-Time Eclipse EditionC/C++ Development Tools

完成以下步驟,為首次使用的NI Linux Real-Time Eclipse Edition進行設定

  1. 啟動C/C++ Development Tools for NI Linux Real-Time, Eclipse Edition
  2. 在彈出視窗中,選擇一個儲存Eclipse專案的資料夾,然後點擊OK
     Tip: 勾選"Use this as the default and do not ask again"將專案資料夾設為預設位置。
  3. 在Eclipse歡迎畫面中,選擇最右邊的Workbench圖示以打開操作介面。
  4. C/C++ Development Tools for NI Linux Real-Time, Eclipse Edition,在Perspectives Bar上標註了Active Perspective,如下圖所示。首次開啟時,Workbench將開啟於C/C++ perspective

    接著,我們要在
    C/C++ perspective中建立一個新專案。


建立一個C/C++專案

完成以下步驟,以在C/C++ Development Tools建立一個C/C++專案:
  1. 切換到C/C++ Perspective。
  2. 選擇File»New»Project以打開New Project Wizard。
  3. 展開C/C++資料夾,然後根據要使用的程式語言選擇C ProjectC++ Project
  4. 點擊“Next打開“ C Project頁面。
  5. 在“Project name中輸入專案名稱。
  6. 在“Project type中的Executable資料夾下,選擇“ Hello World ANSI Project ”。
    注意! 本教學將使用Hello Word ANSI Project作為範例。您可以選擇適合您需求的任何專案類型。
  7. 在“Toolchains listbox中選擇“Cross GCC ”以啟用cross-compilation,cross-compilation將設定編譯器以建立用於嵌入式系統(例如您的NI Linux Real-Time Target裝置)的執行檔。

  8. 點擊“Next打開“Basic Settings頁面。
  9. Author, Copyright notice, Hello world greetingSource中輸入專案的基本屬性。
    注意! Source”為指定開發電腦硬碟上儲存專案原始碼的路徑目錄。

  10. 點擊“Next打開“Select Configurations頁面。
  11. 啟用“Debug以將專案設定為允許Debug執行檔,和/或啟用"Release"以將專案設定為允許構建更小,更快的針對發布進行優化的執行檔。
    注意! 對於本教學而言,請確保啟用Debug
  12. 點擊“Next”打開“ Cross GCC命令”頁面。
  13. 在“Cross compiler prefix文字框中,輸入以下清單中的值之一,並在最後輸入連字符(-),以為您的NI Linux Real-Time Target指定正確的編譯器:
    • (ARM-based targets, 2013 software stack) arm-none-linux-gnueabi
    • (ARM-based targets, 2014 software stack) arm-nilrt-linux-gnueabi-
    • (ARM-based targets, 2017 software stack) arm-nilrt-linux-gnueabi-
    • (Intel x64-based targets, 2014 software stack) x86_64-nilrt-linux-
    • (Intel x64-based targets, 2017 software stack) x86_64-nilrt-linux-
  14. 在“Cross compiler path文字框中,為你的RT target選到以下清單中指定的正確編譯器的位置:
    • (ARM-based targets, 2013 software stack) \<National Instruments>\Eclipse\toolchain\gcc-4.4-arm\i386\bin
    • (ARM-based targets, 2014 software stack) \<National Instruments>\Eclipse\14.0\arm\sysroots\i686-nilrtsdk-mingw32\usr\bin\armv7a-vfp-neon-nilrt-linux-gnueabi
    • (ARM-based targets, 2017 software stack) C:\build\17.0\arm\sysroots\i686-nilrtsdk-mingw32\usr\bin\arm-nilrt-linux-gnueabi
    • (Intel x64-based targets, 2014 software stack) \<National Instruments>\Eclipse\14.0\x64\sysroots\i686-nilrtsdk-mingw32\usr\bin\x86_64-nilrt-linux
    • (Intel x64-based targets, 2017 software stack) C:\build\17.0\x64\sysroots\i686-nilrtsdk-mingw32\usr\bin\x86_64-nilrt-linux

  15. 點擊“Finish”以建立您的專案並返回到workbench畫面。
在下一部份教學裡,您將建立專案的可執行版本以使其能夠執行。

Build C / C ++專案

在執行專案之前,您需要透過建立專案的可執行內部版本來測試源程式碼是否已編譯。完成以下步驟以建立C / C ++專案的可執行版本:
  1. 切換到C / C ++ Perspective。
  2. 如果要使模板符合您的應用程式需求,請修改模板內的原始碼;如果選擇空白專案,請輸入C / C ++程式碼。就本教學而言,您無需更改Hello Word ANSI Project原始碼。

  3. 在“Project Explore”頁卡中右鍵點擊您的專案,然後選擇“Properties

  4. 在“Properties對話框的左視窗中選擇“ C / C ++ Build ”。
  5. 從“ Builder type下拉菜單中選擇“Internal builder以進行debug設定。選擇Internal builder使用NI Linux Real-Time Eclipse Edition的C / C ++開發工具(而不是外部生成文件)來生成執行檔。
    注意! 本教學示範使用“Debug”,但是本段教學也適用於“Release”設定。
  6. 在“Properties對話框的左視窗中,選擇 C / C ++ Build下的Settings ”。
  7. 在“Tool Settings頁面中的Cross GCC Compiler下選擇“Miscellaneous 
  8. (基於ARM的target)在“Other flags文字框中的現有字串之後添加一個空格,然後輸入-mfpu = vfpv3 -mfloat-abi = softfp 。此步驟提高了浮點運算的效能。
  9. (2017 software stack)完成以下步驟以指定sysroot的路徑,該路徑是標頭檔和libraries的邏輯根目錄。您需要指定sysroot的路徑才能正確編譯和鏈接應用程式。
    1. 在“Other flags文字框中,在現有文本之後添加一個空格,然後輸入以下列表中的值之一:
      (基於ARM的 target,2017 software stack)-- sysroot = C:\build\17.0\arm\sysroots\cortexa9-vfpv3-nilrt-linux-gnueabi
      (基於Intel x64的 target,2017 software stack)-- sysroot = C:\build\17.0\x64\sysroots\core2-64-nilrt-linux
    2. 在“Tool Settings”頁面中的Cross GCC Linker下選擇“Miscellaneous 
    3. 在Linker flags文字框中,輸入以下清單中的值之一:
      (基於ARM的 target,2017 software stack)-- sysroot = C:\build\17.0\arm\sysroots\cortexa9-vfpv3-nilrt-linux-gnueabi
      (基於Intel x64的 target,2017 software stack)-- sysroot = C:\build\17.0\x64\sysroots\core2-64-nilrt-linux
  10. (2017software stack)要消除由included的標頭類別中引發的語義錯誤,必須在C / C ++ General中的 Paths and Symbols, GNU C or GNU C++下包含以下目錄。對於C ++入門範例, GNU C ++中也必須要包含以下目錄。
    (基於ARM的 target,2017 software stack)
    C:\build\17.0\arm\sysroots\cortexa9-vfpv3-nilrt-linux-gnueabi\usr\include\c++\4.9.2\
    C:\build\17.0\arm\sysroots\cortexa9-vfpv3-nilrt-linux-gnueabi\usr\include\c++\4.9.2\arm-nilrt-linux-gnueabi

    (基於Intel x64的 target,2017 software stack)
  11. C:\build\17.0\x64\sysroots\core2-64-nilrt-linux\usr\include\c++\4.9.2
    C:\build\17.0\x64\sysroots\core2-64-nilrt-linux\usr\include\c++\4.9.2\x86_64-nilrt-linux
  12. 點擊“Apply  ,然後點擊“OK”關閉“Properties”對話框。
  13. 在workbench區中選擇Project»Build Project以建立專案的執行檔。
  14. 如果Build成功完成,則“Console”視窗中將顯示“Build Finished”,如下圖所示。

    注意! 即使build成功,在“Problem”視窗中也可能會出現 'Program "g++" not found in PATH'” 或 'Program "gcc" not found in PATH' 的error。 可以右鍵點擊錯誤,然後選擇Delete
在本教學的下一部份中,您準備透過將RT Target增加到專案中來在NI Linux Real-Time target上執行執行檔。

設定遠端系統

在執行上一節中在NI Linux Real-Time target上建立的執行檔之前,需要將RT target添加到專案中。完成以下步驟,以將NI Linux Real-Time C / C ++開發工具中的target設定為遠端系統:

注意! 在繼續執行本節中的步驟之前,請確保RT target已啟用SSH。您可以使用Measurement&Automation Explorer(MAX)或使用RT Target上的DIP開關(如果可用)在RT target上啟用SSH。
  1. 選擇Window»Open Perspective»Other 打開Open Perspective對話框。
  2. 選擇“Remote System Explorer

  3. 點擊“OK”將“Remote System Explorer”perspective 增加到workbench。
  4. 點擊“Define a connection to remote system按鈕(如下圖所示),以開啟“New Connection wizard"。

  5. 選擇General 資料夾下的SSH Only 。
    注意! 您也可以選擇Linux作為遠端系統類型,但是由於連接到NI Linux Real-Time target需要SSH,因此預先選擇SSH Only可以縮短設定步驟。
  6. 點擊“Next”打開“ Remote SSH Only System Connection頁面。
  7. Parent profile 下拉菜單中選擇一個設定文件以包含遠端系統連接。有關設定文件的資訊,請參考"Remote System Explorer Profiles topic of the C/C++ Development Tools for NI Linux Real-Time, Eclipse Edition Help",可從workbench中選擇“Help”»“Help Contents”。
  8. Host Name文字框中輸入NI Linux Real-Time終端的主機名或IP地址。
    您可以使用MAX來識別RT Target的主機名和IP地址。
  9. (Optional)在“Description”和“Connection Name”文字框中輸入描述或更改連接名稱,以幫助您在RT Target顯示在 Remote System Explorer perspective中時辨識您的RT Target。

  10. 點擊Finish
  11. RT Target顯示在“Remote Systems perspective中的“Remote System頁面卡中,如下圖所示。
  12. 展開RT target下的Sftp Files資料夾,以瀏覽RT target上的檔案。
  13. 出現提示時,輸入設定的使用者名稱和密碼,然後點擊OK。預設使用者名為admin ,預設密碼為空。
    注意! NI建議您設定密碼以提高安全性。有關設定密碼的資訊,請參考Measurement&Automation Explorer幫助中的“Logging in to your System主題,您能從MAX中選擇“Help”»“ MAX Help”

注意! 如果連接彈出窗口不包含“User ID”輸入欄位,請在“Remote System頁面下的RT Target上點擊滑鼠右鍵,然後點擊“Properties”。您可以透過更改Host類別中的Default User ID選項來更新使用者ID輸入。

成功登錄後,您將建立到RT Target的SSH連接並允許將檔案傳輸到該目標。在本教學的下一部份中,您將在RT Target上複製並執行C / C ++執行檔。
 

在NI Linux Real-Time 裝置上執行C / C ++

本教學到目前為止,您的專案包含一個RT Target和一個執行檔。完成以下步驟以在RT Target上執行C / C ++執行檔:

  1. 選擇Run»Run Configuration以打開執行設定對話框。
  2. 在左視窗中選擇“ C / C ++ Remote Application”。
  3. 點擊New launch configuration按鈕(如下圖所示),以指定用於在RT Target上運行執行檔的設置。

  4. 從“Connection下拉式選單中選擇目標。
  5. 點擊“ Remote Absolute File Path for C/C++ Applications文字框旁邊的“Browse”按鈕,以打開“Select Remote C/C++ Application File對話框。
  6. 右鍵點擊清單中的“My Home”,然後選擇“New»Folder”以在RT Target上建立一個資料夾,在該資料夾中放置執行檔的copy。

  7. 在“New folder name文字框中輸入在上一步中建立的資料夾的名稱

  8. 點擊Finish以返回到“Run Configuration對話框。
  9. 將您的專案名稱(或您希望設定給給執行檔的任何名稱)添加到“ Remote Absolute File Path for C/C++ Applications文字框中的檔案路徑
    注意! 此文字框指定target上編譯器將執行檔複製到的文件路徑(包括執行檔名稱)。在此範例中,檔案路徑讀取/home/admin/ProjectFolder/MyProjectName ,其中MyProjectName定義執行檔名稱,如下圖所示。

  10. 點擊“Apply” ,然後點擊“Run”以在RT Target上複製並執行執行檔。
  11. 程式執行將顯示在“Console”視窗中,如下圖所示。

下一部份教學會說明NI Linux Real-Time Eclipse Edition的C / C ++開發工具中提供的debug功能。
 

Debug C / C ++專案

C/C++ Development Tools for NI Linux Real-Time, Eclipse 提供了用於debug專案的功能,以下步驟說明如何debug C / C ++專案:
  1. 選擇Run»Debug Configuration以打開debug設定對話框。
  2. 選擇“Debugger”頁面
  3. 點擊GDB debugger文字框旁邊的“Browse”按鈕。
  4. 按照以下清單中的說明選擇正確的debugger:
    (基於ARM的target,2013 Software Stack) <National Instruments>\Eclipse\toolchain\gcc-4.4-arm\i386\bin資料夾中的arm-none-linux-gnueabi-gdb.exe
    (基於ARM的target,2014 Software Stack) <National Instruments>\Eclipse\14.0\arm\sysroots\i686-nilrtsdk-mingw32\usr\bin\armv7a-vfp-neon-nilrt-linux-gnueabi 資料夾中的 arm-nilrt-linux-gnueabi-gdb.exe
    (基於ARM的target,2017 Software Stack)arm-nilrt-linux-gnueabi-gdb.exe in the c:\build\17.0\arm\sysroots\i686-nilrtsdk-mingw32\usr\bin\arm-nilrt-linux-gnueabi directory
    (基於x64的Intel target,2014 Software Stack) x86_64-nilrt-linux-gdb.exe in the <National Instruments>\Eclipse\14.0\x64\sysroots\i686-nilrtsdk-mingw32\usr\bin\x86_64-nilrt-linux directory
    (基於x64的Intel 的target,2017 Software Stack) x86_64-nilrt-linux-gdb.exe in the c:\build\17.0\x64\sysroots\i686-nilrtsdk-mingw32\usr\bin\x86_64-nilrt-linux directory
  5. 點擊Open。

  6. 點擊“Apply” ,然後點擊“Debug”以開始Debug專案。
  7. 當提示您切換Perspective時,請點擊“Yes”
  8. 探索Debug Perspective

    • 左上角的“Debug”頁面顯示每個正在執行的thread的calling stack。

    • 右上方的“Variables”頁面列出了原始碼中的C / C ++ 變數。

    • 畫面中間偏左的部份會顯示原始碼,並在執行時highlight正在執行的程式碼。
      您可以將滑鼠懸在原始碼上,以顯示有關函式或變數的詳細資訊。 

    • 要插入斷點,請highlight該行程式碼,然後選擇“Run»Toggle Breakpoint 。則程式在執行時會暫停在已設置斷點的位置。

    探索Debug Toolbar

    Debug Toolbar包括以下按鈕:
    Instruction Stepping Mode啟用指令步單步進行模式以在程式進入disassembled編程式碼時檢查程式。
    Drop to Frame在“Debug” view 中重新進入選定的stack frame。
    Use Step Filters在“debug” view中啟用Step Filter。
    Step Return繼續執行到當前routine的最末尾,然後繼續回頭執行routine的呼叫者。
    Step Over執行目前此行程式碼。
    Step Into執行目前此行程式碼,包括所有routines,然後繼續執行下一行。
    ResumeSuspended的debug target恢復執行。
    Suspend在debug target中停止執行當前選定的thread。
    Terminate結束所選的debug session。
    Disconnect從所選process中分離(detach) debugger。