我使用GNU gcc ARM嵌入式工具链(而非gcc4mbed)设置了Eclipse C ++-版本:Neon发行版(4.6.0)-内部版本号:20160613-1800。该工具链很好用,但是在我的最新项目中遇到了(我认为)Eclipse索引器的问题。
如果我给出重现问题的步骤,我的问题应该很清楚:
创建一些类并#include“ mbed.h”
声明一些DigitalOut类型的成员变量。请注意,Eclipse可以很好地识别它,因为文本变为粗体,并且在与变量进行交互时代码完成工作正常。
声明另一个类型为PwmOut的成员变量。请注意,Eclipse无法识别这一点,文本不会变为粗体,并且代码完成功能也无法正常运行,因为Eclipse不知道PwmOut是什么。 Eclipse说:
错误(1个项目)
类型'PwmOut'无法解析。 -main.cpp-语义错误
构建项目成功完成,即使Eclipse仍无法识别PwmOut,编译器也不会抛出任何错误。二进制在我的LPC1768上正确运行。
Eclipse如何识别DigitalOut但不能识别PwmOut?两者都在mbed.h的同一代码块中列出-DigitalOut.h与PwmOut.h处于同一目录中。
如果有帮助,我从developer.mbed.org导出了here is an example project,您可以将其作为现有Makefile项目导入Eclipse C ++。
我尝试调整发现的建议,例如在Project-> Properties-> C / C ++ General-> Paths and Symbols-> Includes中添加带有这些标头的目录,重建索引,并“刷新”索引中的所有文件。我只是无法让Eclipse识别它们。
编辑:我想补充一点,如果我单击“问题”窗口中的“类型'PwmOut'无法解析”错误消息,Eclipse将锁定几秒钟,然后崩溃并出现堆栈溢出。
最佳答案
很遗憾地说,我的解决方案可能不是很通用,或者对其他人的Eclipse C ++问题没有帮助。
解:
在您的developer.mbed.org导出的项目文件夹中,找到位于mbed子目录中的文件“ device.h”
./mbed/TARGET_LPC1768/TARGET_NXP/TARGET_LPC176X/TARGET_MBED_LPC1768/device.h
我的或多或少是空的。
用LPC1768的one located at the mbed official repo替换该device.h。
请注意,该device.h中有更多详细信息。
重建Eclipse的索引。 Eclipse现在应该很高兴。
我对为什么解决Eclipse问题的解释:
从developer.mbed.org导出项目时,它会为您提供一个包含所有源代码的zip文件,以及一个“ ./mbed”目录,其中包含您正在使用的特定微控制器的头文件和对象。
恩智浦/ ARM的大多数控制器应该具有DigitalOut或DigitalIn类的某些变体,因为这种功能非常基本且对于控制器来说是通用的。但是,该特定芯片(LPC1768)板载一个独立模块来处理脉冲宽度调制。该模块可能无法在所有NXP / ARM芯片上找到,因此可以将其视为在Eclipse等IDE中设置工作区环境时需要注意的特殊情况。
特别是,mbed导出的项目包含一个标题(对我来说)位于
./mbed/TARGET_LPC1768/TARGET_NXP/TARGET_LPC176X/TARGET_MBED_LPC1768/device.h
该设备标头应定义特定于您正在编程的设备的预处理器指令。我的是空的,but the one at the official repo for the LPC1768中有很多此控制器的#define。只要将device.h中的DEVICE_PWMOUT指令定义为等于1(且等于1),Eclipse就会知道它应该识别PwmOut类。
关于c++ - 为什么Eclipse的索引器可以识别某些类,而不能识别其他类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39553139/