PICで割り算

MPLABなどCで組む場合は気にした方がよいTIPS。

CDS等のアナログ入力で複数の値から平均値を算出する時に除算を使いますよね、その時に単純に「/」を使ってしまうと除算ライブラリが組み込まれコードが増え処理速度にも影響が。

avg = total / count;

集計する母数が決められている場合は仕方がないが、漠然と10回の平均とかなら2のべき乗を母数にしてシフトを利用すればライブラリを読み込まずに済みコードもコンパクトですむ。

例えば10回の平均値を求めるときは、母数を8もしくは16にしてシフトで処理をおこなう。

avg = total >> 3;  // 母数 8
avg = total >> 4;  // 母数 16

など。

これでコンパイル後のコードサイズは、シフトは15byteで対して割り算ライブラリを使用して108byteとなる。

void main(void) {
    unsigned char avg,total;

    avg = total / 8;
    avg = total >> 3;
}

追記 2016/1/21

仮想PCに再インストールするはめになっちゃって、ついでに60日間おためしプロバージョンでコンパイルしたけれど、8で割ってもシフトに最適化されなかった模様。

タイトルとURLをコピーしました