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