【TRACE32 Tips】ベアメタル環境下でのスタックメモリ使用量の可視化
組込み用途のマイコン上で動作するベアメタルアプリケーションのスタックの使用状況をCソースレベルデバッグの最中に確認したい場合、TRACE32デバッグツールの"TASK.STacK"コマンドで実現できます。
スタック使用量表示の概要
次のような考え方で実現しています。
予めスタックとして使用している領域のメモリの内容を、特定の値(例えば、0xA5)でメモリフィル。
プログラムが動作し、スタックメモリが使用され、使用された箇所の値が特定の値(例:0xA5)以外の値に書き換わる。
そこからスタックの使用状況を導き出し、画面に表示。
設定スクリプト
上記の考え方に基づき、TRACE32デバッガソフトウェア内で実施するサンプルスクリプト(PRACTICEスクリプト)を紹介します。
; .stack セクションを 0xA5 でメモリフィル
Data.Set sYmbol.SECRANGE(.stack) %Byte 0xa5
; スタックパターンを設定
TASK.STacK.PATtern %Byte 0xa5
; スタック使用ウィンドウの表示
TASK.STacK.view
; 一つの"タスク"として取り扱うためのID設定(ここでは、0x100に設定)
TASK.STacK.ADD 0x100 sYmbol.SECRANGE(.stack)
; タスクに名称を設定
TASK.NAME.Set 0x100 "main"
次のスクリーンショットは、実際にサンプルプログラムを使って、スタック使用量を算出し、表示したものになります。
表示している時点では、確保していたスタック領域の87%まで使用されていることが見てとれます。
実際の開発時には、試験などを行いながら、同時にスタックメモリの使用状況も確認し、適切なサイズのスタックメモリを確保することに役立てられるはずです。