フリーのCコンパイラSDCCをインストールし、ワンチップマイコンであるPICマイコンの開発環境を整えます。
マイクロコンピュータのプログラム開発をしようという人はアセンブラも怖くないでしょうが、 Cなどの高級言語はif〜thenの制御構造など、アセンブラよりも読みやすく保守性に優れています。
PIC用のアセンブラはメーカーから無料で供給されています。 しかしなぜかCコンパイラは有料です。 期間限定の試用版は無料だったり、他社製のもので機能限定の無料版というのもあります。 各社のCコンパイラにはPICマイコンを使うため独自の組み込み関数がたくさん用意されており、 これらを使うとプログラム開発は楽チンです。
しかし、独自関数を使うことによって互換性が無くなります。 書籍で紹介されているものにはいずれかの商用のCコンパイラを使っているものが多いので、 それらのサンプルプログラムを別のコンパイラ用に移植するのは多少面倒であることは覚悟しなければなりません。 けっきょくその特定のCコンパイラを使い続けなければならなくなったりします。
いっぽう、オープンソースの無料ソフト(GPL)もあります。 Small Device C Compiler (SDCC)というものがそれです。 SDCCは、もともと8051系のマイコンをターゲットとしていましたが、 最近のものはPICにも十分対応しています。 便利な独自関数というものはほとんどありませんが、ひととおりのことはSDCCでも間に合います。
コンパイラであるSDCCの他にアセンブラとリンカが必要です。 これらは GPUTILSとして配布されています。
出来上がったプログラムをマイコンに書き込むためのライターが必要です。 GPUTILSは標準的なフォーマットである Intel HEXフォーマットを出力するので、 たいていのものが適合します。 Linuxで使えるものは秋月電子のAKI-PICプログラマーをコントロールする akipic がありますが、AKI-PICプログラマーversion3への対応なので、最近のPIC製品には対応していません。 akipicが対応するPICには18ピン定番の PIC16F84Aなどがあります。 (フラッシュメモリ版PICでは 16F627, 16F628, 16F83, 16F84, 16F84A, 16F873, 16F874, 16F876, 16F877 が使えます。)
akipicで対応できないPICの場合、対応する書き込み器を用意しなければなりませんが、 書き込みソフトは Windowsでないと走らないというものが多いようです。 Linux上でHEXファイルまで作って最後は Windowsで書き込むか、 あるいは SDCC, GPUTILSともに Windows版も配布されているので、 すべてをWindows上で行うという選択肢もあります。
$ rpmbuild --rebuild gputils-*.nosrc.rpm/home/tako/rpm/RPMS/i386 などのディレクトリ(「書き込み中:」の後に表示される)にバイナリパッケージが出来上がります。 root になってインストールして下さい。 ディレクトリの部分は状況により異ります。
$ su (rootのパスワード入力) # rpm -Uvh /home/tako/rpm/RPMS/i386/gputils-*.i386.rpm
sdccは開発途上なので、バージョンにより仕様も変更される可能性があります。
新しいバージョンを試用するときは、古い rpmパッケージを保存しておき、
必要なときに戻せるようにしておくとよいでしょう。
古いパッケージに戻すときは、--oldpackage オプションを付けます。
# rpm -Uvh --oldpackage 古いrpmパッケージのファイル名
ここにあるMakefileをダウンロードします。 deviceは使用するPICの型名に合わせます。 nameもソースのファイル名と合わせておくとよいでしょう。
ソース(sample.c)と上記Makefileを同じディレクトリに置き、 そのディレクトリに入って次のコマンドでコンパイル、アセンブル、リンクが進み(エラーが無ければ)HEXファイルができます。 nkfで改行コードを Windowsのものに合わせていますので、このHEXファイルをWindowsに送って書き込みに使うこともできます。
$ make sample.hex
Cでのプログラムの書き方はサンプル・プログラムの解説 をご覧ください。
akipicはデフォルトで /dev/akipicにアクセスします。 AKI-PICプログラマーがシリアルポート /dev/ttyS0に接続されているとき、 次のように(root権限で)シンボリックリンクを作っておくと便利です。
# ln -s /dev/ttyS0 /dev/akipic
デバイスファイルのパーミッションの問題で、非rootユーザーからはアクセスできない場合がありあす。 (/dev/akipicではなく)/dev/ttyS0のオーナーを使用するユーザーのものに変更しなければなりません。 Vine Linux 4.1では次の内容のファイルを /etc/security/console.perms.d/60-serial.perms として置いておきます。 そうしておいていったんログアウト、ふたたびログインすると、/dev/tty*のディバイスファイルは 現在のユーザーのものとなります。
# device classes -- these are shell-style globs <serial>=/dev/ttyS* /dev/modem* # permission definitions <console> 0660 <serial> 0660 root.tty
コマンドラインから
$ akipic -h
で使用法が表示されます。
PIC16F84AにHEXファイルsample.hexを書き込むには次のように入力します。
$ akipic -e $ akipic -d 16f84a -w sample.hex
ご意見、お問い合わせは Linux掲示板 へ