おいふぉりーのぶろぐ

きっと趣味のブログに違いないです!!

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

[MAXII]SPXのリード時間を計測してみる。

このまえ作ってみた48ビットSPXの続きです。

転送速度は921.6kbpsでそこそこ速いんですが、問題はWindowsAPIを使ってシリアルポートにアクセスしてから実際にシリアルポートから信号が出力されるまでどれだけディレイがあるかということです。その辺を、計測してみました。ここでは、SPXのリードコマンドの実行時間を計測してみました。

色々やる前に。。。SPXのリードコマンドとは、PCからコマンドキャラクタ'r'に続き、アドレスを2バイト送信、SPX本体からデータを2バイト受信と言う感じになっています。SPX本体がコマンド、アドレスを受信してからデータを送信するまで遅延はありません(数百nsはあるけどさ)。あと、921.6kbpsなので全5バイトの転送時間は、スタートビット、ストップビットが1ビット分あることを考慮して、1/921600*(8+1+1)*5=54.23usとなります。測定結果を見ると分かりますが、これらはほぼ誤差って感じの小さな値です。今回の測定では、(送信APIを実行してから実際に送信されるまでの時間)+(実際に受信してから受信APIで読み出すまでの時間)を計測することになります。要は、WindowsおよびUSBシリアルさん達がどんだけ速く応答してくれるかってことの計測になります。

えと、私の開発環境ですが、PentiumM1.5G、WindowsXP(SP2)って感じです。ノートパソコンなのでシリアルポートはUSBシリアル変換IC(FT232BM)を使って、仮想COMポートとしています。

測定部のプログラムはこんな感じ↓。
double Begin = counter.get();
pSpx->ReadByte(M2SPX_PA);
double End = counter.get();
counterオブジェクトは内部でQueryPerformanceCounterを使っています。pSpxというのは、SPX用のオブジェクトです。
プログラム全体としては、リードコマンドを1000回実行して、実行時間をCSVファイルに書き出します。

えと、計測の前に、デバイスマネージャでUSBシリアルポートのプロパティを見ると"Port Setting"というタブがあって、そこに"Advanced"というボタンがあるので、クリックするとこんなダイアログ↓が開かれます。
spx_delay_dm_setting.png
ここで、USBシリアルの仮想ポートをどの"COMx"に割り当てるかとか設定できるんですが、今回の計測では、"USB Transfer Sizes"と"Latency Timer"を変化させるとSPXのリード実行時間がどんな感じに変化するか調べることにします。

spx_delay_cl.png
"Latancy Timer"は16[ms]一定で"USB Transfer Sizes"を変化させたときの結果です。見ての通り、実行時間は変わりません。まあ、通信しているデータの単位が2バイトとかってメッチャ少ないからねぇ。
表を見てもらうと分かるように、1000回の計測時間の最大、最小、平均値を示しているんですが、結構、最大、最小値の開きが大きいってことで、"Latancy Timer"が16[ms]、"USB Transfer Sizes"が4096[bytes]のときの計測時間のヒストグラムを作ってみました。
spx_delay_b4096_l16_hist.png
まあ、時々Windowsの気まぐれ?によって実行時間がやたら長くなることがあるってのが分かります。


spx_delay_cb.png
お次は、"USB Transfer Sizes"を4096一定にして、"Latency Timer"を変化させたときの結果。これは、非常に実行時間に影響するということが良く分かります。
spx_delay_cb_gr.png
グラフにするとこんな感じ。"Latency Timer"が3[ms]のときが最速のようですね。理由は良く分かりませんが。おそらく、"Latency Timer"というはUSBシリアルのバッファの処理間隔?みたいなものだと思うのですが。。。なんだか、基本的には"Latency Timer"とSPXのリード実行時間は同じ値です。けど、小さくしすぎると頭打ち?というか"Latency Timer"が3のときを境に逆に遅くなる?どうしてこんな挙動をするのが、詳細は分かりません。仮想シリアルポートのドライバソースを見れば分かるのかもしれませんが。。。そんなメンドイことやりたくないし。
  1. 2006/07/23(日) 13:09:29|
  2. ハードウェア開発
  3. | トラックバック:0
  4. | コメント:0
<<ダイオードに逃げられた。。。 | ホーム | 現品から注文していたものが届きました。>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://tm86eublog.blog42.fc2.com/tb.php/117-a2fbad90
この記事にトラックバックする(FC2ブログユーザー)

来客数

プロフィール

Euphorie

Author:Euphorie
"おいふぉりー"って呼んでくださいな☆
ハードウェアとかソフトウェアとかの開発に興味があったり。。。
連絡先は上の画像。

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。