我正在使用 Eclipse 和 CDT 与 mspgcc 编译器一起工作,它编译得很好,但是代码视图将我所有的特殊函数寄存器突出显示为未解析。
我创建了一个 C 项目,其中编译器是“msp430-gcc -mmcu=msp430x2012”,它设置为在 /usr/msp430/include/ 中查找包含。我已将链接器设置为“msp430-gcc -mmcu=msp430x2012”,并且设置为在 /usr/msp430/lib/ 中查找库。我已将汇编器设置为“msp430-as”。我告诉 eclipse 它正在制作一个精灵,并且我禁用了自动包含发现以在我的 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
}
mspgcc 中定义的所有变量包括 P1OUT 和 WDTCTL 在问题框中显示为“未解决”,但请记住它构建得很好。我什至尝试过明确地包含我的芯片的头文件(通常 msp430-gcc 通过 msp430.h 和 -mmcu 选项执行此操作)。