XC8 フリー版で60日前後の比較

インストールして60日以上経過したので、現在、プロ版からフリー版に戻っています。ある小規模なプログラムでどれぐらいオプティマイズの効果がでていたのか、比べてみましたが、全然変わりませんでした。

●60日経過前と後で同一ソースのコンパイルで比較

処理内容とか記述方法にもよるので、一概には言えませんが、60日よりずっと前にコンパイルしたものと、同じソースで今日コンパイルしたもののログを比較したところ、オプティマイズの構文がなくなっている以外はほとんど変わりませんでした。メモリの使用量も全く同じ。生成されたヘキサファイルも全く同じでした。

このプログラムは400ステップぐらいの小さいもので、ビット演算とか、変数、レジスタ操作、if文、switch文などの条件判定処理がほとんどで、フロート演算など高負荷な処理は入っていないので、そのあたりは効果は不明ですが、制御系のプログラムでは温度換算などの工学値変換のとき以外はフロート演算使うこともないので、私の用途ではほとんど問題ありません。

siitch-case文で多少違いがあるかとも思いましたが、関係ないみたいです。

日ごろから最適化を意識したコーディングを心がければ、フリーモードでもあまり気にせずに使えるということですね。こうやったら単純になるかな、という風に意識しながらコーディングしています。実際効果があるかどうかわかりませんが。

●たとえば、こんなことに気を付けています。

for文で繰り返し回数が少ない場合、回数を保持する変数にint型を使わずにunsigned char型 または signed char型を使うなど、日ごろから意識してプログラムしています。

int型を使うと、おそらく最適化されない場合は、2バイトの変数が取られて、16ビット演算で処理されますが、char型なら8ビット変数で8ビット演算で処理されるため、コードも処理も単純になります。アセンブラで作るとわかりますが、8ビットのCPUでの16ビットの演算は、CPUで直接演算できないので結構面倒なんですよね。

あと、論理値の変数はbool型(1ビット)を使うとか。これだと、CPUのビット演算で処理されるはずなので、処理が簡単になるはずです。メモリ(SFR)もダイレクトにビット演算できます。変数領域も単純に1バイト変数の1/8になりますので、変数が多いときは、効果が大きいです。

論理値にintなど使うと、最適化でbit型になると思いますが、最適化されない場合は、整数演算になってしまいます。

もうちょっと安かったら、せめて$200ぐらいだったらプロ版購入したいのですが、手が出ませんね。

コメントは受け付けていません。