見出し画像

【TRACE32 Tips】ロガートレースの利用

ハードウェアトレース機能が搭載されていないターゲットで、TRACE32 を利用してトレースを行う方法を解説します。

ロガー(LOGGER)トレースについて

ロガートレースは、ハードウェアベースのトレース機能が利用できない環境における利用を想定しています。
ロガートレースは、TRACE32 のトレース形式を利用して、ターゲットメモリ(RAM)に特定のトレース情報を書き込む、ソフトウェアトレースメソッドです。(以下、ターゲットメモリ上のデータブロックイメージ)

ロガーデータブロック構成

ターゲットメモリ上に保存したデータを、TRACE32 が取り出し、トレースデータとして利用します。そのため、ターゲットアプリケーションへの変更(インスツルメント)が必要になります。

ロガートレース用ソース/ヘッダーファイル

TRACE32 ソフトウェアをインストールしたフォルダ配下に、ロガートレースのコンパイル、リンクに必要なヘッダーファイル、ソースファイルがあります。
以下は、TRACE32 を C:\T32 にインストールした場合のフォルダ名です。C:\T32\demo\etc\logger
C/C++ 用のソースとヘッダファイルが用意されています。

  • ヘッダーファイル

    • logger.h または、logger.hpp

  • ソースファイル

    • logger.c または、logger.cpp

ソースファイルは、コンパイルし、測定対象のプログラムとリンクする必要があります。

測定対象コードへのインスツルメント

 #include  <logger.h>  // ロガートレス用ヘッダ

int main(void)
{
    int        j;
    short int  inc, sign;
    char      *p;
    T32_LoggerInit();  // ロガートレース初期化

    do {
        mcount++;
        T32_LoggerData(T32_DATA_WRITE|T32_LONG, &mcount, mcount); // トレースコード(1)

        inc  = (4 * 15000) / period;
        sign = ( (mcount % period) >= period/2 ) ?  -1 : +1;
        plot1 = plot1 + sign * inc;
        T32_LoggerData(T32_DATA_WRITE|T32_LONG, & plot1, plot1);  // トレースコード(2)

        func2();
        func2a();
        func2b();
        func2c();
        func2d();

上記のコード内では、ロガートレース用にコードを3か所埋め込んでいます。

  • ロガートレース用ヘッダ

    • ロガートレースに必要なヘッダのインクルードです。

  • ロガートレース初期化

    • ロガートレースを初期化します。

  • トレースコード(1)

    • 変数 mcount の値をトレースします。

  • トレースコード(2)

    • 変数 plot1 の値をトレースします。

TRACE32 設定

TRACE32 へ行う設定です。
TRACE32 のメインメニューの [トレース(T)] から、[設定(C).…]を選択して Trace 設定ダイアログを開きます。

トレースの設定

「METHOD」より、「LOGGER」を選択します。

ロガートレース紹介動画

以下 は、実際にロガートレースを動作させたデモ動画です。

TRACE32 ロガートレース 基本
ロガートレースの基本的な設定方法、簡単な動作のデモです。

TRACE32 ロガートレース OS プロファイリング
ロガートレースのを利用し、Tricore™ AURIX™ 上で RTOS(Erika Enterprise)のタスクを認識させて計測、表示させる動作のデモです。

関連ページ、ドキュメント

以下のフォルダにロガー機能を説明したドキュメントがあります。併せてご参照ください。

  • <TRACE32インストールフォルダ>\pdf\app_logger.pdf

  • 上記ドキュメントは、以下のURL からも参照可能です。

    • https://www.lauterbach.com/pdf/app_logger.pdf