浮動小数点計算いらないかも - kobayashi
2017/01/04 (Wed) 20:20:46
浮動小数点はいらないかもです。
FS = DPLL × XTAL(100MHzなど)/(2^32)
これは先に計算できますよね。
XTAL(100MHzなど)/(2^32)
10^8Hz / (2^32) = 0.023283064
FS = DPLL × 0.023283064 となります。
0.023283064は整数型だと0になるので逆数にして
42.94967296 となります。
FS = DPLL / 42.94967296 となります。
FS ≒ DPLL / 43 です。
自分の勘違いがあるかもしれないので皆さん検討お願いします。
Re: 浮動小数点計算いらないかも - d
2017/01/05 (Thu) 04:48:31
浮動小数点、あってもいいんですが、そんなにコード増えますか?
割り算はコストがでかいので、掛け算のみにして(2^32を割るだけなので逆数をとるようにする)
float mul(float a, float b){
return a * b;
}
int trunc(float a){
return (int) a;
}
DPLL がlong型なので
float to_float(long a){
return a;
}
もあってもいいかもしれません。
調べたのがXC8しかないのですが、
600ワード程度しか増えませんでした。
あとは計算をいくら追加しても、関数呼び出しなので
ワード数の増加はわずかだと思います。
Re: 浮動小数点計算いらないかも - ヒロ
2017/01/06 (Fri) 02:40:50
もちろん割り算は使わず、掛け算のみでやっています。あと、整数に丸めると誤差が大きくなりすぎると思います。long変数(32Bit)を用いてケタを調整しながら演算する手もありますが、かなり面倒ですので・・・。
ちなみに現状83%の使用率ですが、浮動小数点を含むサブルーチン(メニュー項目1つ)をすべてコメントアウトアウトすると67%になりました。16%減ったわけで、16kBのPICですから約2kBの消費です。浮動少数点演算だけでなくprintf関数にも浮動小数点表示をさせていますから、ROM容量を喰うのかな、と思います。もっともサブルーチン全体をコメントアウトしているので、1~2%は余分に減っていると思いますが、いづれにしても浮動小数点を加えると一気にメモリーを消費するようです。CCSのコンパイラの特性かもしれません。
Re: 浮動小数点計算いらないかも - d
2017/01/07 (Sat) 11:58:14
どうもそのようですね。
コンパイラがあまりコードサイズのことは考えられてないのかもしれません。
PIC18Kシリーズへの移植、おつかれさまです。
これで、もしプログラムエリアが足りなくなっても
PIC18F27K40(128kB,64kWord)のPICが使えますね。