タスク切り替え時間評価

vxget_timの使用が可能になりましたので、タスク切り替え時間を測ってみました。

二つのタスクmainとsubがある。mainはsubより優先順位が高い。mainはwai_sem(S)によって待ち状態にあり、実行状態のsubがsig_sem(S)を実行する。

このとき、subのsig_sem()実行開始からmainのwai_sem()からの復帰までの時間をvxget_timを使って測定します。結果は以下のとおりです。

debug ビルド
1399サイクル
release ビルド
745サイクル
releaase ビルド。手続き間最適化と自動インライン有効
670サイクル

750MHz時には1uSを切りますが、600MHzだと1.1uS程度になってしまいます。もうちょっと性能が出るかと思っていましたので肩透かしを食らった気分です*1。ただ、坂村氏はITRON設計時に「タスク切り替え時間はサブミリ秒を狙う」と言っていました。その100倍*2の速度ですから20年の間のシリコンの発達を実感せずにはいられません。
何にせよ、1uSというのは私の自己満足の基準です。これがはやいのか遅いのか、RTOSにそれほど詳しくない私にはわかりません。どなたかコメントをいただけませんか?

*1:勝手に0.5uSとか考える私が悪い。

*2:坂村氏がディスパッチ時間を言っていたのなら1000倍