0

C でコード化された組み込みプロジェクトに megaAVR を使用しています。明らかな理由もなくデバイスがクラッシュすることがあります。コードに論理エラーがないことを意味します。

私の質問は、そのようなクラッシュが発生した場合に確認すべきことは何ですか?

私の提案: スタック - スタックの使用量が多すぎます。メモリ - 該当なし、malloc を使用しません。

もっと?どのような種類の AVR 固有のものでしょうか?

4

1 に答える 1

2

AVR MCU がクラッシュします [...]。何を確認すればよいですか?

MCU は「クラッシュ」しません。ハードウェア リセット条件のいずれかが満たされ、定義されたリセットが発生するか、ソフトウェア関連の問題によって未定義の動作が発生し、完全なリセットが発生したように見えることがあります。

実際にリセットが発生し、潜在的な原因があるかどうかを判断してください。最初のステップは、MCU 制御およびステータス レジスタ MCUCSR を評価することです。最新のリセットのソースに関する情報を提供します。

リセット フラグを使用してリセット条件を識別するには、プログラムのできるだけ早い段階で MCUCSR を読み出してリセットする必要があります。別のリセットが発生する前にレジスタがクリアされた場合、リセットフラグを調べることでリセットの原因を見つけることができます。

ソースのリセット:

  1. パワーオン リセット: Vcc が必要な最小値を下回った
  2. 外部リセット: リセット ピンでの低レベルのアサート
  3. ウォッチドッグ リセット: ウォッチドッグ タイマーの期限が切れました
  4. ブラウンアウト リセット: Vcc が構成されたブラウンアウト値を下回った
  5. JTAG AVR リセット: JTAG プログラマからのリセット コマンド

小切手:

  • これらのリセット フラグが設定されていない場合、またはチェックを行うアプリケーション エントリ ポイントに「リセット」が到達していない場合は、ソフトウェア関連の問題を探します。
  • Watchdog をまだ使用していない場合は、使用してください。
  • 現在の静的 SRAM 要件を確認し (avr-size.exe を使用)、実行時のスタック要件を見積もります。数百バイトの安全マージンを考慮する必要があります。
  • コードを減らして問題を絞り込みます。
于 2013-10-31T08:24:08.617 に答える