3

組み込みソフトウェア コースの課題に取り組んでいますが、奇妙な問題が発生しています。

以下のコードを使用します。

void decidePotato(float held)
{
    printf("Deciding Potato, held for %f seconds \n", held);
    if (held >= 1.99)
    {
        printf("Held for more than 1.99s \n", held);
        returnPotato();
    }
    printf("I evaluated the if statement above \n");

}

次の出力が得られます。

Deciding Potato, held for 0.010000 seconds

「上記のifステートメントを評価しました」というメッセージすら表示されないため、プログラムはそのifステートメントの評価に何らかの形で行き詰まりました。そして、ボードを再プログラムするまでスタックしたままになります。

4

3 に答える 3

0

あなたのプログラムが本当にスタックしている場合は、 を呼び出してスタックをオーバーフローさせたのではないかと思いますprintf()。次に、プログラムが未定義のメモリへのジャンプまたはジャンク ポインターの逆参照を試みて例外を発生させ、既定の例外ハンドラーで無限ループにロックされています。 printf組み込みの世界では贅沢です。特に、複雑なデバイス ドライバーに書き込みを行っている場合や、ドライバーが大量のメモリを使用している場合は、それを処理するのに十分な大きさのスタックが必要です。

スタック サイズを利用可能な最大値に変更し、プログラムが変更されるかどうかを確認します。

(使用されていない余分な引数を printf() に持っていても問題ありません。それは良い考えではありませんが、単に無視されます。

于 2013-07-15T22:24:10.740 に答える