为什么Eclipse的索引器会识别某些类,而不是其他类?

时间:2016-09-18 01:05:40

标签: c++ eclipse parsing indexing mbed

我设置了Eclipse C ++ - 版本:Neon Release(4.6.0) - Build id:20160613-1800 - 使用GNU gcc ARM Embedded Toolchain(不是gcc4mbed)。工具链工作得很好,但我遇到了一个涉及(我认为)Eclipse最新项目的索引器的问题。

如果我提出重现问题的步骤,我的问题应该很清楚:

  1. 创建一些类和#include" mbed.h"

  2. 声明一些DigitalOut类型的成员变量。请注意,Eclipse认为这很好,因为文本变为粗体,并且在与变量交互时代码完成工作正常。

  3. 声明PwmOut类型的另一个成员变量。请注意,Eclipse不会识别这一点,文本不会变为粗体,代码完成也不起作用,因为Eclipse并不知道PwmOut是什么。 Eclipse说:

  4.   

    错误(1项)

         

    键入' PwmOut'无法解决。 - main.cpp - 语义错误

    1. 构建项目成功完成,编译器不会抛出任何错误,即使Eclipse仍然无法识别PwmOut。二进制文件在我的LPC1768上正确运行。
    2. Eclipse如何识别DigitalOut而不是PwmOut?两者都列在mbed.h中的相同代码块中 - 而DigitalOut.h与PwmOut.h位于同一目录中。

      如果有帮助,here is an example project我从developer.mbed.org导出你可以作为现有的Makefile项目导入Eclipse C ++。

      我尝试调整我发现的建议,例如在Project-> Properties-> C / C ++ General->路径和符号 - >包含,重建索引和&#34中添加带有这些标题的目录;清新"索引中的所有文件。我只是不能让Eclipse识别它们。

      编辑:我想补充一点,如果我点击"输入' PwmOut'无法解决" "问题"中的错误消息窗口,Eclipse锁定几秒钟,然后崩溃堆栈溢出。

1 个答案:

答案 0 :(得分:1)

我很遗憾地说我的解决方案可能对其他人的Eclipse C ++问题没有普遍性或帮助。

解决方案:

  1. 在您的developer.mbed.org导出项目文件夹中,找到文件" device.h"位于

    的mbed子目录中
    ./mbed/TARGET_LPC1768/TARGET_NXP/TARGET_LPC176X/TARGET_MBED_LPC1768/device.h
    
  2. 我或多或少是空的。

    1. 将此device.h替换为LPC1768的one located at the mbed official repo
    2. 请注意,这个device.h中有更详细的信息。

      1. 重建Eclipse的索引。 Eclipse现在应该感到高兴。
      2. 我解释为什么这会解决Eclipse的问题:

        从developer.mbed.org导出项目时,它会为您提供包含所有来源的邮政编码,以及" ./ mbed"包含您正在使用的特定微控制器的头文件和对象的目录。

        大多数恩智浦/ ARM的控制器应该具有DigitalOut或DigitalIn类的一些变体,因为这种功能对于控制器来说是非常基本和通用的。但是,这个特殊的芯片(LPC1768)有一个独立的板载模块来处理脉冲宽度调制。可能无法在所有恩智浦/ ARM的芯片上找到此模块,因此您可以将此视为在Eclipse(如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类。