• ベストアンサー

マイクロ秒で精度が出るタイマー

マイクロ秒で精度が出るタイマーってご存知ではないでしょうか? ご存知ならご教授おねがいします。 ・環境 OS:XP 使用言語:C、C++ その他:API32使用 よろしくお願いします。

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

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

>実は業務で連続的に16bitのデータを送る通信システムを作成しているのですが、その送信するデータとデータの間のインターバル的な時間をマイクロ秒単位で管理したいのです。 >守秘義務が絡むのであまり詳しくお話できなくて申し訳ありません。。。 インターバルタイムが最低限の時間(オーバーを許容)なら問題ないと思いますが、そのインターバルタイムを死守しないとマズイならWindowsOSでは無理ですので、別のOSで特にリアルタイム性がメインのリアルタイムオペレーティングシステム(RTOS)を捜すべきだと思います。 http://ja.wikipedia.org/wiki/%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%AA%E3%83%9A%E3%83%AC%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0 インターバルタイムのオーバーが許容されても、QueryPerformanceCounterとPerformanceCounterは最近のCPUのターボ・ブーストなどのためで不正確になっています。 ターボ・ブーストとは。 http://www.pasonisan.com/customnavi/cpu_corei/10tuboboost.html 最近のCPUの場合はこのターボ・ブーストの動作状況次第でQueryPerformanceCounterの値が実際の経過時間とズレてしまうのです。 なので、ブーストしないCPUなどの選択も考えないといけないでしょう。 QueryPerformanceCounterを実時間計測には使えない http://d.hatena.ne.jp/shiku_otomiya/20100218/p1 あるいは、タイマカウントーを外部のマイコンに任せるとか通信自体を外部のマイコンにさせるとかすれば正確な動作は期待できます。

shogo5121
質問者

お礼

ご返事ありがとうございます。 どうやらWindowsOS単体では実装は難しそうですね。。。 ある程度のオーバーは許容範囲なので現状のままで行きたいと思います。 それでも厳しくなりましたら教えていただいたURLを参考に、機材、環境レベルでアプローチしてみたいと思います。 ありがとうございました。

その他の回答 (2)

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.2

Win32のQueryPerformanceCounterをつかうしかないかな? http://support.microsoft.com/default.aspx?scid=kb;en-us;306979

shogo5121
質問者

お礼

ご返事ありがとうございます。 URLを参考に自分でも調べてみようと思います。 ありがとうございました。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

たとえタイマーがマイクロ秒単位の精度が出たとしてもマルチタスクOSであるXPが勝手に一定時間ごとにタスクを切り替えるので意味ないと思いますが? 標準的なWindowsにはOSの制約から使い物になるマイクロ秒単位のタイマーは無いと思います。 PerformanceCounterを使っても昨今の動的にクロックをブーストするCPUやマルチコアCPUのお陰でまともに計測できませんし。 なぜ必要なのかを、まず説明してもらうと答えが得られやすいと思います。

shogo5121
質問者

お礼

ご返事ありがとうございます。 実は業務で連続的に16bitのデータを送る通信システムを作成しているのですが、その送信するデータとデータの間のインターバル的な時間をマイクロ秒単位で管理したいのです。 守秘義務が絡むのであまり詳しくお話できなくて申し訳ありません。。。

