SDCC 3.6.3 と gputils 1.5.0 を使用してビルドしている PIC の C プロジェクトがあります。どちらもソースからビルドしました。
プロジェクトをリンクすると、gplink から次のエラー メッセージが表示されます。
warning: Processor mismatch in "streams.o".
warning: Processor mismatch in "mullong.o".
warning: Processor mismatch in "divulong.o".
warning: Processor mismatch in "gptrput1.o".
warning: Processor mismatch in "divuint.o".
warning: Processor mismatch in "gptrget1.o".
warning: Processor mismatch in "eeprom16_gptrget1_dispatch.o".
warning: Processor mismatch in "eeprom16_gptrput1_dispatch.o".
warning: Processor mismatch in "eeprom16_gptrput1.o".
warning: Processor mismatch in "eeprom16_gptrget1.o".
warning: Processor mismatch in "eeprom16_write.o".
これらの警告を無効にする特定のフラグ ( -w ) がありますが、プロジェクトのビルド時に警告が表示されるのは好きではありません。いくつかの検索により、この問題に対処する 2007 年からの短い会話につながりました。SDCC に含まれるライブラリは、デフォルトで PIC 18f452 用にビルドされます。私のプロジェクトでは 18f26k22 を使用しているため、これらの警告が表示されます。
上記の会話には、別のターゲット用に pic16 ライブラリを再構築する方法に関する指示が含まれていました。それらは時代遅れでしたが、構成スクリプトを読んで理解しました。次の手順に従って、ライブラリを再コンパイルしました。
ファイルを変更します
device/lib/pic16/configure
。上記のリンクで説明されているように、シェルで ARCH 環境変数を指定することもできることに注意してください。(ARCH=18f26k22 make
)# The default architecture can be selected at configure time by setting the # environment variable ARCH to the desired device (18fxxx). ARCH=${ARCH:-18f452}
- 変更した構成ファイルを実行します。
./configure
make clean
make
- 1 レベル上の lib ディレクトリに移動します。
cd ..
- 古いビルドが存在する場合は削除します。
rm -rf build/pic16
make
不自由なコードを使用する場合は、これを繰り返す必要があるかもしれません。に住んでいdevice/non-free/lib/pic16
ます。
ビルドしたら、gplink パラメーターを変更して、-I フラグがビルドしたばかりのライブラリを含むビルド ディレクトリを指すようにします。元:-I/home/username/sdcc/device/lib/build/pic16 -I/home/username/sdcc/device/non-free/lib/build/pic16
残念ながら、gplink は最初に見つけたライブラリを使用します。これは、使用するすべての pic のライブラリを構築して、それらをすべて異なるパスに保持し、それぞれに -I パスを設定することはできないことを意味します。gplink は、プロセッサの不一致エラーを生成しない他の -I パスに他のバージョンがある場合でも、最初のものを選択してそれを使用します。
さらに、make install
特定のチップ用にビルドされたライブラリを /usr/local/sdcc にコピーするために実行しても、複数のチップ用に開発している場合は役に立ちません。
私のプロジェクトが必要とするすべてのカスタムビルドのコピーを含めるか、-w フラグを使用する以外に、これを処理するよりクリーンな方法はありますか?