2

AVR Freaks フォーラムで回答が得られないので、ここの誰かが助けてくれるのではないかと考えています。

答えはこの SO questionにあるかもしれませんが、なぜそれが必要なのかわかりません。

基本的に、私は最初の Atmel プロジェクト (AVR studio 6、UC3 プロセッサ) を持っています。コードがコンパイルおよびリンクされ、それを Atmel ボードにロードして、デバッガーでステップスルーできます。

ただし、sprintf()、malloc()、または memcpy() への (有効な) 呼び出しをステップ オーバー (または後の行のブレークポイントまで実行) しようとすると (他にもあるかもしれませんが、まだ発見していません)、 IDE が私のコードの次の行に戻ることはありません。

[注意] コンパイラの最適化はオフです

いくつかのリンカ オプションを設定する必要がありますか (例: リンク スタティック (試してみましたが役に立ちませんでした)? または、いくつかのライブラリでビルドしますか?

私を混乱させるのは、コード コンパイラとリンクです。これらの標準関数を呼び出すと、何がリンクされますか? 他に何か必要な場合は、コンパイラまたはリンカのエラーが発生することが予想されますが、何も発生しません。なぜコードが実行されないのでしょうか?

このようなばかげた n00nb の質問で申し訳ありませんが、これは私の最初のマイクロ コントローラー プロジェクトです。

4

3 に答える 3

2

ボード上のCPUはエンジニアリングサンプルであり、新しいio.hファイルがないとAtmelStudioでサポートされていないことがわかりました。

私はこの質問からそれを理解しました: http ://www.avrfreaks.net/index.php?name = PNphpBB2&file = viewtopic&t = 106652

ご迷惑をおかけして申し訳ありません。

于 2013-03-05T05:36:47.040 に答える
1

これらの標準関数を呼び出すと、何がリンクされますか?

AVR-libc、AVRプラットフォームに移植されたC標準ライブラリの実装。

では、なぜ私のコードは実行されないのですか?

コンパイラエラーとランタイムエラーは関連していません。これらの行は両方とも有効なCであり、コンパイルされますが、ほとんどのシステムでは、コアをダンプすることを期待しています。

int x = 1 / 0;
*(int *)0 = 41;

したがって、次のいずれかになります。

  • 標準ライブラリのバグ(非常にまれです)、または
  • オンラインデバッガーのバグ(非常にまれです)、または
  • 多分あなたはただ起こるはずのない何かを期待していますか?
于 2013-02-16T07:06:31.450 に答える
1

ステップ オーバーしようとする代わりに、ステップ オーバーしたい行の次の行にブレークポイントを設定するとどうなりますか?

また、コンパイラの最適化をオフにすると動作は変わりますか?

于 2013-02-16T12:33:26.810 に答える