RTOSの割り込み処理について

このQ&Aのポイント
  • RTOSではないOSの割り込み処理とRTOSの割り込み処理は異なりますか?
  • Linux PCでロボット制御のために作成したC言語プログラムをRTOSで実行する際、書き換えが必要ですか?
  • RTOS専用の割り込み処理のための関数などが存在するのでしょうか?
回答を見る
  • ベストアンサー

リアルタイムOS(RTOS)の割り込み処理について

RTOSではないOSの割り込み処理とRTOSの割り込み処理とでは,作成するプログラムは違うのでしょうか? 例えば,Linux PCでロボット制御のためのC言語プログラム(プログラムAとします)を作成して実行したところ,リアルタイム性が良くなかったため,リアルタイムカーネルをインストールしたとします.そうするとプログラムAを何も書き換えずにそのまま実行するとRTOSの割り込み処理がおこなわれるのでしょうか?それとも,プログラムAをRTOSの割り込み処理をするためのプログラムに書き換えないといけないというものでしょうか?(RTOS専用の割り込み処理のための関数などがあるのでしょうか?) よろしくお願いいたします.

質問者が選んだベストアンサー

  • ベストアンサー
  • hahaha8635
  • ベストアンサー率22% (800/3609)
回答No.1

同じ人なんだろうな CPUの作り方をまず読む 8086系には割り込みピン https://www.cqpub.co.jp/column/books/2001a/34331PC_Legacy/pc-lega7.htm があり そこがHIになると そこに対応したIRQの番号の割り込みベクタに書かれたアドレスの割り込みが発生する それと別にタイマー割込み がある(クロックベース) 同じく割り込みベクタに書かれたアドレスのプログラムを実行する 割り込み中は割り込み禁止にしないとほかの割り込みが発生し(自分自身も)多重割り込みが発生する また割り込みしたまま重い処理をすると 処理事態が重くなる これらは現在のクロックベースで動くCPU全体に言えるので RTOSと謳うOSも実際にはRTOSではない 電気を使っているので一瞬だと思えるが 電気でも金属帯を流れる速度がありそれが障壁となる CPUの並列化も一緒 分散コンピュータでも一緒 昔は4GHzの壁があったが現在は5GHzの壁 液体窒素で7GHz 世界1を久しぶりに奪還した 富岳でさえ リアルタイムは無理 https://www.nikkei.com/article/DGXMZO60655390S0A620C2MM8000/ 巷で話題のガリュム半導体でも無理 https://pc.watch.impress.co.jp/docs/column/semicon/1220487.html 本来の意味でのリアルタイムは 量子コンピュータを待たなければならない 今は妥協

octopass
質問者

お礼

いつもありがとうございます.大変助かります.まずはCPUについて勉強したいと思います.

その他の回答 (1)

noname#252332
noname#252332
回答No.2

 リアルタイムカーネルは普通のLinuxと互換性を持たせながらリアルタイムアプリケーションをも実行できる仕掛けなので、普通に作ったアプリケーションはリアルタイム性なしで動き、リアルタイムタスクとして書いたプログラムはリアルタイムに動くのでしょう。私はこんなすごいことはやったことが無いけど。プログラムとは語るものか? それともシコシコと組む物か? 3か月で完成するのが待ち遠しいです。

octopass
質問者

お礼

ご回答ありがとうございます.確かに仰る通りだと思いました.とりあえず手を動かすことから始めます.

