PICのCコンパイラMPLAB XC8バージョンアップ

PICマイコンの開発には不可欠のCコンパイラMPLAB XC8が久々のバージョンアップを行った。今回のバージョンアップは普通の人にとってみればただのバージョンアップかもしれないが、必要な人にとっては結構重要なバージョンアップかもしれない。というのも・・・

最適化機構の一部がフリー版でも使えるようになった!!

ことである。今回のリリースノートには他の項目に混じって埋もれてしまいそうだったが、目ざとく見つけてしまった。次がその1節・・・

New Free mode optimizations The assembler’s jump-to-jump optimizations, which previously was only available with a licensed compiler operating mode, is now available in Free mode. By default, this optimization is disabled, but it can be enabled from the –OPT option or the Optimization category in MPLAB X IDE in the usual way. If enabled, this optimization reduced the size of code output by the compiler.

(XC8 V1.20リリースノートより抜粋)

ふむふむ、フリー版でもアセンブラ段階でのジャンプの最適がされるようになるんだって。デフォルトじゃ無効になってるから有効にして使ってねってか。ということでどれくらい有効かやってみることにした。

用意するソースコードは、実際に学生実験で提供しているPIC16F690とドットマトリクスLEDを使用したゲームプログラムで、XC8 V1.12では4kwのメモリではメモリが足らず機能削減を余儀なくされているものの機能削減前のもの。ちなみに、上位互換のPIC16F1829では、F1独自命令がC言語に有利に働くのか次のように4kwにぎりぎり収まる。

Microchip MPLAB XC8 C Compiler V1.12
Copyright (C) 2012 Microchip Technology Inc.
License type: Node Configuration

Warning [1273] ; . Omniscient Code Generation not available in Free mode

Memory Summary:
    Program space        used   FC0h (  4032) of  2000h words   ( 49.2%)
    Data space           used    91h (   145) of   400h bytes   ( 14.2%)
    EEPROM space         used     8h (     8) of   100h bytes   (  3.1%)
    Configuration bits   used     2h (     2) of     2h words   (100.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)

さて、ここからが本番で、実際にXC8 V1.20、F690でコンパイルしてみるが、まずはコンパイラの設定を確認する。

MPLABOPT

プロジェクトの設定のコンパイラタブの最適化のところのアセンブラにチェックを入れる。もしも、最初からチェックが入っていても無視されることがあるみたいな(実際にあった)ので、一度外してから再度チェック入れ直すことをお勧めする。

んでもってビルドしてみると。。。

Executing: “C:\Program Files (x86)\Microchip\xc8\v1.20\bin\xc8.exe” –pass1 D:\User\hardware\kyozai13\pmgame\pmgame.c -q –chip=16F690 -P –runtime=default –opt=default,+asm,-debug,-speed,+space,9 –warn=0 -N255 -D__DEBUG=1 –addrqual=ignore -g –asmlist “–errformat=Error   [%n] %f; %l.%c %s” “–msgformat=Advisory[%n] %s” “–warnformat=Warning [%n] %f; %l.%c %s”

コンパイル状況が表示されるが、赤字で書かれているところが重要なところで、特に–optの+asmがちゃんとプラスになっていることが肝心!で、結果は以下の通り、

Microchip MPLAB XC8 C Compiler V1.20
Copyright (C) 2013 Microchip Technology Inc.
License type: Node Configuration

Warning [1273] ; . Omniscient Code Generation not available in Free mode

Memory Summary:
    Program space        used   F5Bh (  3931) of  1000h words   ( 96.0%)
    Data space           used    6Eh (   110) of   100h bytes   ( 43.0%)
    EEPROM space         used     8h (     8) of   100h bytes   (  3.1%)
    Configuration bits   used     1h (     1) of     1h word    (100.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)

ちゃんと4kwのメモリに収まっている。ラッキー!些細な違いかもしれないが、コンパイルできるかできないかは大きい。

ちなみに、どれくらいの効果があるのかをPIC16F1829でビルドしたものを次に示しておく。上が最適化有効で、下が無効にしたもの。

・最適化有効

Microchip MPLAB XC8 C Compiler V1.20
Copyright (C) 2013 Microchip Technology Inc.
License type: Node Configuration

Warning [1273] ; . Omniscient Code Generation not available in Free mode

Memory Summary:
    Program space        used   E4Dh (  3661) of  2000h words   ( 44.7%)
    Data space           used    91h (   145) of   400h bytes   ( 14.2%)
    EEPROM space         used     8h (     8) of   100h bytes   (  3.1%)
    Configuration bits   used     2h (     2) of     2h words   (100.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)

・最適化無効

Microchip MPLAB XC8 C Compiler V1.20
Copyright (C) 2013 Microchip Technology Inc.
License type: Node Configuration

Warning [1273] ; . Omniscient Code Generation not available in Free mode

Memory Summary:
    Program space        used   FB9h (  4025) of  2000h words   ( 49.1%)
    Data space           used    91h (   145) of   400h bytes   ( 14.2%)
    EEPROM space         used     8h (     8) of   100h bytes   (  3.1%)
    Configuration bits   used     2h (     2) of     2h words   (100.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)

約5%程度のメモリ節約ができたことになる。

  1. トラックバックはまだありません。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。