出勤してすぐに、このまえ改造した組み込みプログラムの不具合の報告を社員から受けた。実際に確認すると、連続測定(約0.1秒ごとに出力電圧を変えながら測定した信号の値を計測器からパソコンに読み出す)機能が正しく動作しない。液晶表示器は正常に動作しているように見えるが、肝心の電圧が出力されてない。手当たり次第にいじってみると、ある特定の手順を踏めば正常に動作することが分かった。とすると、何らかの初期化に失敗している可能性が高い。
昼を挟んで2時間ほどかかけて原因を特定した。やはりBusyフラグの初期化忘れが原因だった。元々別のプログラマグローバル変数で実装していたフラグの変数をクラス変数に変えたときに初期化が抜けてしまったらしい。
このBusyフラグは、連続測定中に不用意な処理をさせないために、関連の関数の先頭で、

if (bIsBusy) return;

のように使われる。この bIsBusy が初期状態で true になっていたため、パラメータ初期化が行われなかっため電圧が出力できない状態のままになっていた。すぐに修正は終わり。
夕方、基板メーカーの営業の人が来社。開発用の機材の見積もりの依頼と情報交換を少し。社外の人と話するのは久しぶり。半導体や車業界の設備投資の縮小で今年の下期と来期の売り上げが厳しくなりそうだということだ。

うげぁ

終業時刻を過ぎた頃、メインの仕事である計測制御のプログラムでも不具合報告が。それもある操作をするとOSごと落ちるという凶悪なもの。休みの前にこんなもの見たく無かった。なんで見つけてしもたんや!!(ぉ
なにはともあれ再現条件を詰めていかねばならない。試行錯誤の末、ある程度の確率で3ステップの操作で再現させる手順を見つけた。うーん、これから察するに、さてはあの雑なコードの周辺に原因がありそうだ。設計上、スケーリングに難があるのは分かっていたけど、以前は問題が起こらなかったのでそのままになっていた。あれから徐々にプログラムが大きくなってきて、とうとう問題を起こすようになってしまったか。
だとしたら、根本的解決にはかなりの時間が必要になりそうだ。そもそもうつ症状で低下しきっている思考力で果たして解決できるのか…。むしろこの際、根治はあきらめて回避策を探すべきだろうか。どうだろうか…。
とりあえずOSごと落ちるのは論外だな、うん。