このトピックは非常に漠然としていることを理解しています....それで説明しようと思います。
IAR Workbench でプロジェクトに取り組んでいます。単純な if ステートメントなどの新しい機能を追加すると、コード構造全体が壊れてしまうところまで来ました。コードは正常にコンパイルされ、8051 デバイスに正常にダウンロードされますが、コードの起動シーケンスの途中で接続が失われます。スタック オーバーフローが発生しているようです。デバッガーを一時停止すると、XdataStack と IdataStack の値が低く (50% 未満)、レポートするスタック オーバーフローがないことがわかります。
実際、問題の原因となっているコードは、アプリケーションによって呼び出されることさえありません。
これは、コード内にある debug #define 定数を有効にするとさらに明白になります。これを有効にすると、より多くの文字列定数が uart デバッグ用のコードに組み込まれます。
私が実行した別のテストは、既に存在する関数で 100 文字の配列を作成することでした。
char hello[100];
memset(hello, 0x00, 100);
そして、これもコードを壊しているようです。
このデバイス (フラッシュ サイズが 128Kb の CC2540) がいっぱいになっていないかどうかを確認するために、確認すべきメモリ領域があるかどうか疑問に思っていました。
IAR では、次のことを確認できます。
- IDATA
- XDATA
- SFR
- 論理コード
- コード
- データ
- Pdata
私のプロジェクト構成に関する限り:
スタックサイズ:
- IDATA: 0xC0
- PDATA: 0x00
- XDATA: 0x280
ヒープ サイズ:
- XDATA: 0xFF
- ファー: 0xFFF
- Far22: 0xFFF ヒュージ: 0xFFF