"cgpic.exe"がクラッシュ [PICkit3]
(2012.01.29)
PIC10F322のプログラム・サイズが厳しくなってきて、殆どの関数をインライン・アセンブラで書き直しています。HITECH-Cが生成したコードの無駄を省くだけで何とかなりそうな見通しですが、デバッグは未だこれからなので、少しでも余裕を設けておく必要があります。
そこで、さらにインライン・アセンブラ化を進めたところ・・・
エラー・メッセージが表示された
初めて遭遇するエラー(というかリンカのバグ?)です。リビジョン管理などせずにコードをガシガシ書き換えたので、簡単には元に戻せません。エラー箇所を特定する常套手段(エラーが出なくなるまでプログラムをコメント・アウトする)で、不具合状況が明らかになりました。
nco_resetは別のCソース・ファイルに定義された関数で、main.cでも呼び出し(nco_resetはglobal定義されている)ています。それをserial_comm.cの中から呼び出す部分をインライン・アセンブラにした結果、生じたエラーです。HITECH-Cはv9.83を使っています。
ちゃんと勉強しないで適当に作業を進めているので、HITEC-Cのリンカに適切な指示を出す方法が判りません。orz
コード・サイズには影響しないようなので、このまま作業を進めるつもりです。
PIC10F322のプログラム・サイズが厳しくなってきて、殆どの関数をインライン・アセンブラで書き直しています。HITECH-Cが生成したコードの無駄を省くだけで何とかなりそうな見通しですが、デバッグは未だこれからなので、少しでも余裕を設けておく必要があります。
そこで、さらにインライン・アセンブラ化を進めたところ・・・
エラー・メッセージが表示された
初めて遭遇するエラー(というかリンカのバグ?)です。リビジョン管理などせずにコードをガシガシ書き換えたので、簡単には元に戻せません。エラー箇所を特定する常套手段(エラーが出なくなるまでプログラムをコメント・アウトする)で、不具合状況が明らかになりました。
<エラーを起こしたコード> 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
コード・サイズには影響しないようなので、このまま作業を進めるつもりです。
|
|
|
コメント 0