私がプロジェクトで使用しているRAMの量を知りたいのですが、私が知る限り、実際にそれを実行する方法はありません(自分で計算して計算する以外に)。私はRAMが不足していると判断したかなり大きなプロジェクトの段階に到達しました。
セクションを追加すると、明確な理由もなく、コードのどこかですべての地獄が崩れるため、これを決定しました。私が#ifndef
何か他のものを出したら、それは再び機能する。新しいコードにはプログラム的に問題はありません。
しばらくの間、使用可能なRAMの限界に近づいているのではないかと疑っていました。スタックを使いすぎているとは思いませんが(可能ですが)、実際に使用しているRAMの量を判断する最良の方法は何ですか?
調べて解決しようとすると、列挙型と構造体を取得するときに問題が発生します。どのくらいのメモリがかかりますか?
最初の編集:また、私は開始以来スケッチを非常に編集しました、これらは私が最初に得た実際の結果ではありませんが、私が今得ているものです。
text data bss dec hex filename
17554 844 449 18847 499f HA15_20140317w.cpp.elf
16316 694 409 17419 440b HA15_20140317w.cpp.elf
17346 790 426 18562 4882 HA15_20140317w.cpp.elf
最初の行(テキスト17554を含む)は多くの編集の後、機能していませんでしたが、2番目の行(テキスト16316を含む)は正常に機能しています。
編集:3行目には、すべての機能、シリアル読み取り、私の新しい関数などがあります。本質的にいくつかのグローバル変数を削除し、コードを複製しました。私はこれを言及しています(疑わしいとして)それはsaeごとのこのコードに関するものではなく、RAMの使用量に関するものでなければならないからです。これで元の質問「どのように最適に測定するか」に戻りますが、まだいくつかの答えをチェックしています。ありがとう。
上記の情報を実際にどのように解釈しますか?
これまでのところ、私の理解は次のとおりです。
`TEXT` is program instruction memory
`DATA` is variables (unitialised?) in program memory
`BSS` is variables occupying RAM
BSSは1024バイトよりかなり小さいので、なぜ2番目は機能しますが、最初は機能しないのですか?その場合DATA+BSS
、両方が1024以上を占有します。
再編集:コードを含めるように質問を編集しましたが、実際には問題とは何の関係もなかったため、削除しました(コーディングプラクティス、変数宣言などの問題を除く)。本当に見たい場合は、編集内容を振り返ってコードを確認できます。手元の質問に戻りたいと思いました。これは、RAM使用量の測定方法に基づいています。
String
プログラムでtype を使用していますか?これは頻繁に動的なメモリの割り当てと解放を実行することが知られており、メモリを残さないようにヒープを断片化する場合があります。
String
オーバーヘッドのためにsから離れています。私は言ったchar配列、と幸せ働いている、私はほとんど常に固定サイズですべての私のchar配列を定義します(現時点では、私は別の再コンパイルのためのコンテンツの長さを変更するので、純粋でないONEバイト配列を持っています。