3

Atmel Studio 6.2.1563 を使用して、ATXMEGA64A3U 用の GCC C++ 実行可能ビルドを作成しました。タイマー TCC1 をセットアップして、1 ミリ秒ごとにオーバーフロー割り込みを生成します。しかし、コンパイラは ISR 定義を無視しているようです。

ISR(TCC1_OVF_vect)
{
      Cyclic_Do();
}

デバッグ モードでは、タイマーが正しく機能しており、OVF 割り込みフラグが設定されていることがわかりますが、制御をサービス ルーチンに渡すことができません。

IDE メッセージ:The breakpoint (the one I set inside ISR function) will not currently be hit. Unable to set requested breakpoint on Target.

using extern "C" { }関連するcファイルのインクルージョンも試しました。他のタイマーを使用しようとすると、同じ問題が発生します。

提案のために開きます。

4

2 に答える 2

0

最終的に機能するように見えるのは、ISRを別のファイルに移動することです。しかし、奇妙なことに、宣言を使用する必要はありませんでした。extern "C" を使用して、ソース ファイルが .cpp であっても機能させることができました。

これが、atmel AT/Xmega コントローラーで C++ ビルドをセットアップしようとしている他の誰かに役立つことを願っています。

atmel サポートも機能することに注意してください。atmel スタジオ関連の質問に対して atmel から応答がありました。

于 2015-03-24T00:48:00.830 に答える
0

私も同じ問題に遭遇しましたが、ISR を別のファイルに移動するよりも満足のいく解決策を見つけることができました。

私の場合、フラグ ビットが設定されていましたが、ISR も呼び出されていませんでした。割り込みは、グローバルに、各優先度レベルで、UART ペリフェラルで有効にされました。Atmel Studio 7 SMART コード生成ツールを使用しています。

START ツールの PMIC タブで [IVSEL: Interrupt Vector Select] のチェックを外した後、ISR でブレークポイントをヒットできました。このタイプの問題には多くの原因が考えられるようですが、IVSEL ビットをチェックするために書いている人は他に見つかりませんでした。

SMART ツールは、このビット セットで動作するコードを生成できる (理想的には生成する必要がある) と思いますが、関数は必要ないので、その謎を手放します。

于 2018-02-02T02:05:38.230 に答える