2018年12月23日

microSD関連のバグについて

microSDにデータを記録するタスクに、記録するチャンネルに対応する条件分岐を設定し直した。

以前から「対応するアドレス毎に」条件分岐を設定していたのだが、

WS001521.JPG

バグが発生する状態ではやたらと記録に時間が掛かる傾向があった。 電源投入後の立ち上げに掛かる時間とほぼ一緒なのが、何気に危ない。

以上の現象から想像するに、メモリーにデータを書き込みむ際に発動される条件分岐が無視されて、全てのデータが書き換えられているようだ。 これを阻止するために、さらに上位の篩分けとなる「mode2のチャンネル」によって分岐を行うことにしたのだが、、、。

WS001520.JPG

コンパイルが通ったので、後ほど実機で試験を行おう。

追記:

実験の結果、データのストアは正常に機能している模様。 ビープ音の再生も問題なく行われた。

ストアに要する時間が短縮されたことから、書き込み時の誤動作は解消したと解釈してもよいだろう。
posted by Yasuski at 08:57| LaVoixski

Arpeggiator#12にバグを発見する

再生を繰り返す過程でアルペジエータ12番の挙動が怪しいことが発覚、コードを精査したところローカルに配置した円環カウンタのクリア機構にアサイン・ミスを発見した。

WS001519.JPG

が、、、作業の甲斐無く、アルペジエーターのおかしな挙動は一向に改善しない。

これは「読み出したファイルの記述自体にミスがある」と考えてmicroSD にストアされたファイルの内容を確認したところ、本来は並んで記述してはいけないセパレーターの , (コンマ)と # (シャープ)がダブっていることを発見した。

不具合の原因はこれで決まりだが、面妖なのはソフトウェア側の該当する箇所の近辺に別のミスが潜んでいたことだ。

その他に確認されている怪しげな箇所としては、Sequencer内でアルペジエータの再生レートが設定不能になるバグがある。 ロータリーエンコーダーにアクセスする手順を間違うと、二度とパラメーターを変更することが出来なくなってしまう。

原因は、ロータリーエンコーダーの出力バッファーがMetroで組んだ回路と切り離されてしまうことだと思われるが、トリガーと連動してバッファーの値を取り込めるように、コードを改編する必要がある。

その後、該当する箇所にデータを読み込むためのコードを追加して問題は解決したが、microSDにデータを書き込むためのルーティンが何故か上手く動作しない。 いまのところ原因は不明だが、IDE自体のバグの可能性もあるので、しばらくの間は様子をみることにしよう。
posted by Yasuski at 00:14| LaVoixski