![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- 大学受験 国立受験 11月からの大逆転劇を起こすには 7 2022/11/14 19:24
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- Visual Basic(VBA) 1つの入力フォルダの値を読み込み、3分割をして新しい変数に代入する方法を教えていただきたいです。 読 4 2022/10/17 20:52
- その他(プログラミング・Web制作) ラズパイ上の、pythonのエラーについて 1 2023/04/12 23:27
- 運輸業・郵便業 タクシー運転手はどうしてあんなにゴミなのか? 4 2022/11/13 20:43
- 数学 数学の問題 2 2022/10/28 23:57
- システム CPUの問題について 2 2022/07/09 12:04
- 数学 そろばんの割算で 3543436514÷58174=60911が正解の答えなんですが、 僕が、実際に 4 2022/03/31 12:52
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PICのPIN変化割り込みに...
-
電車で待機列の割り込みについ...
-
Amazonfireタブレットにわから...
-
PICのSleepからの復帰に関して
-
sleep関数の原理について
-
スーパーのレジで並んでいたら...
-
駅のトイレでナイチンに邪魔さ...
-
irqbalance って
-
割り込み中に例外異常
-
USJでの割り込み
-
H8マイコンでの割り込み(シリ...
-
pic 複数の割り込み関数 切り分...
-
Macターミナルで実行中のプログ...
-
逆コンパイルと逆アセンブルの...
-
DoEvents関数って何?
-
緯度、経度の 10進法と 60進法...
-
プロセス間通信について
-
Excel(VBA)シート上のコマンド...
-
メッセージボックスのボタン名変更
-
共有メモリの使い方について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
このレジの並び方は間違ってま...
-
電車で待機列の割り込みについ...
-
スーパーのレジで並んでいたら...
-
ショッピング
-
CPUの処理量を減らすコーデ...
-
一定時間操作がなかったら、と...
-
CPU負荷率の安全な上限と計...
-
pic 複数の割り込み関数 切り分...
-
Amazonfireタブレットにわから...
-
【組込み】割り込み中のstatic...
-
マイコン C言語 割り込み処理...
-
USB機器からのデータ受信による...
-
駅のトイレでナイチンに邪魔さ...
-
インバウンドで迷惑している人...
-
PICのSleepからの復帰に関して
-
PICでのプログラムによるチャタ...
-
実行した後、どうしてもフリー...
-
PICで内部タイマーを使わずカウ...
-
SH2のタイマ出力
-
割り込み中に例外異常
おすすめ情報