普段ヒープメモリってどのくらい使用されているのか、十分なのかモニターしたことってありますか?
通常は、ヒープメモリを動的にモニターできるツールってそんなに無いので、適切なヒープメモリ容量を設定することが難しいですよね?
今回は、そんなヒープメモリのモニタリング方法をMCUXpresso IDEを使って紹介したいと思います。
是非参考にしてください。
コンテンツ
やりたいこと
やりたいことは単純です。
ヒープメモリの使用量をチェックすることです。
ここでは、FreeRTOSを使っている場合とそうでない場合で方法が異なります。
FreeRTOSを使っている場合は、MCUXpresso IDEのFreeRTOSプラグインを使用した方法で設定方法も超簡単です。
問題は、FreeRTOSを使用していない場合なんです。
ふつうは難しいのですが、ちょっとしたアイディアでチェックする方法を紹介します。
統合開発環境
NXPのマイコンは、完全無償で使用できる「MCUXpresso IDE」を使用します。
MCUXpresso IDEのダウンロードヒープメモリのモニタリング方法
FreeRTOSを使っている場合は超簡単!!
FreeRTOSを使用している場合は、MCUXPresso IDEのツールバーから以下のように設定するだけです。

ヒープメモリの使用量のモニタリング

どうでしょうか?簡単ですよね。

ですが、どうしても標準C関数を使用したりするケースがあると思いますが、その場合は「FreeRTOSのヒープメモリ管理」を使用することができません。次に紹介する方法などでヒープ容量をチェックすることができるので参考にしてください
FreeRTOSを使っていない場合
さて、次にFreeRTOSを使用していない場合、ベアメタルのケースです。または、上記のFreeRTOSConfig.hのヒープスキームの設定で「Heap4」以外を使用した場合(例:Heap 3)も同様にMCUXpressoのモニタリングツールは使用できないので、次の方法でヒープ容量をチェックできます。
この場合は先ほどと違いGUIメニューやグラフィック画面でのモニタリングツールはありません。原始的な方法でモニタリングします。
「Expression View」を使います
「Expression View」は、MCUXpressoのツールバーから、Window – Show View – Others… – Debug – Expressionsをクリックすると表示されます。


そして、表示された「Expressions」に以下の式を入力します。コピペでOKです。
使用済みサイズ:
((unsigned int)__end_of_heap)-((unsigned int)&_pvHeapStart)
空きサイズ:
((unsigned int)&_pvHeapLimit)-((unsigned int)__end_of_heap)
ヒープ合計サイズ:
(unsigned int)&_pvHeapLimit-(unsigned int)&_pvHeapStart

デバッグを開始してステップ実行すると、上記のようにヒープサイズをモニタリングすることが可能です。
尚、上記の変数は、リンカーファイルに配置されている変数を利用しています。
最後に
今回はヒープメモリのモニタリング方法を紹介しました。適切なメモリ容量やヒープメモリの割り当てサイズなどの決定に有効なので是非参考にしてください。