mspgcc コンパイラと連携するために Eclipse と CDT を使用しています。コンパイルは正常に行われますが、コード ビューではすべての特殊関数レジスタが未解決として強調表示されます。
コンパイラが "msp430-gcc -mmcu=msp430x2012" である C プロジェクトを作成しました。これは、/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
}
P1OUT や WDTCTL などの mspgcc インクルードで定義されているすべての変数は、問題ボックスに「未解決」として表示されますが、正常にビルドされることを覚えておいてください。チップのヘッダー ファイルを明示的にインクルードすることも試みました (通常、msp430-gcc は、msp430.h と -mmcu オプションを介してこれを行います)。