1usecの遅延関数について。
PICマイコンを使用しています。
4MHzの動作クロックで、Delay1TCY(); の遅延は、実測で約1.5usecだと確認できています。
次の通り、delay_us関数を作成して、引数countの設定に応じてusec単位での遅延を発生させたいと考えています。
delay_us(5); で5usec(実際には、1.5usec×5)の遅延動作を確認した所、約50usecの遅延となってしまいました。
関数の書き方に問題があるのでしょうか。
遅延関数について
Re: 遅延関数について
Delay1TCY関数を実行した時としない時とで差分を取ってみてはどうでしょうか
関数の呼び出し前後で計測しているなら、関数の呼び出しや他の処理もあるため5usec以上かかると思います
関数の呼び出し前後で計測しているなら、関数の呼び出しや他の処理もあるため5usec以上かかると思います
Re: 遅延関数について
>delay_us(5); で5usec(実際には、1.5usec×5)の遅延動作を確認した所、約50usecの遅延となってしまいました。
>関数の書き方に問題があるのでしょうか。
使用しているコンパイラと、コンパイラが生成する実行コードに対する理解が不足しているだけです。
コンパイラによっては、assemble source 出力が、可能ですので、
assemble source を眺めてみてください。
’
PIC であれば、
MPLAB REAL ICE
が使えるかもしれませんねぇ。
>関数の書き方に問題があるのでしょうか。
使用しているコンパイラと、コンパイラが生成する実行コードに対する理解が不足しているだけです。
コンパイラによっては、assemble source 出力が、可能ですので、
assemble source を眺めてみてください。
’
PIC であれば、
MPLAB REAL ICE
が使えるかもしれませんねぇ。
Re: 遅延関数について
マイコンにおいては、while(count > 0)やcount--;の実行時間が無視できません。
もし使用しているマイコンが一度に8ビットずつの計算しかできないのであれば、16ビット以上あると思われるint型の計算はかなり時間がかかる処理になるでしょう。
もし使用しているマイコンが一度に8ビットずつの計算しかできないのであれば、16ビット以上あると思われるint型の計算はかなり時間がかかる処理になるでしょう。
オフトピック
1.5×5=7.5になるというのは、さすがにわかっていますよね...。C素人 さんが書きました:5usec(実際には、1.5usec×5)の遅延動作を確認した所
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)