Darkside(リンクエラー修正しました)

2018年6月24日(日) 20:54

難攻不落

 MCCが使えない。ならばとサンプルプログラムを流用しようにも、古過ぎて delay.h が動かずコンパイルできない。
 どちらから攻めても、難攻不落である。

 だが、以前 dsPIC を扱ったときにXC16もインストールしていて、実は古いバージョンのXC16もパソコンに入っていることに気付いた。マイクロチップ社はソフト開発が分かっているようで、旧バージョンをアンインストールしないと新しいバージョンをインストールできない、などという言語道断な仕様になっていない。
 複数バージョンが共存できる。

 さっそく、最新の1.34ではなく当時の1.21を選択する。念のため、プロジェクトを新しく作り直す。

 だが、早々に気付いたのだが、サンプルプログラムに含まれる lcd.h や lcd.c は使用されていない。というか、どこからも参照されていない。液晶ディスプレイの付いた評価用ボードのためのサンプルかと思っていたが、違うようだ。これらをプロジェクトに含めないと、コンパイルエラーは一気に減る。そして実は、XC16が1.34であるか1.21であるかというのは、無関係だった。
 1.21だろうと、エラーは出る。

 関数の返り値が void なのに、それを変数に代入している・・・とエラーが出るので、代入部分をコメントアウトする。

 1.21であっても、_Delay が無いというエラーは出る。そこで、FCY の定義部分の直後で libpic30.h をインクルードする。「そんなものは見つからない」と警告表示が出ているが、コンパイルではエラーにならないので無視して良い。libpic30.h 自体も、XC16のディレクトリに含まれている。

 しかし、サンプルコードがコレで、大丈夫なのだろうか?

 こうしてコンパイルは通ったが、リンクが通らない。
 undefined reference to '_Delay' というエラーが出る。これは、コンパイラーを1.21にしても出る。Delay.h をインクルードしても、出る。
 とにかくこのサンプルコードが動かないのは、すべて delay が絡んでいる。これは、マイクロ秒あるいはミリ秒の時間待ちを生成するマクロらしい。先日8ビットPICの利点として、命令の実行時間を厳密に測れる、というのを書いた。
 16ビットPICでは自力で時間待ちループを作るのが面倒になって来て、マクロが用意されている。しかし、それがコンパイルの邪魔をする。

written by higashino [ドリル戦車] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(リンクエラー修正しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4