2018年6月3日日曜日

MPLAB X-IDE, XC8 への移行(4)

三年ぶりに、PICプログラムを作ることになった。C18で作成した過去のプログラムを流用するため、XC8へまず移植することにした。例によって大いに悩まされたので、その顛末。
  1. X-IDE, XC8を最新版にした(MPLABX-v4.15, xc8-v1.45)
  2. C18で作成したソースをXC8のプロジェクトへ単純に貼り付けてビルドするとエラーがたくさん出て、一気にやる気が失せる
  3. そこで、MPLAB X-IDE, XC8 への移行(3)にある通り少しずつ貼り付けながら、エラーを解決していく手法にした
  4. エラーのほとんどが、プログラム本体よりコンフィグレーションやペリフェラル部分のエラーだ
  5. ADCやTimerの設定がC18ではキーワードを使用して出来たが、これがエラーになるので、レジスタ毎に直接ビットパターンを指定する旧来の方法に戻した(データシートを参照せざるを得ないので手間はどちらも同じか)
  6. 結果的には、MPLAB X-IDE, XC8 への移行(3)にある通りの変更内容で、全て貼り付け終え、ビルド成功まで至った
【5の、XC8 V1.45になったことで】
前回の「MPLAB X-IDE, XC8 への移行(3)」の時のバージョンは XC8 V1.34 で、今回バージョンは大きな違いがあった(大きな違いがあるということが分かるまでが大変)。
  • ペリフェラルライブラリが削除された
    ペリフェラルライブラリを別途ダウンロードしインストールする必要がある
  • ペリフェラルライブラリと同じようなことをするには「MPLAB Code Configurator (MCC)」を使用せよとある・・・ただし対応する品番に制限有り
  • ビルドする際に、ペリフェラルライブラリを使う、という設定が必要
    プロジェクトプロパティの XC8 Linkerを選択し Runtime 設定の Link in Peripheral Library という項目にチェック
前回意識していなかった「MPLAB Code Configurator」(MCC)に寄り道してしまった。 PIC18F2321 を使うと決めていたので、それが使用できないと調べが付くまで時間をロスした。

【前回未解決の問題】
これを整理中に、前回の「MPLAB X-IDE, XC8 への移行(3)」の時点で、EEPROMの記事が未完のまま、未解決で残っている事に気づいた。今回のビルドでもEEPROM読み書きは、使う予定が無かったため最初にコメントアウトしたままだった。

【延長戦】
EEPROMの問題とビルド成功後も残っていたワーニングを調べてゼロにした。
  • warning: (373) implicit signed to unsigned conversion
    定数の加算やビット演算等にも出る
    (unsigned)を該当個所に追加して対処したが途中でうっとうしくなり、
    XC8 Project Properties にある、XC8 Compiler のワーニングレベルを、初期値 -3 を -2 にしたら消えた
  • 1/0 に書き換えた true/false の定数は #include <stdbool.h> で解決
  • warning 967 unused function は、未使用関数をコメントアウトすればいい
  • 最後に、warning level -2 にしても消えていないワーニング
    warning: (356) implicit conversion of float to integer が残った
    よく考えてみると、ここはバグっていることが分かった
  • EEPROMの読み書きは、ネットで見つかった方法、「関数を新たに作る」を使うことにした