うっかり割算で失敗した話

Accidentally used a division by constant.  Assembly code inspection is helpful, very often, for embedded software design.

実は、私が作った簡単な 3音ポリフォニック(エンベロープ付き)のコードが、割込ルーチン(62.5kHz)のデッドラインに間に合っていないことが判明しました。(お恥ずかしい)

オシロと GCC のオプション ‘-Wa,-a,-ad’ を活用しながらコードを追っかけてみたところ、不用意に / 10 (10での除算)をしている部分を発見。ここを / 8 とか / 16 に変更したら、ランタイムライブラリを呼ばなくなって高速化しました。いやー TI C6000 だと、定数での除算は乗算で置き換えられるのであまり気にしないんですけどね。(言い訳です)

DS1Z_QuickPrint4_interrupt_load

なんとか割込ルーチンの負荷を 25% 以下に抑え込むことに成功! 組込系のソフトウェア設計では、アセンブリコードを追うことが重要というお話でした。(強引な展開)