You are here

MPLAB C Compiler for PIC18 MCUs

MPLAB C Compiler for PIC18 MCUsの概要

MPLAB C Compiler for PIC18 MCUsはMicrochip社が提供している純正のCコンパイラで、MPLAB IDEに組み込んで利用します。基本的には有償の商品なのですが、大変ありがたいことに、性能面で少し制限されたものが評価版(Evaluation Version:少し前まではStudent Editionと呼ばれています)として無償で利用できるようになっています。

制限といっても機能的には製品版と同じで、コードの最適化処理に関して、高度なものが機能しないようになっているだけです。基本的な最適化処理は機能するため、ホビーレベルでは性能面でもコードサイズ面でも十分なコードが得られます。
問題があるとすれば、USBフレームワークに含まれる標準的なブートローダーを作成できないということでしょう。高度な最適化機能が利用できなくなると、微妙なコードサイズの増加で、コンパイルされたブートローダーが、ブートコードエリアに入りきらなくなる様です。

コード効率上の配慮

MPLAB C18のコード生成器の面白い特徴としては、標準設定ではcharなどのデータ型をint(C18では16ビット)に格上げ(promotion)せずに処理するコードを生成することでしょう。本来のCの言語仕様では、intよりビット数の少ないデータ型はint型に幅を広げて(格上げして)演算することが求められています。

PIC16Fに比較してPIC18Fはキャリー付きの演算ができるように改良されたためかなり改善されましたが、それでもintなどの複数バイトデータの演算が求められると、急激にコードサイズがふくれあがるという問題があります。MPLAB C18ではこのような問題に対処するために、C言語の仕様をあえて無視してcharなどのデータを格上げなしに演算できるようにしています。8ビットプロセッサ用のCコンパイラではよくあるオプションで、制限のあるリソースを最大限に活用するための現実的な対処法といえるでしょう。

ただし、intにキャストしていないchar同士の演算結果をintに代入したり、charのデータをintサイズを仮定して左シフトを行うなどの処理を行った場合、charサイズの桁溢れで期待通りの結果にならず、また、問題点を見つけにくいので注意が必要です。

なお、問題を防ぐということで、必要であればプロジェクトのビルドオプションのC18のGeneral部分で格上げを有効にし、C言語の仕様にそってコンパイルするように設定することもできるようになっています。

MPLAB C Compiler for PIC18 MCUs(Evaluation Version)は以下のページからダウンロードできます。

ダウンロードする際には、メイルアドレスや名前などを登録する必要があります。

ライブラリ

Cなどの言語処理系はコンパイラだけでは不十分で、一緒に利用できるライブラリの善し悪しが、開発ツールとしての評価に強く影響します。

MPLAB C18には、stdio.hやshtdlib.hに代表されるC言語の標準ライブラリのうち、組み込み系システムで利用する可能性が高いものが提供されており、ライブラリも含めたC言語という意味では、特段の違和感なく利用することができます。

PIC18Fには、浮動小数点演算装置は実装されていませんが、単精度の浮動小数点演算を行うためのライブラリが提供されており、プログラムの中で整数演算だけでなく、必要に応じて浮動小数演算を行うことができるようになっています。浮動小数点演算は、IEEE754に準拠した標準的なものとなっており、三角関数や、指数、対数関数なども用意されており、便利に使うことができます。ただし、あくまでもソフトウェア的な実装で演算時間をそれなりに必要とするので、時間にシビアな処理では、浮動少数点計算をすることを控えるなどの配慮が必要です。

MPLAB C18のライブラリでPIC18Fを最大限に活用する上で必要で、また助かるのは、やはり周辺モジュールの操作ライブラリでしょう。タイマ、USART、AD変換などを始め、周辺モジュールをC言語で操作するための関数群がライブラリとして豊富に提供されており、周辺モジュールの活用を含めたPIC18F用の開発に申し分のない開発環境を提供するものとなっています。

MPLAB C18の周辺モジュールライブラリは大変魅力的なライブラリなのですが、あえてあその難点をいえば、PIC18Fの周辺モジュールをよくいえば細大漏らさず利用することを指向したライブラリとなっており、悪くいえば抽象度の低い関数群となっていることでしょう。このため、それらの関数群を利用するためには、引数の意味を含め、結局アセンブラでプログラミングするのと同様に、特殊機能レジスタ(SFR)の全機能を学習/確認する必要があり、ややもすれば、高級言語を利用する意味を見失いがちなことでしょう。

趣味やプロトタイピングなどで手軽にプログラミングしたいのに、MPLAB C18の周辺モジュールライブラリは少し腰が引けてしまうという方には、以下に示すPICSYSが朗報となります。

PICSYSフレームワーク

マイクロファンのキット製品のサポートソフトウェアとして、MPLAB C18で利用できるPICSYS18:Arduinoライクなライブラリ(フレームワーク)をご提供しています。PIC18Fファミリー用のPICSYS18は、2009年2月よりご提供を開始いたしました。PICSYS18のサポート対象となるマイクロファンのキット製品のご購入者は、無償でご利用いただくことができます。

PICSYSを利用すると、PICの周辺モジュールに詳しくなくても、文字LCD、7セグメントLED、ドットマトリックスLEDなどの表示装置やAD変換、RCサーボなどを活用するプログラムを驚くほど簡単に作成できるようになります。マイクロファンのキット製品と共にお楽しみください。

PICSYS18ボード

基本的にPIC18Fを搭載したマイクロファンのキットで、PICSYS18を利用することができますが、PICSYS18の利用を前提に開発されたPICSYS18ボードを紹介します。

PICSYS18-SP

PICSYS18-SP

PICSYS18-XBEE

PICSYS18-XBEE

開発ソフト: 
チップファミリー: