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

更新 Jun 1, 2023

環境

軟體

  • 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。
Tariff Impact Update Learn more

Was this information helpful?

Yes

No