とある案件で、組み込み機器で通信を受けて彼是するアプリを開発した事があります。
いわゆる組み込みLinux関係でしかもdebianだったので楽勝だろーとrubyのSerialPort系gemをつくってチャッチャッとつくってみました。
……ところが。
いざ、本番環境の機器で試すとうまくいかない。
たとえば、
loop do printf "." sp.read #... end
なんて伝統のprintfデバッグをやってみると、本来ならドットで画面が埋め尽くされてるはずが
実際には一個だけプロットされて動かない。
……つまり受信待機中なわけです。
同じdebian系OSを採用しているのに、これはいかに?
一応、PC版はUSBドングル、組み込み番は良くあるドーターボードソケットという違いはありましたが。
こんな時は、読み込み時間制限まわりを疑ってみましょう。
sp = SerialPort.new 115200, 8, 0, SerialPort::None sp.read_timeout = 50
と50ミリ秒に設定してあげたら、動きました。
USBドングル版では石が宜しくやってくれていた所を自前でフォローする必要があったわけですね。
久しく組み込みから離れていたので感覚が抜けてました。