Sleep関数を作る

ウエイト処理などではforループを使うことも多いが、正確な時間で一時的に処理を止める
ためにはCPU速度に依存しない正確な待ち時間処理が必要となる。
そこでシステムインターバルタイマを参照してsleep関数を作ってみる
システムインターバルタイマーを使うと最小分解能1/60秒のsleep()関数を実装できる。

実装方法はシステムインターバルタイマーを参照し、初期化してから経過時間をチェックする。
システムタイマーは破壊的に変更されるが8bitマシンなので処理コストの小さな方法が有効。

新規に作成する関数はmsleep()という名前。一般的にはライブラリに存在する関数だが
環境によってはループ処理で代用されていたり実装されていない場合もある。
タイマーは環境依存するためANSI非互換だがラッパでsleep()を作ればANSI互換で時刻も正確に動作する。
引数は1/60を単位としたミリ秒を整数で指定し正確な時刻でsleepする。
整数が60であれば1秒。このタイミングはビデオ信号を参照してトリガーされるので
海外向けの仕様では1/50の場合になることもある。
日本はNTSCという規格なので1/60

#include <stdio.h>

unsigned int *p_intervaltimer;
void msleep(unsigned int);

void main(void){

	printf("sleep 10sec\n");
	msleep(600);	
}

//待ち時間処理関数
// 1/60=16msec
void msleep(unsigned int t){
	p_intervaltimer=(unsigned int *)0xFC9E;

	*p_intervaltimer=0;		//タイマーをゼロで初期化
	
	while(*p_intervaltimer<t);	//経過時間まで待つ
}

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2015年08月29日 11:10
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。