2

Lauterbach TRACE32 を使用して、アプリケーションの実行中にスタックによって消費されるメモリの量を測定する方法は?

PowerPC CPU で AUTOSAR OS を使用しています。

4

1 に答える 1

3

タスクのスタックによって消費されるメモリを知りたい場合は、window を参照するのが最も簡単な方法だと思いますTASK.STacK.viewTASK.STacK.view作業を開始するには、次のことを確認してください

  • TASK.ORTIAUTOSAR またはTASK.CONFIGその他のターゲット OS 用に、(ELF をロードした後に) デバッガーの OS 認識をセットアップします。
  • タスクのスタックをマジック パターンで初期化します。これは、OS の開始コードまたは TRACE32Data.Setコマンドで実行できます。
  • TASK.STacK.PATternOS 認識によって検出されない場合は、 command を使用してデバッガーにマジック初期化パターンを宣言する可能性があります。

ベアメタル アプリケーションのスタックによって消費されるメモリを知りたい場合は、PRACTICE スクリプトを使用してこれを確認する必要があります。

ここでの基本的な考え方は、(アプリケーションの開始前に) 固定パターンでスタックを初期化し、後でスタックのどの割合が初期化パターンを含まなくなったかを確認することです。

これは、次の 3 つの手順で行うことができます。

最初に、次のように ELF をロードした後、魔法のパターンでスタックを初期化します (または、アプリケーションのスタートアップ コードでこれを行います)。

GLOBAL &lowAddr &highAddr &magicPattern
&lowAddr=ADDRESS.OFFSET(__stack_start)   // assign here the upper border of the addressrange occupied by your stack
&highAddr=ADDRESS.OFFSET(__stack_end)-1  // assign here the lower border of the addressrange occupied by your stack 
&magicPattern=0xCCCCCCCC   // any 32-bit you like which appears unlikely on the used part of the stack 
Data.Set &lowAddr--&highAddr %Long &magicPattern   // initialize the stack

次に、スタックの使用状況を確認するスクリプト (stackcheck.cmm) を次のように作成します。

PRIVATE &lowAddr &highAddr &pattern &addr
ENTRY   &lowAddr &highAddr &pattern

IF ("&lowAddr"=="")||("&highAddr"=="")||("&pattern "=="")
(
    PRINT %ERROR "At least one of the 3 required parameters is missing"
    ENDDO
)
VAR.NEWGLOBAL int \stacksize=0
VAR.NEWGLOBAL int \stackusage=0

&addr=&lowAddr   
WHILE (Data.LONG(D:&addr)==&pattern)&&(&addr<&highAddr)
    &addr=&addr+4

Var.Set %SPaces \stacksize = (&highAddr - &lowAddr) + 1
Var.Set %SPaces \stackusage = (&highAddr - &addr) + 1
Var.View \stacksize \stackusage (100*\stackusage)/\stacksize    // Show result
ENDDO

(スタックのアドレス範囲を検索する方法を最適化することをお勧めします。)

最後に、スクリプトを呼び出して、現在のスタック使用量を次のように検出します。

DO stackcheck.cmm &lowAddr &highAddr &magicPattern

スタックの使用状況をかなり頻繁に確認したい場合はMENU.AddTool、TRACE32 のツールバーにそのためのボタンを作成するために使用することができます。

于 2016-11-29T21:24:13.697 に答える