午後からは、装置とホストPCの間でデータ転送が追いつかなくなった場合の対処法を詰める。
現在の設計では、測定データはまず、装置のメモリ上に静的に確保されたデータパケット構造体に書き込まれる。データが書き込まれたパケットが出来たら、そのアドレスがホストPCに通知される。通知を受けたホストPCはそのアドレスのパケットの内容を読み取る。内容が読み取られたパケットは、ホストPCによってその状態フラグにEMPTYが書き込まれる。EMPTYが書き込まれたパケットは、ファームウェアのパケット回収ルーチン(無限ループ中で動作している)で回収され、再利用される。
単位時間あたりのデータ量が増えたり、ホストPCの処理能力が不足すると転送が追いつかなくなる。ファームウェア側でデータを書き込めるパケットが無ければ転送が追いついていないことが分かる。
では転送が追いつかなくなったとして、どう対処すべきだろうか。大きくは2通りの方法が考えられる。一つは追いつかなくなった時点で測定を中断してしまうという方法。もう一つは測定を一時停止して待つパケットの空きが出来るまで待つという方法。これまでは後者の方法を採っていた。この方法はコーディングは比較的楽なのだが、測定の流れがギクシャクと断続的になってしまうという欠点がある。特に高速で測定している場合は機械的な振動などの原因になる可能性がある。
では問答無用に中断してしまえば良いかというと、そうも問屋が卸さない。長い時間をかける測定などでは測定が勝手に停止してしまっては勝手が悪い。一晩測定させておいたつもりが宵の口に勝手に止まってしまってはまずいだろう。結局、タイムアウト付きの一時停止という形をとるのが妥当かも知れない。
一旦帰宅してから、果物やら野菜やらをもらいに実家へ。