Repo
kjana00@gmail.com
2011-12-20 00:59:12
今朝は晴れ。朝ごはんはパンとサラダとソーセージ。何か変な夢を見た、という記憶だけが残ってて夢自体の記憶が無い……冷え込んでくると日差しがあったかいわね。
通常の状態遷移は大体いいだろうっていうのがあったんで、サブマイコンとの通信の練習っぽく、リクエスト-レスポンスな格好で情報を拾ってこれるようにしてみる。PC 側は ruby で serialport なスクリプト。とりあえず、だから 1byte のコマンドに答を返すだけ、その答もペイロード長+実データっていうだけの簡単プロトコル。で、それが何だか上手く動かないなというので悩むことに。
最初のうちだめだったのは、IO#write に整数値渡すと文字列化して書いてくれますっていう前から何度か引っ掛かってるねた。pack しなきゃね、というだけの話。1byte だから直接書いたっていいけど。で、まともなリクエストを送るようにしたら返事も返ってくるようになったけど、ずっと動かしてると刺さるんだな、これが。どこでどう刺さってるのかは良くわからないんだけど。どう検討したものだかその場で思い付かなかった、とも言う。
一応、一度の read で全部読める保証は無かったりするかもとループするようにしたり、レスポンス読みに行くのが早過ぎるのが悪いのかと 1ms の sleep 入れたりしたらちょっと改善した節はあったりするんだけど、それでも結局は刺さってたんでだめみたい。readpartial するなり read_nonblock するなりするべき? SerialPort に set_read_timeout だの read_timeout= だのなんてメソッドあったから、そっちもいるか知らんけど。っていうか、そもそもスクリプトのどこでどう引っ掛かってるのかぐらい、もうちょっとちゃんと確認は出来たな。どれぐらいレスポンスを読んだところで、とか。
他に通常動作以外の状態遷移をちゃんとしておこうといじったけど完全に思ったようにはならない、っていうか対象との通信を待ってみたけど準備完了って返ってきても実際の出力はすぐに出て来ないから故障判定で停止状態に落ちてるとかいうのでも悩んでたりしたんで実験の方も今一つ。もっと早い時刻からやらないと、確かめようとしてるところを確認出来ない。まあ、適当に出力散らしておかないと後の実験が面倒臭いから、でそのまま動かしたりはするわけだけど。
そんな感じで終わってしまって、帰って晩ごはんに豚汁うどん。今日はあったかくなったかもと思ったら街角の温度計は 8℃ とか言ってました。見事に気のせいっぽい。ちょっと具が多過ぎたかも。でも人参半端に余らせてもしょうがないし、それに合わせると大根も増えるし……
後は WWW 見たりゲームしたりと。城をうろうろしてたらうっかり白騎士なんかに殺されたりして。何があったんだかっていう感じだったけど…… Cause Critical Wounds? いきなり死ぬとは思わなかったわ。で、何か気が抜けて今度は忍者だったり。忍者、後で辛くなるのがわかってるんだけどね……