体調不良のため午前中半休。早くも夏ばてか?
 午後から出社して、不具合の再現。先日見付かったADの読み取りエラーと数年前に確認されたDAの書き込みエラーが同じ原因であるかどうかを調べた。調べてみた結果、どちらも無限ループ中で外部メモリへのアクセスを減らすことで解消できることがわかった。このことから、おそらく2つのエラーは同じ原因で起こっていると思われる。ただし、アクセスを減らしていくと、まずDAのエラーが起こらなくなり、さらに減らしていくとADのエラーが起こらなくなる。DAのエラーはあるアクセス回数の以下で突然消失するが、ADのエラーは消失するアクセス数の閾値がはっきりしない。ADのエラーは基板温度の影響を受けやすいようだ。
 今の時点でこれ以上詳しく調べるのは難しいので、具体的な対策に移る。外部メモリにアクセスしている関数はある種のガーベージコレクションで、測定データを書き込んだ構造体(外部メモリ上に確保されている)がホストPCによって読み取られたかどうかをチェックして、読み取り済みであれば次の書き込みに再利用するために回収する。
 この関数中ではforループで何個かの構造体をチェックをしている。このforループのループ回数を減らすことで今回のエラーを解消することができる。かと言ってループ回数を減らしすぎると構造体の回収がデータ転送に追いつかなくなって、転送エラーが起こる可能性がある。どの程度までループ回数を減らせるか、簡単な試算で見積もって、安全のためその数倍に設定してみた。これでもAD、DAのエラーが起こる閾値の5分の1以下のループ回数になる。後は実際に運用してみて再発しないことを確認していくしかない。
 終業間際に、この前からの修理の問い合わせについて関係者と相談して、まず先方に装置をチェックしてもらって、その結果によって派遣人員と日程を決めようということになった。先方の責任者には営業から、実際の使用者には自分がそれぞれその旨を伝えるメールを書いた。
 体調がいまいちだったので、語学講座は欠席して早々に帰宅。