割り込みハンドラ起動回数取得 API (FMP/FMP3のみ)

GICでの割り込み番号単位で割り込みハンドラの起動回数をカウントする API です。 現時点では、FMPおよびFMP3で使用できる機能です。

注意

現状、SOLID-OSカーネルイベントコールバック機能を使って実現しているので、 ユーザが同時にカーネルイベントコールバック機能を使用することはできません。

注釈

GICベースの機能のため、TOPPERSカーネル管理外の割り込み(SOLID_INTC_Register()で登録したもの) についても起動回数をカウント出来ます。

ソリューションプロパティ

割り込みハンドラ起動回数取得 API を使用するには、カーネルイベントコールバック機能の有効化が 必要なので、ソリューションプロパティで "SOLID_SUPPORT_RTOS_EVENT_CALLBACK" を "1" に設定してください。

また、コンパイルオプションで "BasicGCCSW" の定義に、"-DENABLE_PROF_INH_COUNT"を定義します

定義の例

../../_images/PROF_INH_COUNT.props.png

API

APIを使用するコードでは prof/rtos_prof.h をインクルードしてください。

#include "prof/rtos_prof.h"

RTOS_PROF_enable_taskTime_and_inhCount

int RTOS_PROF_enable_taskTime_and_inhCount(void)

タスクCPU時間の積算値を取得する API 、または、割り込みハンドラの呼び出し回数を取得する API、 または、その両方を起動します。

統計情報はこのAPI呼び出し時点から積算を開始します。 最初のタスクが起動される前から有効化するためには、kernel_cfg.c で定義されている_kernel_call_global_inirtn()関数で呼び出すことを推奨します。

戻り値:

InhCount

typedef struct inh_count InhCount
struct inh_count

説明

割り込みハンドラ起動回数のデータ

定義

typedef struct task_time {
       uint32_t total_count;
       uint32_t core_count[SOLID_CORE_MAX];    // 添え字は 0 オリジンなのに注意
} InhCount;

メンバー

uint64_t total_count

全CPUコア分の集計

uint64_t core_count[]

各コアのCPU時間 (システムクロックのカウンタ値)

RTOS_PROFILE_Get_inhInvokedCount

int RTOS_PROFILE_Get_inhInvokedCount(int irq, InhCount *inh_count)

Irq で指定したIRQ番号の割り込みについて、割り込み起動回数を返します

取得する割り込みハンドラ起動回数は、CPUコア毎と全CPUコア合計で取得できます

パラメータ:
  • irq -- 値を取得したい割り込みの割り込み番号

  • inh_count -- 値を受け取る構造体へのポインタ

戻り値:

  • E_OK: 正常終了

  • E_NOEXIS: 存在しない割り込み番号が指定された