2017年9月12日火曜日

STM32/FreeRTOSでCPU使用率的な

 STM32のTIMを使ってFreeRTOSのCPU使用率的なパルスを出す。

 まずTIMxをPWM1で初期化する。プリスケーラは500kHzくらいになるように設定。カウンタは最大(65535)に設定する。1周約0.13秒くらいになる。パルス幅は1に設定し、約2usecくらいのパルスを作る。
 FreeRTOSのIdleHookでTIMx.CNT = 0を行う。これにより、IdleHookが呼ばれてから2usecのパルスが出力される。
 優先度が0より高いタスクが実行中の場合、IdleHookが呼ばれなくなるので、最後にIdleHookが呼ばれてから2usec以降はパルスがLowとなる。
 つまり、このGPIOを見ていればMCUがアイドル状態の割合を知ることができる。
 2usec未満の処理であれば出力されないが、168MHzのコアでは2usecに300命令くらいしか処理できないし、OSのタスクスケジューラでも結構な命令数が必用なので、2usecくらいの分解能でも充分だと思う。

 この方法だとTIM1個とGPIO1本が必用で、マイコン内でアイドル率を知ることができないが、結構信頼性の高いデータだと思う。
 あとはZEROPLUSのロジアナでデューティー比を見れれば最高なんだけど、LAP-Cではデューティー比は見れないらしい。デジオシだとデューティー比を表示できるけど、あんまり信頼性高くない。

 もう一本タイマを使えるなら、TIMxをIdleHookでクリアしてアイドル率のパルスを作り、TIMyをGatedして、10msec毎にTIMyのカウンタを確認して、という感じだろうか。これならマイコン内で使用率を知ることができる。それにGPIOも必要ない。

0 件のコメント:

コメントを投稿