
c言語での10msecの割込プログラムを作成しようとしています。
ですが、なかなか割込というものが理解できていません。
シングルタスクでの割込プログラムはどうすればよいのでしょうか?
for(;;) {
func(); //10msecごとに実行したい関数
usleep(100000);
}
では割込み処理にはならないんですよね?
きちんと理解できていないため、質問もあいまいになってしまっていますが、よろしくお願いいたします。
また、シングルタスク等が説明されているサイトがありましたら、教えていただきたく思います。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
通常、ハードウェアタイマーによる一定間隔の割り込みは、以下のようにします。
1.周辺チップのハードウェアタイマーICに対し、リセット信号を送るか、割り込みを発生させない設定を行う
2.ハードウェアタイマーICが使用している割り込みの、割り込みエントリアドレスを設定する(割り込みベクターにアドレスを書き込む)
3.割り込みコントローラICなど、これ以外に設定が必要な周辺ICに対しても、必要な設定を行う
4.CPUで「割り込み許可命令」を実行する
5.ハードウェアタイマーICに対し、割り込みのインターバル間隔を設定し、割り込みを発生させる設定をする
6.割り込みが起きると上記2で設定したアドレスに定期的に飛んで来る
通常、上記の1~5の処理は「BIOSがサポート」していて「BIOSコール」を行う事で利用出来ます。
なお、通常、周辺チップのハードウェアタイマーICは、OSやOSに組み込んだデバイスドライバが占有していて、OSやデバイスドライバがカーネル内部でBIOSコールなどを行い、上記の処理を行っています。
なので、通常、ユーザーがハードウェアタイマーICに直接アクセスしたり、BIOSコールする事は出来ません。
その代わり、OSやC言語ごとに「ライブラリ」が用意されていて、それらが「インターバルタイマーの真似事」をしてくれます。
>シングルタスク(MS-DOS)での割り込み処理のことを知りたいです。
MS-DOS(WindowsのDOS窓を除く。Windows上のDOS窓やコマンドプロンプトは「DOSエミュレータ」であり、MS-DOSではない)では、ここまでの細かい制御は行われておらず、それ用のデバイスドライバも無いので「自分でIOポートにアクセスし、すべて自分でどうにかする」か「BIOSを使う」しかありません。
つまり「冒頭の1~5の処理を、全部、自分でどうにかするか、アセンブラでBIOSコールを行う必要がある」のです。
なお、MS-DOSには、IBM/PC(DOS/V)互換機用、NEC-PC9801用、PC100用など、機種やハードウェアごとに色々なバージョンがあり、機種ごとにハードウェアやBIOSが異なるので、実際のプログラムも異なる事になります。
詳しくは「MS-DOS BIOSコール タイマー」の語句で検索して下さい。
No.1
- 回答日時:
もう少し質問を具体化してください。
シングルタスクOS(たとえばMS-DOS)上で割込み処理を作成するのか、マルチタスクOS(WindowsやLinuxなど)上のプロセス内で割込み処理をエミュレーションするのか。
前者はCPU割込みを利用することになります。実際に動作させる環境や開発環境が分からないと適切な助言は難しいかと思います。
後者はsignalを使えば作れるかと思いますが、こちらも具体的な環境を示された方が適切な助言がしやすいと思います。
ご指摘ありがとうございます。
今回は、シングルタスク(MS-DOS)での割り込み処理のことを知りたいです。調べてみるとマルチタスクのことは探せるのですが、シングルタスクはなかなか自分が理解できるサイトが見つかりませんので・・・
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PICのSleepからの復帰に関して
-
pic 複数の割り込み関数 切り分...
-
VB.NET スレッドからのイベント...
-
スーパーのレジで並んでいたら...
-
irqbalance って
-
PICマイコンでエンコーダパルス...
-
電車で待機列の割り込みについ...
-
Macターミナルで実行中のプログ...
-
フレームワーク「4.8.1」で、[S...
-
パソコンの演算速度について
-
【C言語】再帰が時間がかかる...
-
powershell を使いカレントディ...
-
バックグラウンドのプロセスの...
-
winsockでソケット通信の開発を...
-
家電製品の電力周波数を変える機械
-
TCP/IP通信時のサーバーからの受信
-
C# シリアル通信でデータ受信...
-
WaitForSingleObjectの使い方に...
-
ACCESS側からEXCELの書式を設定...
-
keycodeについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
このレジの並び方は間違ってま...
-
CPU負荷率の安全な上限と計...
-
スーパーのレジで並んでいたら...
-
電車で待機列の割り込みについ...
-
【組込み】割り込み中のstatic...
-
VB6でSendKeyを利用したTab移動...
-
マイコン C言語 割り込み処理...
-
pic 複数の割り込み関数 切り分...
-
USJでの割り込み
-
PICマイコンでエンコーダパルス...
-
H8マイコンで割り込みが任意の...
-
CPUの処理量を減らすコーデ...
-
定周期での割り込み
-
割り込みハンドラの処理の簡素化
-
マイコンのメインルーチン内でw...
-
PIC12F683から移植
-
VB.NET スレッドからのイベント...
-
PICで内部タイマーを使わずカウ...
-
VBAのDoEventsが上手く動きません
-
順番待ちで並んでいる時、割り...
おすすめ情報