スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/--(--) | スポンサー広告 | トラックバック(-) | コメント(-)

コード削減:標準関数も自作

標準関数は標準化のため,使い所によっては冗長なんだろうなぁ
とは思っていたのですが。

今回は試しに代わりの関数を用意したら巧く行った,という例です。
限定条件下で使えるitoa()を自作してみました。

使いたかったのはPWMのデューティ比をキャラクタ液晶に表示するための処理で
unsigned charの3桁数値をunsigned char[]の配列に直すという処理です。

自作したら47word削減できました。
環境はXC8  (v1.01)  FreeMode  (Pic12F1822)です。

以下,サンプルコード
read more...
スポンサーサイト

2012/07/26(木) | コード削減 | トラックバック(0) | コメント(0)

コード削減:使わないヘッダはインクルードしない

全く使っていないのに,インクルードしているヘッダが有ると
ROM食べちゃうようです。


試しにサンプルコード作ってXC8  (v1.01)  FreeMode  (Pic12F1822)で試したところ,
全く使っていない <stdio.h>をインクルードすると2word減ってました。

ただし,標準でサンプルプロジェクトのテンプレに入っている
<stdint.h> <stdbool.h>を削ってもビルドしたサイズは減りませんでした。

2012/07/26(木) | コード削減 | トラックバック(0) | コメント(0)

コード削減:使っていない変数は外す。

使ってないのに初期化して確保した変数が有るとメモリ食ってしまっています。
↓は極端な例ですが,デバッグ用の#ifdefの中でしか使わないような配列や
  コメントアウトしている中でしか使っていない変数は無駄な消費している,という事になります。

  意外とあるもんです。

以下,XC8  (v1.01)  FreeMode  (Pic12F1822)での例です。
main() {
    unsigned char i;                                    //これはROM食べてない
    unsigned char notUsed[10];               //これもROM食べてない
    unsigned char notUsedChar  =  'n';  //初期化してたらNG 4word分消費。

    NOP();

}

2012/07/26(木) | コード削減 | トラックバック(0) | コメント(0)

コード削減:型は小さいものを

当たり前ですが,間に合うのならサイズの小さい型を使う。

下記サンプル。
255以下でforしているだけなので,intやめてunsigned charにすると
XC8 (v1.01) FreeMode だと9word削減できました。

見直して行くと,こういうポカをやっているもんです。

main() {
    //unsigned char i;
    int i;

    for (i=0;i<128;i++)
    {
        NOP();
    }
}

2012/07/26(木) | コード削減 | トラックバック(0) | コメント(0)

PIC プログラムサイズの削減方法

例えば,XC8のFreeモード利用時,
コードは合っているはずなのにコンパイルエラーが出る事が有ります。

:0: error: can't find 0x3 words (0x3 withtotal) for psect "idataBANK0" in class "CODE" (largest unused contiguous range 0x0)

プログラムサイズオーバーしたときのエラー
これ,デバイスに対してコードが大きすぎる可能性が高いです。


こんなときの方法は基本的に3つ
 1.適切な最適化をする,コンパイラ上位バージョンの購入を考える。
 2.もっとコードがいっぱい入るデバイスに切り替える。
 3.ちびちびと手で最適化する。
です。

ただ,趣味でやるには
コンパイラは高いですし(最適化半分くらいのStandardでも495$もする・・・。)
デバイス切り替えは最後の手段です。
となると,ちびちびコードを手直しするしかない訳で・・・。

で,思いつく限りリストアップすると手段はこんな感じです。
read more...

2012/07/22(日) | コード削減 | トラックバック(0) | コメント(0)

 |  HOME  | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。