イベントトラッカー
概要
タスク、割り込み、タイマハンドラの実行時間や遷移を、 時間軸に沿って記録し、グラフィカルに表示する機能です。
イベントトラッカー が記録する状態遷移イベントの種類
タスクの状態遷移
割り込みハンドラの起動/終了
アラームハンドラの起動/終了
周期起動ハンドラの起動/終了
使い方
イベントトラッカー を使用するための準備
イベントトラッカー が記録するイベントデータはターゲットの RAM 上に保存します。 その領域を確保するコードを IMPL_EVTTRK_Init() として実装してください。
イベントトラッカー の有効化
イベントトラッカー を有効にするためには、 ソリューションプロパティファイルに記述されているSOLID-OSの コンフィグレーション中で LibEventTracker を true に変更します。
...
<PropertyGroup Label=”UserMacros”>
...
<LibEventTracker>true</LibEventTracker>
...
</PropertyGroup>
...
Note
ソリューションプロパティファイルを変更した場合は、ソリューションを読み直し、 リビルドしてください。
イベントトラッカー の API
イベント記録の開始/停止を制御や、記録から除外するイベントの指定ができます。
#include "solid_evttrk.h"
指定できる操作
SOLID_EVTTRK_Ctrl
-
int SOLID_EVTTRK_Ctrl(int control)
イベントトラッカー の操作(記録開始,記録停止,記録クリア)
- パラメータ:
control -- 実行したい操作
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
実行
イベントトラッカー 有効でビルドして実行します。
確認したいタイミングで実行ブレークします(メニューの[デバッグ]-[すべて中断])
メニューの[デバッグ]-[ウインドウ]-[イベントトラッカ]を選択
イベントトラッカの画面にマウスカーソルを移動し、右クリックで表示されたメニューから [DLLのロード(D)] を選ぶとダイアログが開きます
EvtFilterSOLID_TOPPERS.dll とSOLID-OS のコア数の値を設定したら、 [OK] をクリックします
Note
EvtFilterSOLID_TOPPERS.dll は以下の場所にインストールされています
StarterKit の環境 C:\ProgramData\KMC\SOLID\tools\eventtracker\
製品版環境 (インストール先フォルダ)\tools\eventtracker\dll\
イベントトラッカの画面にマウスカーソルを移動し、右クリックで表示されたメニューから [解析(P)] を選び、イベントログ領域の Start Address と Size を設定しますが、通常はデフォルトのままで [OK] を押します
正常に記録できていれば、イベントログがグラフィカルに表示されます
表示例(ASP3の場合)
表示の線・マークの見方
モジュールの状態を示す線の意味
線種・色 |
状態 |
---|---|
明るい緑実線 |
CPU実行状態 (Running) ※FMPの場合 Core0実行状態 |
黒破線 |
CPU実行権獲得可能 (Ready) |
赤破線 |
待ち状態 (Wait, Suspend, Suspend-wait) |
オレンジ実線 |
FMPのみ Core1 実行状態 (Running) |
明るい紫実線 |
FMPのみ Core2 実行状態 (Running) |
淡い水色実線 |
FMPのみ Core3 実行状態 (Running) |
暗い緑実線 |
FMPのみ Core4 実行状態 (Running) |
明るい茶実線 |
FMPのみ Core5 実行状態 (Running) |
暗い紫実線 |
FMPのみ Core6 実行状態 (Running) |
濃い水色実線 |
FMPのみ Core7 実行状態 (Running) |
イベントを示す四角の意味
四角形の色 |
イベントの種類 |
---|---|
青 |
待ち状態イベント (Wait に遷移) |
赤 |
強制待ちイベント (Suspend に遷移) |
紫 |
二重待ちイベント (Suspend-wait に遷移) |
赤 |
メールボックス送信イベント |
主な操作
右クリックのポップアップメニューらからIDの表示順を選択(例:IDでソート)できます。
マウスのホイールを回すと、時間軸を Zoomin, Zoomout できます。
グラフの下、空白領域でダブルクリックするとタイムバーが表示されます。タイムバーを2個表示してタイムバー間の経過時間を表示できます
要実装関数
IMPL_EVTTRK_Init()
#include "impl_evttrk.h"
#define MAX_EVENT_NUM 0x400 // 保存できるイベント数。必ず 2^n の数を指定してください
#define BUFFER_SIZE ((24 * MAX_EVENT_NUM) + 32) // 各イベントログ 24byte,イベントログ領域のヘッダ 32byte
static uint8_t __kmc_eventlog_buffer[BUFFER_SIZE] __attribute__ ((aligned (8)));
int IMPL_EVTTRK_Init(SOLID_EVTTRK_INFO* pInfo)
{
pInfo->pBuffer = __kmc_eventlog_buffer;
pInfo->bufSize = sizeof(__kmc_eventlog_buffer);
return 1;
}
Warning
保存できるイベント数 MAX_EVENT_NUM は必ず、2のn乗の値にしてください。 2のn乗以外の値を指定するとイベントが記録されたりされなかったりという状態になります。