イベントトラッカー
概要
タスク、割り込み、タイマハンドラの実行時間や遷移を、 時間軸に沿って記録し、グラフィカルに表示する機能です。
イベントトラッカーが記録する状態遷移イベントの種類
タスクの状態遷移
割り込みハンドラの起動/終了
アラームハンドラの起動/終了
周期起動ハンドラの起動/終了
使い方
イベントトラッカーを使用するための準備
イベントトラッカーが記録するイベントデータはターゲットの 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
: 正常終了それ以外: エラー
実行
イベントトラッカー有効でビルドして実行します。
確認したいタイミングで実行ブレークします (メニューの
)メニューの
を選択
イベントトラッカーの画面にマウスカーソルを移動し、右クリックで表示されたメニューから
を選ぶとダイアログが開きますEvtFilterSOLID_TOPPERS.dll
とSOLID-OS のコア数の値を設定したら、 OK をクリックします
Note
EvtFilterSOLID_TOPPERS.dll
は以下の場所にインストールされています
StarterKit の環境
C:\ProgramData\KMC\SOLID\tools\eventtracker\
製品版環境
インストール先フォルダ\tools\eventtracker\dll\
イベントトラッカーの画面にマウスカーソルを移動し、右クリックで表示されたメニューから 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個表示してタイムバー間の経過時間を表示できます
要実装関数
-
int IMPL_EVTTRK_Init(SOLID_EVTTRK_INFO *pInfo)
#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乗以外の値を指定するとイベントが記録されたりされなかったりという状態になります。