So-net無料ブログ作成
検索選択

リンカが”マッピングできない”と言ってきた [電子工作]

(2012.08.19)
ちょろちょろと、温度コントローラ2の手直しを続けて残りメモリが150ワードを切りました。”いよいよ危なくなってきた”と覚悟を決めていたところ、僅か数ワードのコード追加でリンカ・エラーになりました。連続28ワードの小さな領域が確保できなくなったようです。

こういうときの特効薬が”変数の固定化”です。温度コントローラ2のファイルレジスタ(変数領域)はタップリ残っているので、内部変数を外部変数に置き換えたり、ポインタ引数で参照する部分を固定変数に置き換えるだけで、プログラム・サイズが小さくなります。

例えばこれ(補間計算ライブラリ)を
float interpolate( struct interpolation_data *i_data)
{
  float calc1;
  float calc2;
  float calc3;
  float temp;

  calc1 = (i_data->ref_volt - i_data->volt0);
  calc1 *= i_data->temp1;
  calc2 = (i_data->volt1 - i_data->ref_volt);
  calc2 *= i_data->temp0;
  calc3 = i_data->volt1 - i_data->volt0;
  temp =(calc1+calc2)/calc3;
  i_data->result = temp;
  return temp;
}

こうするだけで
static float calc1;
static float calc2;
static float calc3;
static float temp;
void interpolate( void )
{
     calc1 = (meas_data.ref_volt - meas_data.volt0);
     calc1 *= meas_data.temp1;
     calc2 = (meas_data.volt1 - meas_data.ref_volt);
     calc2 *= meas_data.temp0;
     calc3 = meas_data.volt1 - meas_data.volt0;
     temp =(calc1+calc2)/calc3;
     meas_data.result = temp;
}

プログラム・サイズが230ワード減ります。

こういう技を駆使して、プログラム・メモリを捻出するのもPICプログラミングの楽しみでは有りますが、PICのインストラクション・セットにも問題(特にアドレッシング関連)が有るように思います。

にほんブログ村 IT技術ブログへ
に

ほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(2)  トラックバック(0) 

nice! 0

コメント 2

nobcha

こんばんは、いつもお世話になります。
現在林さんの新C言語入門をお勉強中です。PICとかPICのCコンパイラに関するテクノウをかじって読めばもっと理解が深まりそうなので、参考にさせていただきます。
C使うと簡単に数値計算ができ、センサーなど使う面白い展開を期待しています。でも簡単にメモリーがパンクするので、こういうテクノウが重要ですね。なるほど。

by nobcha (2012-08-19 22:38) 

broadbeans

こんにちは、nobchaさん!
”基本に立ち返って、自分の設計を見直す”nobchaさんの取り組み姿勢に感服いたしております。
私など、つまらない小技を繰り出しては、(ものの本に書かれている)望ましい姿からかけ離れていくプログラムを見て、嘆息する毎日です。
Microchip社がCコンパイラの最適機能を無償化する日が早く来て欲しいと願っています。

by broadbeans (2012-08-23 10:42) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。