PV用DCDCコンバータ開発(30) XC8コンパイラ向け最適化ノウハウ

メモリ効率向上を目指して、ちまちまと同じロジックを異なる文法で記述し、メモリ使用量を比較中。

その結果、PICのXC8コンパイラの色々な特性が見えてきた。

無償版は、メモリ効率最適化機能が使えないため、ソースコードによる最適化を自ら考えなければならないので、このノウハウは、意外と貴重。
夕べ、バージョンアップしたロジックの改善策が明け方はたと思いついて、早朝からさっそく検証。その結果、大幅なメモリ圧縮に成功。

それが以下の通り。
unsigned char* utoa_padding(unsigned short int num){
static unsigned char buf[5]={‘ ‘,’ ‘,’ ‘,’ ‘,0};
unsigned char a;
signed char i=3;
while(i){
a=num&0x000F;
if(a>9) buf[i]=a+CHAR_A;
else if(i==3) buf[i]=a+CHAR_0;
else if(a>0) buf[i]=a+CHAR_0;
num=num>>4;
i–;
}
return buf;

さらに、その過程でこんなことも発見。while文で
while(hoge–){
・・・・
}
よりも、
while(hoge){
・・・・
hoge–;
}
の方がメモリ使用は少ない。コード的には、上の方がスマートなんだけどね。
こういうチューニングを試し始めて、メモリ消費量が 97.9% から 87.4% まで削減に成功。10%の削減は大きい。

もう少し、チューニングを続けてみよう。

前回へ  次回へ

(Visited 329 times, 1 visits today)
スポンサーリンク

シェアする

フォローする