マイクロコントローラ プログラミングのコンテキストでの C/C++ では、グローバル変数が使用するメモリの量を確認するにはどうすればよいですか (新しいデータまたは malloc で割り当てられたデータはカウントされません)。
1 に答える
3
gcc を使用して実行可能ファイル/ファームウェアをリンクしている場合は、オプション-Map=memory.map
をコマンド ラインに追加できます。
そのファイルには、次のようなものがあり、RAM の場所がわかります。
Memory Configuration
Name Origin Length Attributes
FLASH 0x00014000 0x0002c000 xr
RAM 0x20002000 0x00002000 xrw
*default* 0x00000000 0xffffffff
RAM のアドレスに注意してください ( 0x20002000
)。後で、RAM 内のグローバル変数のアドレスを見つけることができます。アドレスの違いから、サイズがわかります。
.bss 0x20002924 0x94 C:/Users/...../main.cpp.o
0x20002924 i2c
0x20002934 ex1
0x20002948 ex2
0x2000295c sensorI2C
0x20002978 sensorSPI0
0x2000299c sdCard
最初の列 ( .bss
) は、初期化されていないグローバル変数が格納されているデータ セグメントにいることを示しています。2 番目の列はアドレスです (上記と比較すると RAM 内にあることがわかります。3 番目の列 ( 0x94
) は で使用される合計サイズを示しmain.cpp
、最後の列はソース ファイル名とシンボルを示します。
注:初期化された「Plain Old Data」グローバル変数 (例: int a = 1;
) は.data
セグメントに入るので、そこも見てください! (Thanks Paul) C++ コンストラクターで初期化された変数は、引き続き.bss
. とにかく両方のセグメントをチェックしてください。
于 2014-07-25T12:35:49.523 に答える