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 オプションを介してこれを行います)。