2017-04-18 6 views
-2

私はCで書かれたアプリケーションをColdfireプロセッサ上で実行しています。Coldfireでレジスタの代わりにRAMを使用する

レジスタを使用する代わりに(関数で宣言された)すべてのローカル変数にRAMを使用する必要があります。アプリケーションを正しくデバッグするために必要です。

私はそれをどのように行うことができますか?より多くの情報

ため

編集は時々、メインアプリケーションでは、私が原因の機能から誤った戻り値にエラーが発生します。これはめったに起こりません。復帰命令の前にチェックとブレークポイントを入れますが、多くの変数が同じレジスタを使用しているため、エラーが発生したときの状況を明確に把握することはできません。関数の先頭でプログラムカウンタを移動し、ステップバイステップで結果が正しい場合。おそらくレジスタの管理に何か問題があり、それが何であるかを発見したいと思うでしょう。

ありがとうございます。

+0

単にデバッグスイッチをオンにしても機能しませんか? 'volatile'キーワードも試してください。 – Matt

+2

XYの問題。適切なデバッグのために、すべてのローカルをRAMに格納する必要はありません(そして、それはオペレータのためにどのように機能しますか?)。あなたのコードも大幅に遅くなります。 – Olaf

+0

時々、メインアプリケーションで、関数からの戻り値が間違っているためにエラーが発生することがあります。これはめったに起こりません。復帰命令の前にチェックとブレークポイントを入れますが、多くの変数が同じレジスタを使用しているため、エラーが発生したときの状況を明確に把握することはできません。 関数の先頭でプログラムカウンタを移動し、ステップバイステップで結果が正しい場合。おそらくレジスタの管理に何か問題があり、それが何であるかを発見したいと思うでしょう。 –

答えて

1

デバッグ目的のためにこれを行うには、通常の方法では

#ifdef DEBUG_RELEASE 
    volatile uint8_t x; 
#else 
    uint8_t x; 
#endif 

デバッグを完了したら、あなたはすべてのコンパイラスイッチを削除することができますのようなものです。しかし、彼らはあなたが偶然(非常に一般的な問題)の後ろにデバッグコードを残していないように、持っているのは良いです。

ほとんどのコンパイラでは、上記のように変数をRAMの場所に配置するだけで十分です。そうでない場合は、あなたが行くことができ、さらに一歩まだ:そのアドレスが使用されたため、今

volatile uint8_t x; 
    volatile uint8_t* dummy = &x; 

x RAMに割り当てられて取得する必要があります。

注:あなたがCodeWarriorのコンパイラを使用している場合、それはデフォルトで有効に最適化していたさまざまなバージョンに付属しています。デバッグでは、さまざまな最適化を手動で無効にする必要があります。

+0

答えをいただきありがとうございます。最適化レベルは既に0に設定されています。できるだけ早く解決策を試していきます。 –

関連する問題