SSブログ

PIC18のlong演算 [PICkit3]

先日のブログで”long intを使った計算を外しても殆どプログラム・サイズが減らない”と記しました。”もしかして、longの計算が標準で組み込まれている?”なんて怪しげなことまで書いてしまいましたが、後学のため事の真偽を確かめてみることにしました。

以下の関数を定義して、TEST_PROGの定義/未定義でプログラムがどのように変化するのか調べました。

long calc( long v1, long v2, long v3)
{
#ifdef TEST_PROG
return (v1*v2)/v3;
#else
return 0;
#endif
}

その結果、以下のmathライブラリ(144ワード)がTEST_PROGを定義したときに組み込まれることが判りました。

374-3E3 C:\MCC18\src\traditional\math\fxm3232.c
3E4-44B C:\MCC18\src\traditional\math\fxd3232s.asm
44C-493 C:\MCC18\src\traditional\math\fxd3232u.c

なので、”longの計算が標準で組み込まれている”なんてことはありませんでした。
多謝! <(_ _)>

ついでに、ライブラリの中を眺めていて気になることを見つけました。PIC18系のデバイスにはハードウェア乗算器が搭載されていて、こんなプログラムで8×8の乗算が出来る筈なのですが、mathライブラリでMULWF命令を使用している形跡が有りません。

========================================
8 x 8 UNSIGNED MULTIPLY ROUTINE

MOVF ARG1, W ;
MULWF ARG2 ; ARG1 * ARG2 -> PRODH:PRODL
========================================

さらに調べてみると、”C:\MCC18\src\extended\math\”以下のディレクトリにMULWF命令を使った算術ライブラリが用意されていました。しかし、Cコンパイラのユーザーズ・ガイドを調べても、こちら(extendedディレクトリ)のライブラリを利用する方法が見つかりません。

使いたければ”500ドル払え(有償版のコンパイラを購入しろ)”と言う事なんでしょうか?
まぁ、extended\math\以下のコードをインライン・アセンブラで組み込んだ自前のライブラリを用意すれば済むことなんですが、なんか癪に障る話です。

にほんブログ村 IT技術ブログへ
に

ほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。