• ベストアンサー

h8/3048 or 3052  プログラムの実行時間の測定

h8/3048 もしくは 3052について 実行プログラムのある部分をループさせ1回1回その部分の処理時間を表示させたいという場合には、どのような方法があるのでしょうか?わかる人がいたら教えていただきたいです。 やはり、内蔵されているタイマを用いるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

方法としては2つあると思います。 1.内蔵タイマで測定してRS232C経由で表示させる方法。 2.ループ毎にIOポートにパルスを出力して、周期をロジアナやオシロで測定する方法。

utaibito33
質問者

お礼

A/D変換の実行の1ループ毎にその時間を計測するために、オシロスコープなどで測定することはできませんので、1の方法でやろうと思います。 ITUとかを使用して、行えばできそうでしょうか?

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • richardo
  • ベストアンサー率20% (11/53)
回答No.3

 システムクロックで動作する16ビットカウンタを使って、以下のようなプログラムを作った事が有ります。 ; === 測定開始 === COUNT_CLK_1: MOV.W @TCNT_0,E0 ;+(1) PUSH.W E0 ;+(2) ここまでは、被測定命令では無い ;************************************* ; 以下に被測定命令を入れます。次のどれかになるでしょう。 * ; * ;  1.命令を直接書き込む * ;  2.サブルーチンを呼ぶ * ;  3.インクルードを使う * ; * ;************************************* ;------------- 被測定命令開始 ----------------------- ;------------- 被測定命令はここまで -------------- POP.W E0 ;-(2) MOV.W @TCNT_0,R0 ; SUB.W E0,R0 ;-(1) SUB.W #19,R0 ; ADJUST ; === R0に答のクロック数が入っている ===

すると、全ての回答が全文表示されます。
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

>ITUとかを使用して、行えばできそうでしょうか? そうですね。タイマーを無条件にカウントループ(クリアの禁止)させておいて、ループ開始時とループ終了時のタイマー値の差分を計算してはどうでしょうか? 16MhzのクロックならTPSCで1/8を選べば,65536までカウントできるので最大32msぐらいまでは計測できると思います。後は必要な精度との組み合わせで調整してみてください。 >オシロスコープなどで測定することはできませんので トリガ+メモリ付きのオシロなら周期を簡単に測定できますよ。 それにループ時間が一定なら、ループを繰り返しやれば、通常のオシロでも周期=周波数として観測可能なはずです。

すると、全ての回答が全文表示されます。

関連するQ&A