shino's bar

お家で使うLinux tux

PICマイコン開発環境 (SDCCのインストール)

7 Sep 2008 sdcc-2.8.0 対応。
21 May 2007 PIC16F84Aによるリモコン電子ボリュームをアップしました。
12 May 2007 PIC12F683によるファンの速度制御をアップしました。
26 Apr 2007 PIC16F84Aを使ったLEDの点滅をアップしました。
(初出: 16 Apr 2007)

フリーのCコンパイラSDCCをインストールし、ワンチップマイコンであるPICマイコンの開発環境を整えます。

C言語で開発する

マイクロコンピュータのプログラム開発をしようという人はアセンブラも怖くないでしょうが、 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上で行うという選択肢もあります。

ソフトのインストール

  1. ソースのダウンロード
    以下をそれぞれダウンロードし、~/rpm/SOURCESディレクトリに置きます。
  2. Nosrc.RPMのダウンロード
    ここから、次のフsdァイルを適当なディレクトリにダウンロードしてください。
  3. リビルドとインストール

昔のバージョンはこちらに

使い方

ここにあるMakefileをダウンロードします。 deviceは使用するPICの型名に合わせます。 nameもソースのファイル名と合わせておくとよいでしょう。

ソース(sample.c)と上記Makefileを同じディレクトリに置き、 そのディレクトリに入って次のコマンドでコンパイル、アセンブル、リンクが進み(エラーが無ければ)HEXファイルができます。 nkfで改行コードを Windowsのものに合わせていますので、このHEXファイルをWindowsに送って書き込みに使うこともできます。

$ make sample.hex

Cでのプログラムの書き方はサンプル・プログラムの解説 をご覧ください。

akipicの設定と使い方

デバイスファイルの設定

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の使い方

コマンドラインから
$ akipic -h
で使用法が表示されます。 PIC16F84AにHEXファイルsample.hexを書き込むには次のように入力します。

$ akipic -e
$ akipic -d 16f84a -w sample.hex

関連ページ

ネット上の参考情報

ご意見、お問い合わせは Linux掲示板


shino's bar goto [シノバー店内案内] [お家で使うLinux]