※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

「Sleep関数を作る」の編集履歴(バックアップ)一覧に戻る

Sleep関数を作る - (2015/03/06 (金) 10:50:15) の1つ前との変更点

追加された行は青色になります

削除された行は赤色になります。

 ウエイト処理などではforループを使うことも多いが、正確な時間で一時的に処理を止める
 ためにはCPU速度に依存しない正確な待ち時間処理が必要となる。
 そこでシステムインターバルタイマを参照してsleep関数を作ってみる
 システムインターバルタイマーを使うと最小分解能1/60秒のsleep()関数を実装できる。
 
 実装方法はシステムインターバルタイマーを参照し、初期化してから経過時間をチェックする。
 システムタイマーは破壊的に変更されるが8bitマシンなので処理コストの小さな方法が有効。
 
 新規に作成する関数はmsleep()という名前。
 引数は1/60を単位としたミリ秒を整数で指定する。
 整数が60であれば1秒。このタイミングはビデオ信号を参照してトリガーされるので
 海外向けの仕様では1/50の場合になることもある。
 日本はNTSCという規格なので1/60
 
  #include <stdio.h>
  
- void tsleep(unsigned int);
+ 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);	//経過時間まで待つ
  }
ツールボックス

下から選んでください:

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