2019年06月16日

Exciterに倍音生成関数を追加する

今朝は、ExciterモードでTransferを行う際に参照する倍音生成パラメーターに6/7/8次倍音の計算を行う関数を追加し、

WS001897.JPG

プリセット・パラメーターの生成時に参照する倍音構成をメモリーch毎に組み替える作業を行っていたが、

WS001898.JPG

コンパイルは通るものの、起動時のチェックポイント#6で何故か起動が停止してしまう案件が発生してしまった。

チェックポイント#7はデータ容量の多いWavetableの読み込みを完了したフラグなので、ここに至らない原因はフリーなメモリーの不足が考えられる。

WS001899.JPG

オプティマイズにLTOを選択して実験してみると、RAMの使用量が95%に増える一方、チェックポイント#3で起動が停止することから、RAMの使用限界を超えたことが不具合発生の原因とほぼ確定した。

いろいろと試行錯誤した結果、コンパイル時のオプティマイザーの選択によって、動作の可否が決定されることが判っているが、プログラム・メモリーの使用量を減らすことで、RAMの使用量をダイエットできる可能性を思いついた。

そういえば、高速化を論じたフォーラムでもこの手法が奨励されていたことを思い出し、ダメ元でSmallest Code with LTOを選択した結果、RAMの使用量が93%に減少して正常な起動を確認できた。

WS001896.JPG

「Arduinoのオプティマイザは挙動が読めない」とForumでは皆が同意しているのだが、プログラムの最小化がスピードアップに繋がる場合があることを今回の作業で実感させられた。

実際、オーディオクロックを96kHzに上げても動作に支障はなく、明らかに処理スピードが向上している。 

よって、現行システムに対応するオプティマイザとして Smallest Code with LTO の選択が最適解となった。
posted by Yasuski at 06:42| LaVoixski