SSブログ

"cgpic.exe"がクラッシュ [PICkit3]

(2012.01.29)
PIC10F322のプログラム・サイズが厳しくなってきて、殆どの関数をインライン・アセンブラで書き直しています。HITECH-Cが生成したコードの無駄を省くだけで何とかなりそうな見通しですが、デバッグは未だこれからなので、少しでも余裕を設けておく必要があります。

そこで、さらにインライン・アセンブラ化を進めたところ・・・

cgpic_exe.pngエラー・メッセージが表示された

初めて遭遇するエラー(というかリンカのバグ?)です。リビジョン管理などせずにコードをガシガシ書き換えたので、簡単には元に戻せません。エラー箇所を特定する常套手段(エラーが出なくなるまでプログラムをコメント・アウトする)で、不具合状況が明らかになりました。
<エラーを起こしたコード>
void serial_comm_main(void)
{
#asm
_s_comm_main1:
 movf (_sync_error),w
  |(省略)
_reset_command:
 fcall _nco_reset
 goto _s_comm_main44

<エラーにならないコード(nco_resetを呼び出す所だけCの関数コールにする)>
_reset_command:
#endasm
 nco_reset();
#asm
   goto _s_comm_main44

nco_resetは別のCソース・ファイルに定義された関数で、main.cでも呼び出し(nco_resetはglobal定義されている)ています。それをserial_comm.cの中から呼び出す部分をインライン・アセンブラにした結果、生じたエラーです。HITECH-Cはv9.83を使っています。

ちゃんと勉強しないで適当に作業を進めているので、HITEC-Cのリンカに適切な指示を出す方法が判りません。orz

コード・サイズには影響しないようなので、このまま作業を進めるつもりです。

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

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


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

nice! 0

コメント 0

コメントを書く

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

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

トラックバック 0

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