簡単だーーー!とか思ってても、やっぱり何かしらハマるよね
動きゃいいってもんじゃないですよね
こんばんは。
キテレツです。
機能のファームウェア書き込めない事件は・・・・結局メーカーに送り返さなければならなくなりました。
手元にあるWindows7マシンではどうしようもないらしいです。
んで、シリアル通信でアレコレ処理するための調査を実施しているわけなんですが、受信する方法によって取りこぼしとか処理に例外でちゃうとかいろいろハマっちゃいました。
テスト用のアプリも作って、できるところを詰めてみた。
ネットに書かれている2次情報
似たような処理がたくさんブログに掲載されていますが、どれが真実なのやら。
結局、マイクロソフトのサイトに頼ることになるんですが、、、あれ読みにくいですよね。(´-ω-`;)ゞポリポリ
何にハマってしまったかというと
受信部分がスレッドになっている
ってところでした。
WindowsFormアプリケーションとして製造していたので、操作しようとすると例外が発生しちゃうんですね。
その部分について、2次情報には詳しくは書かれてなかったりします。
かなり端折られていたり。
まぁ、ブログとして公開するとしても、それは自分のメモとして残すのが多いですから。
事細かにきっちり書くのは結構大変ですし。
んで、中途半端に動き始めるので困ったわけです。
1次情報 → 2次情報
の順番で情報をなんども閲覧すると、キテレツの理解は少し深まった気がします。
んが、ついつい2次情報ばかりをみて作っちゃうんですよね。
コピペしちゃったりしながら。
- ブログからコピペしてみる
- コピペ内容を自分の制作物にあわせる
- 動かしたら、ブログとは同じ結果になった
- 色んな角度でテストすると例外発生
- 1次情報を閲覧して内容を確認する
って流れで、今日の作業が進みます。
テストするたびに色んな所で例外が発生します。
ブログ書いてる人も同じようになっているはずなんですが、問題点やら解決策やらは掲載していないですね。
自分で.調べるしかありません。
マニアックな方法はご法度
です。
マニアックな方法を取れば取るほど、接続元と接続先のつながりが濃くなってしまうので、どちらかが別の装置になったとたんに動かなくなります。
メーカーが変わるとか、型番が変わるとか、そういったことは現場では結構頻繁に起こります。
そのたびにソースコードを修正するのは好ましくありません。
結局のところ原始的な方法になる
わけです。
単純明快だけれど融通聞かない方法。
でも、きちんと制御できる方法。
今回の場合は、スレッドを使わずに1バイトずつ切り出しながらWindowsの受信バッファから情報をひっぱりだし、制御コードとデータを解析する方法を模索して試しました。
可能な限り複雑にならないように。
複雑にならずに安全に動く
のが目標。
取りこぼしなく、イレギュラーにも対応。
んで、色々対応していたら・・・・マイコンソフトみたいになっちゃった。。。。。