遅延関数について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
C素人

遅延関数について

#1

投稿記事 by C素人 » 9年前

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--;
	}
}

NNN

Re: 遅延関数について

#2

投稿記事 by NNN » 9年前

Delay1TCY関数を実行した時としない時とで差分を取ってみてはどうでしょうか
関数の呼び出し前後で計測しているなら、関数の呼び出しや他の処理もあるため5usec以上かかると思います

daive
記事: 11
登録日時: 10年前

Re: 遅延関数について

#3

投稿記事 by daive » 9年前

>delay_us(5); で5usec(実際には、1.5usec×5)の遅延動作を確認した所、約50usecの遅延となってしまいました。
>関数の書き方に問題があるのでしょうか。
使用しているコンパイラと、コンパイラが生成する実行コードに対する理解が不足しているだけです。
コンパイラによっては、assemble source 出力が、可能ですので、
assemble source を眺めてみてください。

PIC であれば、
MPLAB REAL ICE
が使えるかもしれませんねぇ。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 遅延関数について

#4

投稿記事 by みけCAT » 9年前

マイコンにおいては、while(count > 0)やcount--;の実行時間が無視できません。
もし使用しているマイコンが一度に8ビットずつの計算しかできないのであれば、16ビット以上あると思われるint型の計算はかなり時間がかかる処理になるでしょう。
オフトピック
C素人 さんが書きました:5usec(実際には、1.5usec×5)の遅延動作を確認した所
1.5×5=7.5になるというのは、さすがにわかっていますよね...。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る