• 締切済み

タイマ割り込みについて

タイマ割り込みというのは割り込み周期で常に 割り込む関数を実行するのでしょうか? 繰り返し(while,for)を使わなくても常にやるのか? ということを聞いています。 関数とはC言語の関数で、DSPボードでやっています。 よろしくお願いします。 説明が下手ですいません。

みんなの回答

  • hiroaki_0
  • ベストアンサー率53% (131/245)
回答No.3

一般的にはそうですが、  ・タイマ割り込みで実行される関数の処理時間がタイマ周期よりも長い  ・優先度がタイマ割り込みと同じか、より優先度の高い処理が実行されている場合は、割り込み関数の実行が先延ばしになる。(他の処理がタイマ割り込みの周期よりも長い場合、2~3度の割り込みで1回しか実行されない可能性もある) と、言うようなことを十分ご注意ください。

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

> タイマ割り込みというのは割り込み周期で常に > 割り込む関数を実行するのでしょうか? おそらく、そうです。 が、マニュアルには何と書いてあるでしょうか。 DSPボードで、ということなので、そのDSPボードでの機能がお知りになりたいのだと思います。 そうであれば、ここで一般的な機能をお尋ねになってもあまり役に立ちません。実装がどのようになっているかによって、実際の意味合いは異なってくるからです。 開発キットに含まれているCコンパイラのライブラリの機能にタイマ割り込みがあるのだと思うので、ライブラリのマニュアルにある「タイマ割り込みとは…」という説明をお読みください。

  • driverII
  • ベストアンサー率27% (248/913)
回答No.1

今ひとつ、環境が良くわからんのですが・・・ 一般的にこのようになるかと思います。 ■プログラム開始 ■タイマ割り込み処理登録 ■繰り返し処理(プログラムを終了させない為) ■タイマ割り込み処理解除 ■プログラム終了 つまりご質問の通り、割り込み周期で常に実行となりますね。 タイマ割り込み処理登録後、解除までの間です。

