KiNOKO-DAQ 関連情報 掲示板

このスレッドに記事を投稿する
前のスレッド | 次のスレッド | 掲示版ホーム

vmedrv32d32
2002 年 9 月 14 日 14 時 56 分
投稿者: 松本偉史

筑波大学の松本です。
学会お疲れ様です。僕も時間があれば見に行きたかったのですが
DAQ が思うように進まずに行けませんでした。

さて、榎本さんの vmedrv に付いているサンプルプログラムの vmewrite を使って
vmedrv32d32 から bit3 へアクセスしようとすると lseek でエラーをはいて止まってしまいます。
(bit3 のジャンパの設定は良いはずですが・・・)
vmedrv24d32 の方はちゃんと動いています。
良くない原因を教えて頂けませんか?

よろしくお願いします。



2002 年 9 月 18 日 19 時 30 分
投稿者: 榎本 三四郎


遅くなってすいません。

こちらでエラーを再現したいので、エラーが発生した lseek() 呼び出しのパラメータと
エラーメッセージを教えてください。できれば、エラーの発生するプログラムを添付して
もらえるとより詳しくわかると思います。

よろしくおねがいします。



2002 年 9 月 19 日 16 時 25 分
投稿者: 榎本 三四郎

使ったプログラムは vmewrite ですね。急いで書いたので見落としてしまいました。
すいません。

vmewrite に渡した引数の値(アドレス、サイズ)とエラーメッセージの内容を
教えてもらえませんか?


vmewrite
2002 年 9 月 19 日 17 時 33 分
投稿者: 松本偉史

肝心の部分を報告しなくて吸いません。

まず、このように実行しました。

vmewrite 0x80e01000 0x4 0xf
アドレスは、現在使用している SIS4100 という
VME-FASTBUS interface の仕様です。
A32D32 をつかう時にはベースアドレスを
0x80e00000 にして、後ろの5桁を使って
ファンクションを指定するというものです。
(1000 は SIS4100 の LED を点灯させるものです。)
これで実行すると、

open device file success
ERROR: ./vmewrite: lseek(): Success

と表示されて終了します。
どうやら lseek() の前まではちゃんと行っているようです。
テスト用の LED は点灯しないので、送りたい
0x0000000f という4バイトのデータは届いていないようです。

ためしに A24D32 でやってみるとうまくできます。



2002 年 9 月 19 日 17 時 36 分
投稿者: 松本偉史

すみません。コードを添付し忘れました。
そのまんまですが、、、


よろしくお願いします。

添付ファイル: vmewrite.c (1.9 kb)



2002 年 9 月 19 日 18 時 11 分
投稿者: 榎本三四郎

lseek() は、シークに成功した場合、新しいファイルオフセットを返し、
失敗の場合は -1 を返します。今回の場合、シーク自体には成功しているのですが、
ファイルオフセットが 0x80e01000 で、lseek() の戻り値型が off_t 
(x86 用 Linux 2.x では符号付き 32bit)のため、この値が負に解釈されてしまって、 
if (lseek(...) < 0) の条件を満たしてしまったのだと思います。

解決策として、if (lseek(...) < 0) の部分を if (lseek(...) == -1) に
変更してみてください。vmedrv の次のリリースからは全てこのように変更したいと
思います。

御迷惑をおかけしました。

できました。
2002 年 9 月 19 日 20 時 14 分
投稿者: 松本偉史

ちゃんと動くようになりました。
ありがとうございました。助かりました。

これからもよろしくお願いします。


このスレッドに記事を投稿する