mspgccで割り込みハンドラを宣言するための好ましい方法は何ですか?Mspgccで割り込みハンドラ(ISR)を宣言するには?
答えて
これは初期の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です。振り返ってみると、最初にアンダースコアがどこから来たのかははっきりしていません。ですから、基本的に、ここでの唯一の問題は、エラーメッセージがあまり情報がないということです。
この情報は、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のベクタテーブルを初期化するために使用されます。
- 1. I2C ISRおよび割り込み
- 2. i2c割り込みハンドラstm32
- 3. 割り込みハンドラのコンテキストスイッチ
- 4. オペレーティングシステムの割り込みハンドラ
- 5. 割り込みハンドラでargsを渡す
- 6. CodeSourcery CS3割り込みハンドラのオーバーライド
- 7. GPIOピンlinux(arm)の割り込みハンドラ
- 8. 割り込みハンドラがFIFOに書き込むことができます
- 9. トリガーカーネル割り込みハンドラ:どのように?
- 10. どこに計算を入れますか?割り込みハンドラまたはメインループの内部? (埋め込みリアルタイムアプリケーション)
- 11. 割り込みハンドラに入った後、ハードウェア上の割り込みを禁止することは強制的ですか?
- 12. 割り込み中に割り込みを無効にする必要はありますか?
- 13. 割り込みハンドラの中にprintkがありますが、それは本当に悪いですか?
- 14. 共有割り込みラインの場合、使用する割り込みハンドラはどのようにして見つけられますか?
- 15. タイマ割り込みはNMI ..ですか?
- 16. 単純な割り込みハンドラ:request_irqがエラーコード-22を返します
- 17. 変数のみを読み込むにはグローバル変数を宣言する必要がありますか?
- 18. 組み込みArrayList <Integer>をローカルで宣言されたArrayList <Integer>に割り当てることができないのはなぜですか?
- 19. ゲームで割り込み画面を作成するには?
- 20. 他の割り込みベクタ内の割り込みベクタを呼び出す
- 21. python gtkによるキーボード割り込み?
- 22. jquery割り込みJavascriptの読み込み中にjquery-1.7.1.min.js
- 23. 組み込みタイプのオブジェクトを宣言する際に問題があります
- 24. jQuery/JavaScript:割り込みイベントですか?
- 25. 割り込みノコギリSAXパーサ?
- 26. libusb割り込み転送
- 27. タスクゲート、割り込みゲート、コールゲート
- 28. jQuery - 割り込みアニメーション?
- 29. イメージアップロード - ローカルホスト割り込み
- 30. 割り込みfadeTo関数
CCSのアドオンとしてインストールされているGNU v5.3.0.219(SOMNIUM Technologies Limited)を使用している場合、これはCCS 6.2.0で私にとってはうまくいきませんでした。エラー: '内部コンパイルエラー:at msp430_attr、at '私が答えが見つからない場合、新しい質問を開始するかもしれません。 –
Manualに「MSP430 GCCを使用して割り込みを定義するには、次の構文を使用してください: 'void __attribute__(interrupt(INTERRUPT_VECTOR)))INTERRUPT_ISR(void)' ISR定義でstaticキーワードを使用しないでください。 PDF:http://www.ti.com/lit/pdf/slau646 –
このオリジナル情報は、2013年に存在しなかったTi/Redhatによって再実装される前のMSPGCCポートに適用されました。 –