MPLAB(r) XC8 Compilers 覚書

まだ昨日から使い始めたばかりですが、今後使うことが増えそうなので、気が付いたことの覚書。WIZ-Cが16F1823などに対応していれば、XC8は使うことなかったのですが。

●FSRアクセス

ヘッダファイル “xc.h”をインクルードしておけば、FSRがアクセス可能です。ビット単位でもアクセスできます。たとえば、PORTAのRA2のビットは単純に、

RA2 = 1;        // ビットアクセス
RA2 = 0;        // ビットアクセス
PORTA = 0x12;   // バイトアクセス

のように記述できます。ORやANDのビット演算は不要です。これは便利。

最初、これに気が付かずに、いつものように、”PORTA |= (1<<RA2);”のように記述していたのですが、エラーにはならないものの、異様にコードが大きくなっていたので、おかしいと思っていたら、XC8のマニュアルの割込みのところに、このようなビット操作の例が載っていたので気が付きました。

ビットフィールドも定義されていて、それでもアクセスできますが、わざわざやらないですね。ただ、どのレジスタのビットかが一目でわからないので、メンテナンスのときはちょっと不便かも。

次は、他のコンパイラでも可能ですが、16ビットのレジスタも一度にアクセスできます。

TMR1H = 0x12;    // 上位8ビット
TMR1L = 0x34;    // 下位8ビット
TMR1 = 0x1234;   // 16ビット一括

●ポインタ

関数の引数にポインタを持たせたときに、文字列などを直接指定できません。これは、CCS-Cでも同様だったのですが、WIZ-Cでは可能(PIC以外のコンパイラならほどんど可能)なので不便です。たとえば”TxStr(*char)”という関数があったとします。

TxStr("123");             // (1)使えない

char strBuf[10];
sprintf(strBuf, "123");
TxStr(strBuf);            // (2)使える

直接文字列を記述せず、いったん、sprintfで配列に入れてからそれを引数にします。PICは、ROM上のデータはRAM上のデータとは同じようにアクセスできないので、しょうがないのでしょうが、このあたりは、WIZ-Cはうまくやっています。自動的にROMの文字列などの内容をRAM上に展開してそれをアクセスしているのかもしれませんが、(1)のようにもコーディングできます。

●論理データタイプ

データタイプに”bool”を使うときや論理値の”ture”、”false”を使う場合は、”stdbool.h”をインクルードします。

●ソースファイル分割

プロジェクトフォルダに複数のソースファイルを入れると、自動的にリンクされます。これはArduinoなどと同じです。共通関数などを別のファイルにまとめるときに便利です。

●MPLABのエディタ

いろいろなIDEを使うとき、いつも不満に思うのがエディタです。オートインデントが切れないとか、TABがスペースに置換されるとか。なので、結局、いつものように秀丸エディタを併用して編集しています。

MPLABのエディタも構文チェックとかやってくれるので便利なんですが、せめてTABをスペースに展開するのはやめてほしい。Options で “Expand Tabs to Space”のチェックボックスのチェックを外してもスペースに展開されますが、これ、何か意味が違うんでしょうか?

あと、秀丸エディタで保存すると、TABは残るのですが、その場合は8文字になってしまうし。

●C++だったらなぁ

XCシリーズはXC32でないと、C++はないみたいです。ArduinoなどはC++です。ライブラリ化する場合は、クラスにまとめられるので、C++が便利なんですが、XC8でもC++に対応してくれないかな。PICはメモリ容量の関係で難しいんでしょうね、スタックも通常の方法ではRAM上に持てないし。ちなみにWIZ-Cはオプションで、PICのハードウェアスタックを使わないでRAM上にスタックを持てます。

コメントは受け付けていません。