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. カーネルモジュールプログラミング(割り込みハンドラ)
- 3. i2c割り込みハンドラstm32
- 4. オペレーティングシステムの割り込みハンドラ
- 5. 割り込みハンドラのコンテキストスイッチ
- 6. 割り込みハンドラでargsを渡す
- 7. ISR(割り込みサービスルーチン)でのセマフォのような同期
- 8. トラップハンドラ、例外ハンドラ、割り込みハンドラとシステムコールとの違いは?
- 9. GPIOピンlinux(arm)の割り込みハンドラ
- 10. ARM GIC Linaro GCCの割り込みハンドラ
- 11. セルフ製キーボード割り込みハンドラ
- 12. CodeSourcery CS3割り込みハンドラのオーバーライド
- 13. 8051で外部割り込みサービスルーチン(ISR)を終了する方法
- 14. linuxのアーム割り込みハンドラはどこですか?
- 15. 割り込みハンドラがFIFOに書き込むことができます
- 16. arduino割り込みサービスルーチン内で関数ポインタを使用してISRを変更する方法は?
- 17. トリガーカーネル割り込みハンドラ:どのように?
- 18. 割り込みを処理するプログラムはどこにありますか?つまり、割り込みハンドラは保存されていますか?
- 19. 組み込みノードクラス用のサルパッチを外部で宣言する
- 20. Matlab - ハンドラを使用したprocessusの割り込み
- 21. どこに計算を入れますか?割り込みハンドラまたはメインループの内部? (埋め込みリアルタイムアプリケーション)
- 22. 割り込みハンドラに入った後、ハードウェア上の割り込みを禁止することは強制的ですか?
- 23. TRAP、ソフトウェア割り込みとハードウェア割り込みの違いは?
- 24. 埋め込みボディパラメータをswagger yamlフォーマットで宣言する方法
- 25. 割り込みハンドラの中にprintkがありますが、それは本当に悪いですか?
- 26. ハンドラの宣言が機能しない
- 27. 割り込み中に割り込みを無効にする必要はありますか?
- 28. 共有割り込みラインの場合、使用する割り込みハンドラはどのようにして見つけられますか?
- 29. getTimeで動作する割り込み/割り込み関数の実行
- 30. アンドロイドは、XMLデータバインディングで組み込みデータ型を宣言できます
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ポートに適用されました。 –