如何让EclipseCDT理解MSPGCC(MSP430)包含的内容?

如何让EclipseCDT理解MSPGCC(MSP430)包含的内容?,eclipse,eclipse-cdt,msp430,Eclipse,Eclipse Cdt,Msp430,我使用Eclipse和CDT与mspgcc编译器一起工作,它编译得很好,但是代码视图突出显示了我的所有特殊函数寄存器未解析 我制作了一个C项目,其中编译器是“msp430gcc-mmcu=msp430x2012”,设置为在/usr/msp430/include/中查找include。我已将链接器设置为“msp430gcc-mmcu=msp430x2012”,并将其设置为在/usr/msp430/lib/中查找库。我已将汇编程序设置为“msp430 as”。我已经告诉eclipse它正在制作一个e

我使用Eclipse和CDT与mspgcc编译器一起工作,它编译得很好,但是代码视图突出显示了我的所有特殊函数寄存器未解析

我制作了一个C项目,其中编译器是“msp430gcc-mmcu=msp430x2012”,设置为在/usr/msp430/include/中查找include。我已将链接器设置为“msp430gcc-mmcu=msp430x2012”,并将其设置为在/usr/msp430/lib/中查找库。我已将汇编程序设置为“msp430 as”。我已经告诉eclipse它正在制作一个elf,并且我已经禁用了automatic includes discovery,以便在我的linux机器上找不到i686库(愚蠢的eclipse!)

代码如下:

#include <msp430.h>
#include <signal.h> //for interrupts

#define RED 1
#define GREEN   64
#define S2VAL   8

void init(void);

int main(void) {
  init();       //Setup Device

  P1OUT = GREEN;    //start with a green LED

  _BIS_SR(LPM4_bits);   //Go into Low power mode 4, main stops here

  return(1);        //never reached, surpresses compiler warning
}

interrupt (PORT1_VECTOR) S1ServiceRoutine(void) {
  //we wake the MCU here

  if (RED & P1IN) {
    P1OUT = GREEN;
  } else {
    P1OUT = RED;
  }

  P1IFG = 0;    //clear the interrupt flag or we immidiately go again

  //we resume LPM4 here thanks to the RETI instruction
}

void init(void) {
  WDTCTL = WDTPW + WDTHOLD;     // Stop WDT
  /*Halt the watchdog timer

  P1DIR = ~S2VAL;       //Set LED pins as outputs and S2 as input

  P1IES = S2VAL;        //interrupt on High to Low
  P1IE = S2VAL;         //enable interrupt for S1 only
  WRITE_SR(GIE);        //enable maskable interrupts
}
#包括
#包括//中断
#定义红色1
#定义绿色64
#定义S2VAL 8
void init(void);
内部主(空){
init();//安装设备
P1OUT=绿色;//从绿色LED开始
_BIS_SR(LPM4_位);//进入低功耗模式4,主要停止在此处
return(1);//从未到达,超出编译器警告
}
中断(端口1_向量)S1ServiceRoutine(无效){
//我们在这里唤醒MCU
if(红色和P1IN){
P1OUT=绿色;
}否则{
P1OUT=红色;
}
P1IFG=0;//清除中断标志,否则我们立即再次执行
//由于RETI的指示,我们在这里恢复LPM4
}
void init(void){
WDTCTL=WDTPW+WDTHOLD;//停止WDT
/*停止看门狗定时器
P1DIR=~S2VAL;//将LED引脚设置为输出,将S2设置为输入
P1IES=S2VAL;//从高到低中断
P1IE=S2VAL;//仅为S1启用中断
WRITE_SR(GIE);//启用可屏蔽中断
}

mspgcc中定义的所有变量,如P1OUT和WDTCTL,在问题框中显示为“未解决”,但请记住,它构建得很好。我甚至尝试过显式包含我芯片的头文件(通常msp430 gcc通过msp430.h和-mmcu选项来实现)。

我通过显式包含msp430g2553.h文件解决了这个问题

#include <msp430g2553.h>
#包括

我按照说明解决了这个问题

我也这样做了,尽管我把它放在了
#ifndef编译
之类的东西中。然后在我的Makefile中,我将
-DCOMPILING
添加到CFLAGS中。请注意,虽然我没有使用Eclipse,但我使用了带有youcompleteme插件的Vim,但我认为Eclipse足够聪明,可以处理类似的事情。