2007年03月30日

Windows で テストプログラムを動かす

MinGW/MSYS で avrdude をビルドできたので、USB910用のテストプログラムを移植することにしました。

もともと簡単なものなので、移植するのは次の2点だけです。

1)シリアルポートの制御
open/close/read/write を使うことにして、ファイルディスクリプタを使ってシリアルポートの設定をする 関数を別に用意することにします。ファイルディスクリプタからハンドルへの変換は、_get_osfhandle が使えました。
シリアルポート設定自体は、avrdude を参考に作りました。あと、open のオプションに O_BINARY が必要でした。

2)usleep の作成
WIN32API には、ms 単位の Sleep があるので、単位を変換して usleep を作ることにしました。

あと、性能を測るために、double dtime() という関数を作りました。Linux だと gettimeofday を使えばよいわけですが、WIN32API だと TimeGetTime() 。この関数を使うには、リンカオプションで -lwinmm が必要でした。

MinGW でも getopt が使えるようなので、ついでにオプションの処理を整理。

テスト1

AVR-CDC 性能測定に使った、テストプログラムを使って長時間エラーなしに使えるかやってみました。百万回ほど通信しましたが OK でした。





変な形ですが、何回やってもこうなります。ドライバの作りと カーネルのイベントの処理の特性だと思っていますが、ひょっとしたら USBのコントローラとかハードウェアの違いでこうなるのかも知れません。

もっと I/O サイズを大きくしたらどうなるか興味が出てきました。別途テストしてみたいと思います。

テスト2

RC発振器のキャリブレーションで使ったプログラムが動くか確認。このプログラムは、I2Cで通信しています。I2Cの通信では、BUSY のときは、−2 を返して通信できない仕様にしているので、タイミングも関係あります。もとのテストプログラムがいいかげんだったので、結構ハマリました。−2が返ってきたときはリトライするコードを入れることで(って仕様どおりにしただけなんですが)一応ちゃんと動くようになりました。

最新版は、
usb910-0.4.tar.gzusb910-0.4.zipです。MinGW/MSYS でビルドする場合、tar.gz の方を使ってください。

注意点 ... テストプログラムは自由につかっても良いですが、-Wall すると山のように Warning が出ます。その程度のものですので、あまり信用しないように。

まだ問題はあるかも知れませんが、とりあえずは Windows でも USB910 を使えるようにしました。よかったら USB910 で遊んでみてください。
posted by すz at 03:09| Comment(0) | TrackBack(0) | USB910B
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/30760385
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック