4

マイクロコントローラ プログラミングのコンテキストでの C/C++ では、グローバル変数が使用するメモリの量を確認するにはどうすればよいですか (新しいデータまたは malloc で割り当てられたデータはカウントされません)。

4

1 に答える 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 に答える