関連するQ&A

  • 手続き型と関数型について。

    手続き型言語の定義は、「記述された命令を逐次的に実行し、処理の結果に応じて変数の内容を変化させていくプログラミング言語」となっていて、関数型言語の定義は、「数学的な言語仕様をもつプログラミング言語のこと。一度値を与えられた変数は常にその値を維持し、計算は計算結果を引数とした関数呼び出しの繰り返しとして行われる。」とあります。 関数型の、「一度値を与えられた変数は常にその値を維持し」はどういう意味ですか? 例えば、a=2とした後に、a=3などとすればaの値は変わっているのですが。 簡単な例で説明してください。

  • AKI-H8/3048Fでのタイマ割り込み

    秋月電子で http://akizukidenshi.com/catalog/items2.php?p=1&q="K-00004" を買いマイコンの勉強をしています。 コンパイル等はGCC Developer Lite、モニタプログラムを使いRAM上で 動作確認をしています。 タイマによる割り込みをしたいと思い、参考書のプログラムを参考に マザーボード上の2つのLEDが交互に光るようにしたいのですが、 肝心のint_imaia0()が全く実行されていません。 #include <3048.h> int c; void int_imia0( void ) { ITU0.TSR.BIT.IMFA = 0; c -= 1; if( c == 0 ){ P5.DR.BYTE = ~ P5.DR.BYTE; c = 10; } } int main( void ) { c = 10; P5.DDR = 0x03; ITU0.TCR.BIT.CCLR = 1; ITU0.TCR.BIT.TPSC = 3; ITU0.GRA = 39999; ITU.TSTR.BIT.STR0 = 1; P5.DR.BYTE = 0x01; EI; while( 1 ){ } } また、割り込みを使わない方法ということで #include <3048.h> int main( void ) { int c = 10; P5.DDR = 0x03; ITU0.TCR.BIT.CCLR = 1; ITU0.TCR.BIT.TPSC = 3; ITU0.GRA = 39999; ITU.TSTR.BIT.STR0 = 1; P5.DR.BYTE = 0x01; while( 1 ){ while( !ITU0.TSR.BIT.IMFA ); c -= 1; if( c == 0 ){ P5.DR.BYTE = ~ P5.DR.BYTE; c = 10; } ITU0.TSR.BIT.IMFA = 0; } } を試したのですが、こちらはLEDが交互に点滅して成功しています。 なのでタイマ自体は動作していると思うのでですが、上のプログラムだと int_imaia0()動作しません。 何がいけないのでしょうか?よろしくお願いします。

  • C言語の勉強 例題の載ってるサイト

    C言語を勉強したく 初心者本を数冊購入し大方は実際にパソコンのまえで実行しながら読み終えたのですが・・・。中級本を買えといってしまえばそこで結論なのですが・・・。今回は例題の載っているサイト様を紹介していただきたく書き込むしだいであります。 for だとか while だとか どのような場面で実践的に使うことになるのか、簡単なゲームなどの製作を、例題を掲載するという形で、その関数がどのような働きを・・・と詳しく説明してくださっているサイトはないでしょうか?あくまで実践で使えるんだ!という達成感を得たいのでカンタンなものでいいのでゲームなどを作成するような例題が好ましいです。 よろしくお願い致します。

  • C言語のプログラムについて

    C言語のプログラムについて 3桁の自然数の中で、自分自身を含めた約数が奇数になるものがいくつあるかを求めるプログラムを作りたいのですが、swich文を使って、6通りの方法で出そうとしていまして、 while 文、 for文、 do while文に加え、 for文のを、1つの関数として独立させたもの、 さらに、for文のを重ループ部分のそれぞれのループに対応して、2つの関数として独立させたもの、 そして、この2つの関数のどちらともをループを用いずに再帰呼び出しを用いたもの の6通りで出したいのですが、swich文を使うところは自力でできたのですが、あとの6つそれぞれのプログラムの組み方がわかりません。 教えていただけないでしょうか?ややこしい書き方をしてすいません・・・。

  • C言語 break実行後の行先について

    いつもこちらで、ご援助頂いております。 さて、今回も趣味のマイコン制御において、ご指導お願い致します。 問い合わせ内容は、while(1)繰返しブロック中にbreakが実行されると、 whileブロックを抜け出るとは、聞いておりますが、その抜け出た後は どの位置までいくのでしょうか? 次にその疑問ソース構文の要点部分を、行番で記述いたしました。 1、void main() 2,{ main関数開始 3、while(1) 4、 {  while(1)の始まり中括弧 5、   for(・・・・・) 6、     {         forにより繰返す実行文 7、      break; 8、     } for文の終わり中括弧 9、   } while(1)の終わりの中括弧 10、}main関数終わりの中括弧 以上、簡単な表記ですが、実行動作の解説を致しますと、 行番6のfor文の繰返しの中にスイッチ入力すると、 breakに進み、結果を表示して停止します。 ここまでは、希望どおりの動作ですから、何ら問題がないのですが、 再度動作させるには、マイコン自体のリセットを 行わないと、同じことが出来ません。 希望の動作では、1個のスイッチを押すことにより, 停止させたり、動作させたりしたいのです。 この時の、breakの働きですが、whileの終わり中括弧行番9番を 抜け出た後は、行番2番と行番3番の間に行くのでしょうか? もし、そうだとすれば、プログラムの流れからは、 停止せずに繰返しの動作になると思います。 ところが、リセットをかけないと動かないので、 main関数外へ抜け出てしまうのでしょうか? これなら、想定の説明が出来ます。 という事で、break後の行先はどうなるのでしょうか? 簡素な質問内容で考査が難しいかと思われますが、 お気づきの範囲内で、アドバイスを頂けるなら大変幸いです。 宜しくお願い致します。     

  • PICのI2C通信を行っているときにタイマ割り込みはできますか?

    私はC言語(CCS-Cコンパイラを使用)でPICのプログラミングをしています。使用しているPICは16F877Aです。 いま学習リモコンを製作中なのですが、赤外線信号の学習方法としてベタ読みを(1kByte分)行うつもりです。その際、16F877AではデータメモリがEEPROMを合わせても1kByteには足りません。ということは、赤外線信号を39kHz毎にチェックしながら、1ページ分(64byte)信号データがたまったらI2C通信で外部EEPROMにページ書き込みをしなくてはいけない、と考えています。 そこで、「I2C用組み込み関数を使用して外部EEPROM(24LC256)にページ書き込みを行っている最中に、タイマ割り込みは使用できるのか?」また、「タイマ割り込みが使える場合、正確にI2C通信が行えるのか(データが欠けたりしないか)?」を教えてほしいんです。 もちろん、18F452を使用すればデータメモリだけで1kByteを超えるので、この問題は解決できます。しかし、できれば現在手元にあるものを使って作りたいので、どなたか分かる方がみえましたら、教えてください!

  • c言語プログラミングでの質問?です。

    学校でc言語プログラミングを使って簡単なゲームを作りなさい。 という課題が出ました。 下記の条件に沿って作れとのことです。 なかなかいいアイデアが浮かばないんですが、なにかちょうどいいものないですかね? ・scanf文を使うこと。。 ・if文を使うこと。 ・for文(while文)を使うこと。 ・rand関数を使うこと。 ・自分で定義した関数を使うこと。 ・配列または文字列を使うこと。

  • 定周期での割り込み

    c言語での10msecの割込プログラムを作成しようとしています。 ですが、なかなか割込というものが理解できていません。 シングルタスクでの割込プログラムはどうすればよいのでしょうか?  for(;;) {   func(); //10msecごとに実行したい関数   usleep(100000);  } では割込み処理にはならないんですよね? きちんと理解できていないため、質問もあいまいになってしまっていますが、よろしくお願いいたします。 また、シングルタスク等が説明されているサイトがありましたら、教えていただきたく思います。

  • ループの特定入力終了

    C言語初心者です。よろしくお願いします。 whileなどのループ関数を使って、キーボード 入力をするたびに、ループが一度走る事は、 可能です。ですが、 常にループは走らせながらendなどの特定 の入力をされた場合に、ループを抜ける プログラムをどうしてもできません。 わかる方、教えていただければ幸いです。

  • プログラミング(自由課題)

    プログラミングの勉強会で以下のような課題が出されたのですがなかなかいいアイディアが思い浮かびません。初心者にもあまり難しくないものは何かないでしょうか?あったら教えてください。 内容は自由であるが、必ず 『繰り返し』(for文またはwhile文) 『条件分岐』(if文またはswitch文) 『配列』 『関数』(main関数以外の自作の関数) を含むこと。 初めてプログラムを見た人にもわかる説明ができるようにしておくこと。