CPU負荷率計測例(μC3/Compact、Cortex-Mの場合)

弊社RTOS「μC3/Compact」、「μC3/Standard」に関するご質問
返信する
アバター
eForce技術担当
記事: 163
登録日時: 2014年4月24日(木) 14:18

CPU負荷率計測例(μC3/Compact、Cortex-Mの場合)

投稿記事 by eForce技術担当 » 2019年4月01日(月) 16:12

CPU負荷率の定義として、一定時間において、CPUが稼動している時間の割合とします。
下記に例を示します
 まず、μC3/Compactでは、下記の状態を持っています。
 μC3/Compactユーザーズガイドの「3.1 コンテキストとシステム状態」
 を参照しています。

A. 割込みハンドラ(割込みサービスルーチン)
B. タイムイベントハンドラ
C. タスク
D. アイドル

 ここで、アイドル状態は、実行できる状態のタスクがなく、
 タイムイベントハンドラもなく、割込み処理も実行してい
 ない場合となっていますので、
 『CPUの負荷』の測定については、ある時間当たり、
 アイドル状態とそれ以外の状態にある時間の比率を利用すればよいかと
 思います。
  ->μC3/Compactでは、アイドル状態については、コンフィグレータの
   アイドル関数の生成をコンフィグレータから実施していただく、
   又は、「アイドル時スリープモード入る」を利用するのが良いかと
   思います。
  ->アイドルから、動作状態に移るタイミングは、必ず割込みサービスルーチン
   の入り口となります。
   厳密には、「excp.s79」の「inthdr_xxx」がベクタからのジャンプ先と
   なりますので、この位置となりますが、
   各割込みサービスルーチンの、Cソースの入り口を利用してもよいか
   と思います。
***
***
 具体的には、下記のようになるかと思います。

 任意の周期で、タイマを起動しカウンタ値を
 読み出します。タイマの制御は以下のようにします。

・アイドルルーチンでタイマを一時停止
・割込み発生でタイマ再開
  ->これらは、タイマーではなく、ポート出力と、オシロ計測でも
   測定は可能ではないかと考えています。

 周期処理でカウンタを読み出すと以下の式でCPU稼働率が出ます。
  CPU稼働率=n/N
  n=読み出したカウンタ値
  N=タイマを連続カウントした場合に達するカウンタ値
   ->ある時間ずっとタイマが動作していた場合には、カウンタ値が
    いくつになるかがわかっていて、アイドル処理の時に
    タイマを停止している。
   
 これを繰り返し、読み出した値をバッファにログします。

返信する