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\以下のコードをインライン・アセンブラで組み込んだ自前のライブラリを用意すれば済むことなんですが、なんか癪に障る話です。
以下の関数を定義して、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\以下のコードをインライン・アセンブラで組み込んだ自前のライブラリを用意すれば済むことなんですが、なんか癪に障る話です。
|
|
|
コメント 0