2016-09-18 91 views
0

我設置Eclipse C++ - 版本:Neon版本(4.6.0) - 版本ID:20160613-1800 - 使用GNU gcc ARM嵌入式工具鏈(而不是gcc4mbed)。工具鏈很好用,但是我遇到了一個涉及(我認爲)Eclipse最近項目的索引器的問題。爲什麼Eclipse的索引器識別一些類,但不識別其他類?

  1. 創建一些類的#include「mbed.h」

  2. 聲明類型DigitalOut的一些成員變量:如果我給我的重現問題的步驟

    我的問題應該是清楚的。請注意,Eclipse認識到這一點很好,因爲文本變成了粗體,並且在與變量交互時代碼完成工作正常。

  3. 聲明另一個類型爲PwmOut的成員變量。請注意,Eclipse不會識別這一點,文本不會變爲粗體,並且代碼完成不起作用,因爲Eclipse不知道PwmOut是什麼。 Eclipse中說:

錯誤(1項)

類型 'PWMOUT' 無法解析。 - main.cpp中 - 語義錯誤

  • 構建項目成功完成,編譯器不引發錯誤,儘管Eclipse中始終不承認PWMOUT。 Binary在我的LPC1768上正確運行。
  • Eclipse如何識別DigitalOut而不是PwmOut?兩者都在mbed.h中的相同代碼塊中列出 - 而DigitalOut.h與PwmOut.h位於同一目錄中。

    如果有幫助,here is an example project我從developer.mbed.org導出,您可以導入到Eclipse C++作爲現有的Makefile項目。

    我試着調整我發現的建議,例如在項目 - >屬性 - > C/C++常規 - >路徑和符號 - >包括,重建索引和「清新」中的所有文件該指數。我無法讓Eclipse識別它們。

    編輯:我想補充說,如果我點擊「類型」PwmOut「無法解決」在「問題」窗口中的錯誤消息,Eclipse鎖定了幾秒鐘,然後崩潰與堆棧溢出。

    +0

    要檢查的一件事是在代碼中未定義的makefile中定義的名稱。 Codan可能認爲'PwmOut'由於條件編譯而被排除在外。 – user4581301

    +0

    @ user4581301感謝您的建議。你能澄清你的意思嗎?這是當您從developer.mbed.org導出項目時隨項目提供的Makefile的要點https://gist.github.com/yankee14/c73325c1ab035c167bc2b3c3117dfe09 – Yankee

    +0

    對不起,但我不會從互聯網上下載匿名內容。你正在尋找的是在makefile的編譯器規則中使用gcc編譯器選項'-D'。這些通常用於通過指示編譯器不編譯代碼區域來打開或關閉功能。例如'#ifdef DEBUG std :: cerr <<「調試信息\ n」#endif'。如果DEBUG已經在代碼中使用'#define DEBUG'定義,或者在編譯器命令行中使用'-D DEBUG'定義,則會打印「Debug Message」。請注意,這只是這個問題的一個常見解決方案。這可能不是你的解決方案。 – user4581301

    回答

    1

    我很抱歉地說我的解決方案可能不是很普遍或對其他人的Eclipse C++問題有幫助。

    解決方法:

    1. 在你developer.mbed.org導出的項目文件夾,找到文件 「device.h中」 設在mbed子目錄

      ./mbed/TARGET_LPC1768/TARGET_NXP/TARGET_LPC176X/TARGET_MBED_LPC1768/device.h 
      

    我的是或多或少是空的。

    1. 將此device.h替換爲LPC1768的one located at the mbed official repo

    注意這個device.h有一些細節。

    1. 重建Eclipse的索引。 Eclipse現在應該很開心。

    我爲什麼這個修復Eclipse的問題解釋:

    當您導出從​​developer.mbed.org一個項目,它可以讓你與所有源的拉鍊,以及一個」 ./ mbed「目錄,其中包含您工作的特定微控制器的頭文件和對象。

    恩智浦/ ARM的大多數控制器應該具有DigitalOut或DigitalIn類的一些變體,因爲這類功能對於控制器來說非常基本和通用。但是,這個特定的芯片(LPC1768)在板上有一個獨立的模塊來處理脈寬調製。在所有恩智浦/ ARM芯片上都未找到此模塊,因此您可以將其視爲在IDE(例如Eclipse)中設置工作區環境時需要注意的特殊情況。

    特別是,mbed導出的項目包括位於(對我來說)一個頭標,

    ./mbed/TARGET_LPC1768/TARGET_NXP/TARGET_LPC176X/TARGET_MBED_LPC1768/device.h 
    

    該器件的頭應該定義特定於正在編程裝置預處理指令。礦是空的,but the one at the official repo for the LPC1768有很多#defines在這個控制器。只要device.h中的DEVICE_PWMOUT指令被定義爲等於1(它是),Eclipse就會知道它應該識別PwmOut類。

    +0

    device.h文件已被棄用,因此它現在幾乎爲空,並且所有目標信息都位於targets.json文件中 - >您已經注意到,宏是通過包含所有DEVICE_定義的-D定義的。 你可以提出這個作爲mbed-os github存儲庫的一個改進,我們應該生成帶有設備配置的頭文件(這裏有mbed配置,但是對於其他的)。 – c0170

    +0

    @ c0170謝謝您的建議,我提交了改進https://github.com/ARMmbed/mbed-os/issues/2738 – Yankee