関連するQ&A

  • リアルタイムOSが必要かどうか

    Linuxが入ったPCで、AD/DAボードを介してロボット制御(サンプリング周期は1ms)をしようと思うのですが、RT Linuxなどのリアルタイムカーネルは入れた方が良いでしょうか?それとも、1ms程度なら必要ないでしょうか?

  • Linuxでリアルタイム制御するには

    PCからAD/DAボードを介して小型のロボットをリアルタイム制御したいと思っています.これまではWindowsPCにMATLABをいれて,MATLABでプログラムを作って制御していたのですが,LinuxでMATLABを使わずにリアルタイム制御したいと思っています. そこで質問ですが,Linuxでリアルタイム制御するには,どのようなOSが必要なのでしょうか?Ubuntuで大丈夫でしょうか?また,PCにはOSの他に何を入れる必要があるのでしょうか?(これまではWindowsPCにMATLABとそのToolBoxを入れるだけでリアルタイム制御していたので,それ以外のやり方について全くの無知です.) アドバイス頂ければ幸いです.よろしくお願い致します.

  • リアルタイム検索をすると、ウィルスを処理できません というメッセージがでます。

    自動でリアルタイム検索をしているのですが、この頃必ず「ウィルスを処理できません」というメッセージがでます。この対処法をサポートセンターで探したところ、修正プログラムを実行するとあったので、インストールしようとしました。ところが、プログラムバージョンが2007 15.3 ではないので、対応していないと表示され、問題が解決できませんでした。どうしたらいいでしょうか?

  • 簡単なOSを作りたい

    OSについてほとんど知識の無い者です。 現在、あるプログラムを作りたく色々と勉強しています。 しかし、調べていくうちにwindowsやmac等の既存のOSではそれを作ることは厳しいとわかってきました。 これらのOSはセキュリティやトラブル回避の面で堅牢性が高いそうです。 そのプログラムにとってそういう強さはむしろ邪魔になってきます。 そこでlinuxを思いつきました。 ですが、最近のlinuxディストリビューションも先のOSのように丈夫で堅牢な仕組みになっていると思います(詳しく調べてはいませんが、最近のlinux人気から予想はできます)。 僕に必要なOSは、ユーザー利用重視ではなくプログラム利用重視のOSです。 なので自分でOSを作ろうと思います。 そこで質問ですが、カーネルはlinuxカーネルを使ってもいいでしょうか? というのは、linuxの堅牢性がどこから来るものかわからないからです。 もしlinuxカーネルから来ているのであれば、linuxカーネルは使えません。 来ていないのであれば、出来合いのlinuxカーネルが使えると思います。 しかし自分が欲しいOSを作るためにはlinuxカーネル自体不必要かもしれません。 そういった場合どのように勉強をすればいいでしょうか? とにかく特定のプログラム専用のOSです。 それに最低限必要な機能(とキーボード・マウス・ディスプレイの入出力)以外無用です。 どうすれば実現できるでしょうか。 本来なら書籍やネットで地道に調べるべきなんでしょうが時間がありません。 よろしくお願いします。

  • PCでモータなどをリアルタイム制御する方法

    RinuxOSのPCからAD/DAボード(USB接続)を介して、モーターなどのメカトロニクス機器をリアルタイム制御したいと思っています.それを実現するために, ・UbuntuなどにRTOSをインストールする。 ・PCにAD/DAボードを設置する。 ・デバイスドライバとAPIをインストールする。 まではわかったのですが、「AD/DAボードにアクセスするためのプログラム」をどのように書けばよいのかわかりません.また,「DAボードから任意の電圧を出力する(またはADボードを介して外部電圧をPCに取り込む)」にはどのようにプログラムを書けば良いのかもわかりません.そもそもAPIというものが何をするためのものかも分かっていません. ちなみに、Arduinoを使ってモータの制御はしたことがあります. どなたかアドバイスいただければ幸いです.「そもそもまず~~という本で~~の知識を入れるべき」というレベルでも結構ですので,どうかよろしくお願い致します。

  • Linux上で実行関数使用

    Windowsで作成したphpプログラムをLinuxに移動させようとしています。 そのプログラムの中ではC言語で作成したプログラムの実行形式(.exe)をshell_execを使って実行させています。 Linux上で動作させる場合は.outを実行すればよいとはわかるのですが、 どの実行関数を試してみてもパスが通らないか、通っても動作していなor結果が返ってこないようで、全く反応がありません。 .outを単体で実行させた場合は問題なく動作するので、C言語のプログラム上の間違いではないです。 どなたかLinux上で、phpで実行形式を動かす方法を知りませんか?

    • 締切済み
    • PHP
  • Linuxで生成したプロセスに処理をさせるには?

    Linuxの学んでいる者です。 表題の件について、本を読んだり、ネットで検索したり したのですが、解決ができなかったため質問させて いただきました。 以下に例を挙げます。 1つのCファイルに、「main」と「A」と「B」という関数があるとします。 「main」関数にて、fork()で2つプロセスを生成し、一方のプロセスでは 「A」関数を実行し、もう一方では「B」という関数を実行させます。 「A」という関数は3秒ごとに「1,2,3,…」と数字を出力するもので、 「B」という関数は5秒ごとに「10、20、30、…」と数字を出力するものとします。 こういう場合に、プロセスに「A」や「B」の処理を実行させることができません。 exec関数でプロセスに別のプログラムを実行させることはできますが、 プログラムの実行ファイルのパスを指定して実行させるようなので、 この場合にはうまく使えません。 理解されている方には、本当に些細なことではあると思いますが、 私では解決にまで至らなかったので、ご教授いただければ幸いです。 よろしくお願いいたします。

  • リアルタイム処理のできる言語

    複数の人間がそれぞれのパソコンで同じを作業をする際に、 それぞれのパソコンの画面でチェックシートにチェック出来るようにし、 一人がチェックをすると即座に全ての人のチェックシートの同じ項目にも 入力が反映されるようなものを作成したいと思ってます。 Excelで「ブックの共有」を設定してみたのですが、効率が悪かった為 チャットの様にリアルタイム処理で結果を出力できるものが理想です。 CometとAjaxを用いればできそうと思ったのですが、 もっと手軽に作成できる方法があれば教えていただきたいです。 仕様する言語や簡単な説明を付けていただけると助かります。 よろしくお願いします。

  • 音声データのリアルタイム処理

    「マイクなどからPCに音声データを入力し そのデータにハイパスフィルタをかけ、リアルタイムでスピーカに出力する」 という課題をC言語かC++を使ってやらなくてはならないのですが、 音声データのCやC++での扱い方といいますか、音声データをどうCやC++に組み込むのかがわかりません。 音声データに何らかの処理をして出力する、というプログラムをCやC++で書くということはできるのでしょうか?何か特別なソフトが必要になってくるのでしょうか?

  • 素朴な疑問 (C言語とアセンブラの処理速度の違いについて)

    C言語で作成したプログラムをビルドして実行ファイルを作成するのと、アセンブラ言語(?)をアセンブルして作成した実行ファイルは、どうして処理速度が違うのでしょうか?例えば全く同じ処理を高級言語と低級言語で作成した場合、出来上がったそれぞれの実行ファイルの違いは、コンパイル時に吸収されてしまうわけではないのでしょうか?