• ベストアンサー

CPUの割り込みを強くしてあるけど、大丈夫?

ぱっぱと処理を進めてほしくてレジストリをいじりC PUの割り込みを強く設定して使っているけど、 CPUの寿命が縮まったりとかしますか?

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

  • ベストアンサー
  • Eureka_
  • ベストアンサー率41% (5069/12255)
回答No.1

別に寿命には影響しないですけど、CPUが充分高性能じゃないと割り込み処理に手間を取られてかえって処理性能は低下しますよ? で、充分高性能なら割り込み頻度が少なくても軽快に動いてくれる罠。 割り込みで云々というのはせいぜいPentiumIII/Windows 9xの頃の高速化手法じゃないかって思うんですけど。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

 割り込みレベルの変更によるCPUへの障害はありませんが、専門的知識がないと、システムの安定度への影響が懸念されます。  また、単に割り込みレベルだけでは、速度アップになるとは限りませんので、マニアックな変更は「(雑誌の情報等で)効果が確実にわかっている場合」だけにされる方が良いと思います。 (処理時間は、各タスクの割り当て時間の変更等も影響します。また、アプリケーションによっては、割り込み処理(例外処理)の待ち受けが少ない方が早い場合もあります。)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • CPUの割込みについて

    CPUの割込みの仕組みと、周辺機器がCPUに対して割込みを発行した場合のCPUの動作の流れについてどうなるのか教えてください。

  • 複数の割込み処理からアクセス可能なリングバッファ

    複数の割込み処理からのデータ追加(挿入)が可能なリングバッファを探しています。 例えば2本の不定期な割込みが発生し、それぞれの割込み処理ルーチンが一つのリングバッファにデータを挿入していくとします。 この時に挿入ポインタや挿入データをお互いに壊さないよう、排他制御されたリングバッファのソースをご存知でしたらお教え下さい。 言語はCまたはC++。 ライブラリなどを使わず、全てのコードを書くことが前提です。 CPUはなんでも構いません(割込禁止・許可などの命令は適宜置き換えます)。 よろしくお願いいたします。

  • VB.net 割り込みの禁止

    Borland C-Builder++の内容をVB.net 2010に書き換えて居る者です。 TextBox等の割り込みを一時的に禁止したいのですが、良い方法はありませんでしょうか。 無ければフラグを用いて、フラグが立っている時のみ処理をバイパスさせる事を考えて居ます。 Builder では ComboBox1->OnChange = NULL ; とコーディングする事により、 void __fastcall TForm1::ComboBox1Change(TObject *Sender) { Edit1->Text = ComboBox1->Text; } への割り込みを禁止出来、 ComboBox->OnChange = ComboBox1Change; とコーディングする事により割り込みを再開出来ました。 これを void __fastcall TForm1::ComboBoxChange(TObject *Sender) {     ComboBox1->OnChange = NULL ; Edit1->Text = ComboBox1->Text;     ComboBox->OnChange = ComboBox1Change; } とコーディングする事により、2重割り込みを防止していました。 VBでこの様にイベント割り込みを一時的に禁止にする方法はありますでしょうか。 宜しくご回答下さい。

  • [VB.NET]WriteAllBytes中の割込み処理について

    [VB.NET]WriteAllBytes中の割込み処理について いつも大変お世話になっています。 早速ですが、 ファイルをFile.WriteAllBytesで フロッピーディスクへ書き込んでいる最中に プログレスバー(またはgifアニメーション)を 動作させたいのですが可能でしょうか? もし可能であればアドバイスお願いいたします。 'タイマー処理 Timer1.Interval = 500 Timer1.Start() 'byte配列のファイルへの書き込み File.WriteAllBytes(name, dest) '<- 固まったように見える... Timer1.Stop() 割込み時の処理には My.Application.DoEvents() を使用しています。

  • PIC16F1827の外部割込み

    PIC16F1827のRB0を 外部割込みとして入力の立上りで割込みを発生するように 設定します。 1.割込み禁止 2.プログラムAスタート 3.RB0に立上り入力あり 4.プログラムA終了 5.割込み許可 ・・・のような場合 5.以降に割込みが発生するでしょうか? ご教授お願いします。

  • H8/OSを用いた割り込みで困っています。

    SH2-7045Fを用いて、MTUのTGRAとTNCTのコンペアマッチで割り込みを発生させたいのですが、かなり困っています。まず、MTUのTGRAの割り込みが発生したときの、割り込み関数の割り込み定義を、H8/OSにかいてあった、int_registでやっているのですが、これでいいのですか?あと、開発環境は、秋月でSH2を買ったときについてくるgccを使っていいるのですが、この中には割り込みマスクの設定の関数がないというのを知り、適当にインターネットから拾ったアセンブリ言語で書かれたようなもの(setIntmask())を書いているのですが、プログラムを動かしたとき割り込みを1度しか受け付けないでプログラムがおわらないで、なにかしています。教えてくださいお願いします。

  • javaのスレッドの割込みについて

    javaのスレッド割込みに関する初心者の質問です。 割込みの発生元でCNTに値を設定し、割込みの受信元でCNTの値を読込み、表示しています。 下記のコードを参照ください。 Q1)CNTの値の設定と読込みで競合が発生する様なことはありませんか? 又は、処理が停滞するとか 以上、お手数をお掛けしますが、宜しくお願いします。 //割り込を発生するスレッド class threadA extends base{ private Thread target; public threadA(Thread targetA){ target = targetA; } public void run(){ for(int i = 0; i < 8;i++){ try{ System.out.print("."); Thread.sleep(1); CNT=i; target.interrupt(); }catch(InterruptedException e){ System.out.println("今割り込まれました: thread"); } } } } //スレッドからの割り込みを受信するルーチン class Sample108{ public static void main(String args[]){ //for(int i=0; i<2; i++){ classA obj = new classA(); obj.threadStart();//割り込みを受けるルーチン、この中で、割り込みを発生するルーチンを起動している //} } } //割り込みを受けるルーチン class classA extends base{ void threadStart(){ System.out.println("Start: main****"); threadA obj = new threadA(Thread.currentThread()); obj.start(); //Thread起動 //mainのルーチン for(int j = 0;j < 20; j++){ try{ Thread.sleep(1); System.out.print("*"); }catch(InterruptedException e){ System.out.println("今割り込まれました: classA CNT="+CNT); } } } } 以上

    • ベストアンサー
    • Java
  • h8/3052 GDB-stub上でのプログラムの実行 ITUタイマ割込みの使用について

    現在h8/3052でITUタイマを利用して20msecごとに割り込みがかかるようにするプログラムを作成していますが、割り込みに関して動作が確認できません。デバッグ環境を整えるためにターゲットにはあらかじめGDB-stubを書き込んであります。 実際に作成しているプログラムの割込みの部分は、 //割込み処理関数 pragma interrupt void int_imia0(void) //割り込み関数 { extern volatile unsigned int count; count ++; ITU0.TSR.BIT.IMFA = 0; } で割り込みが行われたときの処理を行い。 //メイン関数内 EnableInterrupt(); //割り込み許可 StartITU0(); //タイマスタート while (1){ AD.CSR.BIT.ADST = 1; /*変換スタート*/ while (AD.CSR.BIT.ADF == 0); /*変換終了待ち*/ data[c] = AD.DRA >> 6; /*下位へ6ビット分ずらす*/ data[c] = data[c] & 0x3ff; /*上位6ビットクリア*/ time[c] =(count * 2000000) + (ITU0.TCNT * 32); /*A/D変換処理時間の算出*/ if(time[c]>20000000) { bleak; } } のようにして、ここで20msecごとに割り込みがかかるように設定しています。 で、出力ファイルの //MAPファイル Name Origin Length Attributes vectors 0x00220000 0x00000100 r rom 0x00220100 0x00007f00 xr ram 0x00228000 0x00007000 xrw stack 0x0022f000 0x00001000 rw vectorアドレス ITU0割込みベクタアドレス(0x220060) 0x00220060 0x4 LONG 0x22020a DEFINED (_int_imia0)?<code 340> (_int_imia0):<code 340> (_start) として、外部RAM領域に設定したvectors領域のベクタ領域に割込み関数のアドレスが入るようにしています。 実際に動かすと、割込み関数でブレークポイントを設定しても割り込みがかからずにプログラムが動かなくなってしまいます。(どこかに飛んでいってしまっている。) ここで質問なのですが、GDB-stub上でプログラムを動かす場合に、 ・割り込みがかかった場合のベクタアドレスはGDB-stub側で設定しているベクタアドレス(内部ROM0x000060)に飛ぶようになってしまっているのか。 が、気になっています。

  • マイコンSH-2の割り込みを用いたシリアル通信

    SH7144Fで割り込みを用いたシリアル通信を行っていますが, 途中で割り込みがかからなくなる症状に悩んでいます. 開発環境はHEW上でツールチェインにRenesas SuparH StandardとKPIT GNUSH [ELF]を 組み込んでおり,適宜選んで使っています. 以下,Renesas SuparH Standardで,受信割り込みの場合に限って書かせて頂きます. 少々長くなりますが状況をご説明致します. 最初にSCI1回りの設定を適切に行い,割り込みレベルを15とした後, set_imask(0)で割り込みレベルを0として割り込みがかかるようにしています. 受信割り込みがかかるとINT_SCI1_RXI1に飛び, _UBYTE c = SCI1.RDR; SCI1.SSR.BIT.RDRF = 0; と直ちにした後,cの内容をバッファに入れ,戻っていますが,一文字受信しただけで 割り込みがかからなくなります.(_UBYTEはtypedefine.hでunsigned charとしています.) 相当悩んだ挙句,INT_SCI1_RXI1の末尾に, set_imask(0); を入れてやると連続して割り込みがかかり,うまく受信できるようになっています. ハードウェアマニュアルを読めば,割り込みがかかるとSRレジスタは退避され, SCI1の割り込みレベル15の内容がSRレジスタのI0~I3に書き込まれる,とあります. 当然,割り込みが終われば,退避された内容がSRレジスタに戻るので割り込みマスクは 0に戻るもの・・・と解釈していますが,余りにも当たり前なのかハードウェアマニュアルには 明記はされていません.もしかしたら元に戻っていないのでは・・・と,上記のようにいちいちに 割り込みマスクを0にする手続きを追記すると動いている,と言う状況です. 因みに上記の状況はKPIT GNUSH [ELF]を選んだときにも同じです. 更には,送信割り込みのときも上記と同じくset_imask(0)を入れてやると動きます. そこで質問ですが, 1.SRレジスタは割り込みが終われば元の内容に戻ると解釈していますが,   これで合っているでしょうか. 2.上記1で元に戻るのだとしたら,なぜいちいちset_imask(0)をしてやらないといけない   状況になっているのか・・・考えられる原因をお教えください. 雑多な説明で申し訳ございませんが,どうぞ宜しくお願い致します.<(__)>

  • JTextFiledの割込み処理について

    毎度お世話になります。 JTextFiledの割込み処理の簡素化について、お聞きいたします。 JTextFieldの割込み処理は、各JTextField毎に記載の予定ですが、ここではdataUp0の割込み を記載しています。(下記コードをご参照ください) 各JTextField(例えば、dataUp0等で合計約40個あり)、ますので40個の割込み処理 ルーチンの記載が必要とおもいます。 Q1)この割込み処理ルーチンの共通部分を、サブルーチン化等をおこない、コード数を    減少させる方法に関するコメント頂けますと、大変あり難いです。 //JTextField定義部分(new部分は別途記載)============== // コンポーネントを作成 static JTextField dataUp0; static JTextField dataUp1; static JTextField dataUp2; static JTextField dataUp3; static JTextField dataUp4; static JTextField dataUp5; static JTextField dataUp6; static JTextField dataUp7; static JTextField dataUp8; static JTextField dataUp9; static JTextField dataUp10; static JTextField dataUp11; static JTextField dataUp12; static JTextField dataUp13; static JTextField dataUp14; static JTextField dataUp15; static JTextField dataUp16; static JTextField dataUp17; static JTextField dataUp18; static JTextField dataUp19; static JTextField dataUp20;      //21個のみ記載し以下省略です //割込み処理ルーチン(dataUp1に対応)========================= // テキストフィールドにイベントリスナを登録     //処理内容:dataUp1のフィールドをダブルクリックしますと、各ダブルクリックごとに     //背景色が白から緑、緑から白と変化します。 dataUp1.addMouseListener ( new java.awt.event.MouseAdapter () { public void mouseClicked (java.awt.event.MouseEvent evt) { if(evt.getClickCount () == 1) { //System.out.println("Click"); } else if(evt.getClickCount () == 2) { mouseDoubleClicked (evt); //System.out.println("Double Click"); } } void mouseDoubleClicked (java.awt.event.MouseEvent evt) { switch(HColor[1]){ case 0: HColor[1]=1; dataUp1.setBackground(java.awt.Color.GREEN); //staticでok break; case 1: HColor[1]=0; dataUp1.setBackground(java.awt.Color.WHITE); //staticでok break; default: break; } dataUp1.setText(dataUp1.getText() ); } } //================================= 以上、宜しくお願いします。

    • ベストアンサー
    • Java