関連するQ&A

  • 秒単位のタイマーはありますか?

    パソコンのスイッチをいれた2秒後に他の器具のスイッチをいれたいのです。 そんな目的が可能な秒単位のタイマーをご存じでしたら教えてください。

  • タイマー関数について

    こんばんは。 この掲示板には大変お世話になっています。ありがとうございます。 [質問内容] およそ1ミリ秒単位で、待機することができる関数はあるのでしょうか? 私は、C言語を使用しているのですが、タイマー関数としてはSleep関数しか知りません。しかし、最近になってSleep関数は10ミリ秒待機することが限界ということをこの掲示板で知りました。 Windowsプログラミングに用意してある関数で1ミリ秒待機できる関数はありますでしょうか? 私は今、対処方法としてダミー処理をほどこすことでだいたい1ミリ秒のタイマーを作っています。 C言語もまだまだ初心者ですがよろしくお願いします。

  • H8 3664 のタイマー

    こんにちは。皆さんに質問があります。 H8 3664F を使って、1/100秒の精度のストップウォッチを作っているところです。 標準で付いている32.768khzのクリスタルを使って、1秒、0.5秒 etc を作るところまでは出来たのですが、1/100秒が作り出せません。 自分はタイマーはAしか使ったことがない独学の初心者なのですが、どうすれば簡単に1/100秒(10ミリ秒)が作り出せるでしょうか? 1:16.12 (1分16秒12)という感じで表示したいです。 よろしくご教授お願いします。

  • C言語 タイマーのソースについて

    C言語でタイマーを使ってprintf文を記述することで 「1秒経過」、「2秒経過」、「3秒経過」のように表示させたいのですが、どのように表示させるのでしょうか? タイマーの間隔は、できれば1 [ms]だとうれしいてす。 回答お願いします

  • 1/100秒までカウントダウンできるタイマーソフトはありませんか?

    デスクトップで使用できるようなタイマーソフトで100分の1秒まで設定できるようなソフトを(できればフリーウェアで)ご存知でしたら教えて下さい。 具体的には ・○時○分○.○○秒と設定し、スタートしたら指定した時刻に何らかのアクション(音や絵)が起こせるもの もしくは ・○時○分○.○○秒と設定し、スタートしたら指定した時分秒後に何らかのアクション(音や絵)が起こせるもの です。宜しくお願い致します。

  • Linuxでマイクロ精度のスリープ

    Core i3/i5/i7のCPUでLinux(CentOS5.4 kernel 2.6.18)を動かした時、 マイクロ秒の精度でスリープができずに困っています。 nanosleep()やclock_nanosleep(CLOCK_MONOTONIC,~)で100μ秒スリープさせ、 実際にスリープした時間をclock_gettime(CLOCK_MONOTONIC,~)で測定したところ、 Core i3/i5/i7いずれも約4msecスリープしてしまいます。(Jiffies?) 同じOSとテストプログラムでもCore2Duoなら誤差は数μ秒でした。 BIOSでマルチコアとHyper-Threadingをいずれも無効にすると、 Core i3/i5/i7でも数μ秒の誤差に収まったのですが、 マルチコアの恩恵が受けられないとCore iの意味がありません。 またカーネルだけ2.6.35に差し替えると100μ秒程度の誤差に改善されました。 しかし、できれば2.6.18のまま精度を上げられないかと考えています。 ・カーネル2.6.XXで修正された。 ・あるディストリビューションではパッチが出ている。 ・カーネルコンフィグで改善できる。 などなど もし情報お持ちでしたら教えて頂けないでしょうか。

  • 2秒後くらいにシャッターが切れるセルフタイマーつきデジカメ

    私の使っているデジカメでFinPixF710には2秒後にシャッターが切れるセルフタイマーがついていて、3脚を使っての撮影に重宝していますが、他のメーカーのデジカメで同じような機能のついたのがあるのでしょうか。ご存じの方教えてください。

  • C言語で現在時刻取得(マイクロ秒まで)

    UNIX系では現在時刻をマイクロ秒まで取得できますが、WINではどういう方法で取得するのでしょうか?C言語での取得方法をご教示下さい。

  • 1/100秒...。

    C言語を使って、1/100秒を取得する方法を知りたいのですが、どうやったら取得できるのでしょうか? どなたか、ご存知の方がいらしたら、 教えていただきたいのですが...。

  • 間欠タイマー

    等間隔のON・OFFを繰り返す間欠タイマーはNE555等を使えば可能な事までは検索等で調べられたのですが 1秒ON 1秒OFF 1秒ON 1秒OFF 2秒ON・・・・くりかえし といった感じで動く汎用ICや回路等が 私の検索能力では見つけられませんでした; どなたかご存知でしたらご教授願います。m(_ _)m

専門家に質問してみよう