まだ昨日から使い始めたばかりですが、今後使うことが増えそうなので、気が付いたことの覚書。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上にスタックを持てます。