2013-03-19 29 views

答えて

3

これは初期のGoogleの結果であるため、明確にするだけです。

__attribute__((__interrupt__(TIMER0_A0_VECTOR))) 
void __isr_5(void) 
{ 
     ... 
} 

は現在GCCはまだ構文上使用した場合、エラーが発生します(私はこれが約コメントarvindpdmn何であると考えています)。

internal compiler error: in msp430_attr, at config/msp430/msp430.c:1835 
{ 
^ 

問題がreport of this in the TI E2E community後、このために上げたが、問題はその「計画」状態のままであり、トラッカーにも属している人は不明であると述べました。 (上記のリンクのスレッドから問題にアクセスできます)

引数を持つ可能性のある属性だけがinterrupt属性であるため、コードを見ると明らかにエラーが発生しています。

実際には、先頭と末尾の下線が省略されていると、コンパイルは正常に機能します。

これは正しい構文です。

__attribute__((interrupt(TIMER0_A0_VECTOR))) 
void name_does_not_matter(void) 
{ 
     ... 
} 

そして実際には、この属性はdocumented in the official GNU GCC documentationです。振り返ってみると、最初にアンダースコアがどこから来たのかははっきりしていません。ですから、基本的に、ここでの唯一の問題は、エラーメッセージがあまり情報がないということです。

5

この情報は、MSPGCCのTi/Redhat/SOMNIUMポートよりも前のMSPGCC v4.6.3に適用され、現在はコードコンポーザースタジオで配布されています。

この回答はMspgcc-usersメーリングリストのPeter Bigotさんにありがとうございます。

は二つの可能性があります。

#pragma vector=TIMER0_A0_VECTOR  
__interrupt void 
ta0cc0_isr (void) 

(これはMspgccのバージョン20120406の周りのどこかに導入されたことに注意してください):使用コード作曲スタジオスタイルの構文は(CCSへの移植という付加的な利点を持っています)。

b。 C

static void 
__attribute__((__interrupt__(TIMER0_A0_VECTOR))) 
isr_cc0_TA0 (void) 

:ネイティブgccの構文を使用します。関数をベクトル表に含めるように関数の名前を正しく指定します(ASM関数に役立ちます)。

割り込み属性は、関数の名前を__isr_Xとします。ここで、Xは、ベクトルテーブルの開始からの割り込みのワードオフセットです(割り込み属性のパラメータの値を2で割ったものに等しい)。

これらのシンボルは、crt0ivtbl.oのベクタテーブルを初期化するために使用されます。

+0

CCSのアドオンとしてインストールされているGNU v5.3.0.219(SOMNIUM Technologies Limited)を使用している場合、これはCCS 6.2.0で私にとってはうまくいきませんでした。エラー: '内部コンパイルエラー:at msp430_attr、at '私が答えが見つからない場合、新しい質問を開始するかもしれません。 –

+1

Manualに「MSP430 GCCを使用して割り込みを定義するには、次の構文を使用してください: 'void __attribute__(interrupt(INTERRUPT_VECTOR)))INTERRUPT_ISR(void)' ISR定義でstaticキーワードを使用しないでください。 PDF:http://www.ti.com/lit/pdf/slau646 –

+0

このオリジナル情報は、2013年に存在しなかったTi/Redhatによって再実装される前のMSPGCCポートに適用されました。 –

関連する問題