寒い!昨夜はしばらくぶりに暖房をつけてしまった。しかし今朝はさらに寒い!雨が冷たいし風も強いし。

 昨日見つけた試作基板の信号線の異常電圧の修正に担当者がすぐには取り掛かれないようなので、先に他の部分を進めることにしたた。
 元のソースを整理しながら周辺素子の制御コードを追加していく。素子の制御部は上位の設計に影響を受ける可能性は低いので、設計が確定していなくてもコーディングできる。つまり工程のどの段階でやっても構わないので、今のように他の工程の待ち時間などに挟むバッファ作業にすることができる。
 昼食後しばらくしてから、マイコンとホストPCとの通信で落とし穴に嵌った。今回の開発の基にしたプログラムは正常に通信できていたし、実施にそれをマイコンに書き込めばちゃんと通信ができる。なので、回路の不具合ではない。後から変更したコードに問題があるらしい。ソースをじっくり見ても何も見つからないので、泥臭い方法ではあるが、処理に沿って順にデバッグライトを入れて動作を確認していった。
 夕方になってようやく原因が分かった。なんのことはない、通信でコマンドを受信したときに通信コマンドを実行する関数が正しく呼べていなかった。今回の派生開発の初期に、通信モジュールの独立性を高めるために、コマンドの受信とコマンドの実行を別のソースファイルに分けたのだけど、このときミスをしてしまっていた。
 ソースを分離するために、コマンドの実行は関数ポインタを利用したコールバックで行うように変更したのだけれど、この関数ポインタの値が初期値(NULL)のままになっていた。本当なら、この関数ポインタにはあらかじめコマンドを実行する関数のアドレスを代入しておかなければならない。この代入を忘れていた。
 それにしても今回惑わされたのは、この関数ポインタが値がNULLであるにもかかわらず、実行するとなんとなく通信っぽい動作をしていたからだ。おかげでここに問題があるとは全く思いもよらなかった。

 帰りにアマゾンの荷物をローソンで受けとった。