今日も一日中プログラミング。新しいフォーマットでの保存・読み込み機能の実装の残り。主な部分は昨日のうちに終わっており、今日は保留していた細かい部分を片付けてゆく。途中で必要に応じて既存のコードもちまちまと調整する。
そちらの作業が一区切りついたときに、ふとデータ転送のボトルネックになっている箇所を思いついた。ちょっと調べてみたら確かにずいぶん非効率な設計になっていた。
ファームウェアからPCにデータを転送する場合に、インターネットのパケットのようにデータを一定サイズの構造体に詰めて転送する設計になっている。データを連続的に送る場合、データが一杯になったパケットが次々にPCに送り出されることになる。これを実現するためには、使用可能なパケットを常に確保しておかなければならない。ファームウェアではメインループのタスクの一つで空のデータパケットを回収して確保しているのだが、そこからパケットを取り出す処理が非効率的な設計になっていた。このような設計にしたるのはメモリ使用量を減らすためで、従来の回路ではこのくらいの非効率さは問題なかった。ところが新しい回路で通信方式が変わったために問題が表出してきた。
ちょいちょと修正してパケットをキューに確保するようにした。当然メモリ使用量は増えるが、これでパケットの取り出しを高速化できる。実際に動作させてみたところ、転送が間に合わなくなってパケットが枯渇する限界がかなり改善した。実機で試してみる必要はあるが、もしかするとこれで十分な速度が達成できたかも知れない。もしそうなら昨日と今日で今抱えている3つの難問のうち2つまで目鼻がついたことになる。
気をよくして残った難関の1つについても手を考える。方法はもう考えてあって、具体的にどのように設計して実装するかを考える。さすがにこちらは今日には終わらない。また来週。
ちなみに今日も上司は出張で不在だった…。