XC8 C コンパイラへの移行ガイド -...

72
2014 Microchip Technology Inc. DS50002184A_JP 注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジ ナルの英語版をご参照願います。 MPLAB ® C18 コンパイラから XC8 C コンパイラへの移行ガイド

Transcript of XC8 C コンパイラへの移行ガイド -...

Page 1: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

2014 Microchip Technology Inc. DS50002184A_JP

注意 : この日本語版文書は参考資料としてご利用ください。 新情報は必ずオリジナルの英語版をご参照願います。

MPLAB® C18 コンパイラから

XC8 C コンパイラへの移行ガイド

Page 2: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

Microchip 社製デバイスのコード保護機能に関して以下の点にご注意ください。

• Microchip 社製品は、該当する Microchip 社データシートに記載の仕様を満たしています。

• Microchip 社では、通常の条件ならびに仕様に従って使用した場合、Microchip 社製品のセキュリティ レベルは、現在市場に

流通している同種製品の中でも も高度であると考えています。

• しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解では、こうした手法

は Microchip 社データシートにある動作仕様書以外の方法で Microchip 社製品を使用する事になります。このような行為は知

的所有権の侵害に該当する可能性が非常に高いと言えます。

• Microchip 社は、コードの保全性に懸念を抱いているお客様と連携し、対応策に取り組んでいきます。

• Microchip 社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コード保

護機能とは、Microchip 社が製品を「解読不能」として保証するものではありません。

コード保護機能は常に進歩しています。Microchip 社では、常に製品のコード保護機能の改善に取り組んでいます。Microchip 社の

コード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはその他の著作

物に不正なアクセスを受けた場合、デジタル ミレニアム著作権法の定めるところにより損害賠償訴訟を起こす権利があります。

本書に記載されているデバイス アプリケーション等に関する

情報は、ユーザの便宜のためにのみ提供されているものであ

り、更新によって無効とされる事があります。お客様のアプ

リケーションが仕様を満たす事を保証する責任は、お客様に

あります。Microchip 社は、明示的、暗黙的、書面、口頭、法

定のいずれであるかを問わず、本書に記載されている情報に

関して、状態、品質、性能、商品性、特定目的への適合性を

はじめとする、いかなる類の表明も保証も行いません。

Microchip 社は、本書の情報およびその使用に起因する一切の

責任を否認します。生命維持装置あるいは生命安全用途に

Microchip 社の製品を使用する事は全て購入者のリスクとし、

また購入者はこれによって発生したあらゆる損害、クレーム、

訴訟、費用に関して、Microchip 社は擁護され、免責され、損

害を受けない事に同意するものとします。暗黙的あるいは明

示的を問わず、Microchip 社が知的財産権を保有しているライ

センスは一切譲渡されません。

DS50002184A_JP - p.2

商標

Microchip 社の名称とロゴ、Microchipロゴ、dsPIC、FlashFlex、KEELOQ、KEELOQ ロゴ、MPLAB、PIC、PICmicro、PICSTART、PIC32 ロゴ、rfPIC、SST、SST ロゴ、SuperFlash、UNI/O は、米

国およびその他の国におけるMicrochip Technology Incorporatedの登録商標です。

FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、MTP、SEEVAL、Embedded Control Solutions Company は、

米国におけるMicrochip Technology Incorporatedの登録商標

です。

Silicon Storage Technology は、他の国における Microchip Technology Inc. の登録商標です。

Analog-for-the-Digital Age、Application Maestro、BodyCom、

chipKIT、chipKIT ロゴ、CodeGuard、dsPICDEM、dsPICDEM.net、dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、

FanSense、HI-TIDE、In-Circuit Serial Programming、ICSP、Mindi、MiWi、MPASM、MPF、MPLAB Certified ロゴ、MPLIB、MPLINK、mTouch、Omniscient Code Generation、PICC、

PICC-18、PICDEM、PICDEM.net、PICkit、PICtail、REAL ICE、rfLAB、Select Mode、SQl、Serial Quad I/O、Total Endurance、TSHARC、UniWinDriver、WiperLock、ZENA および Z-Scaleは、米国およびその他の Microchip Technology Incorporatedの商標です。

SQTP は、米国における Microchip Technology Incorporatedのサービスマークです。

GestIC および ULPP は、Microchip Technology Inc. の子会社

である Microchip Technology Germany II GmbH & Co. & KG 社

の他の国における登録商標です。

その他本書に記載されている商標は各社に帰属します。

© 2014, Microchip Technology Incorporated, All Rights Reserved.

ISBN: 978-1-63276-159-0

2014 Microchip Technology Inc.

Microchip 社では、Chandler および Tempe ( アリゾナ州 )、Gresham ( オレゴン州 ) の本部、設計部およびウェハー製造工場そしてカリフォルニア州とインドのデザインセンターが ISO/TS-16949:2009 認証を取得しています。Microchip 社の品質システム プロセスおよび手順は、PIC® MCU および dsPIC® DSC、KEELOQ® コード ホッピング デバイス、シリアル EEPROM、マイクロペリフェラル、不揮発性メモリ、アナログ製品に採用されています。さらに、開発システムの設計と製造に関する Microchip 社の品質システムは ISO 9001:2000 認証を取得しています。

Page 3: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18 コンパイラから

XC8 C コンパイラへの移行ガイド

目次

序章 .................................................................................................................................. 5

Chapter 1. 移行の概要

1.1 はじめに .................................................................................................... 91.2 C18 互換モードの使い方......................................................................... 111.3 MPLAB XC8 へのプロジェクト移行........................................................ 12

Chapter 2. コンパイラの起動

2.1 はじめに .................................................................................................. 152.2 コンパイラの一般的な使い方.................................................................. 152.3 ドライバのオプション............................................................................. 182.4 MPLINK オプション ................................................................................ 22

Chapter 3. 言語の機能

3.1 はじめに .................................................................................................. 233.2 動作モード............................................................................................... 243.3 メモリモデル ........................................................................................... 243.4 整数拡張 .................................................................................................. 243.5 デバイス固有の情報 ................................................................................ 253.6 データ型と限界値 .................................................................................... 273.7 サイズの制限 ........................................................................................... 283.8 ストレージクラス .................................................................................... 283.9 ストレージ修飾子 .................................................................................... 293.10 ポインタ ストレージ修飾子 .................................................................... 303.11 関数バリアント ....................................................................................... 313.12 構造体と共用体 ....................................................................................... 323.13 割り込み .................................................................................................. 323.14 オブジェクトの配置 ................................................................................ 343.15 関数の再入可能性と呼び出し規則........................................................... 363.16 実行時起動コード .................................................................................... 403.17 レジスタの使い方 .................................................................................... 413.18 前処理 ...................................................................................................... 423.19 C とアセンブリ........................................................................................ 443.20 リンク ...................................................................................................... 47

用語集 ............................................................................................................................ 49

各国の営業所とサービス................................................................................................ 72

2014 Microchip Technology Inc. DS50002184A_JP - p.3

Page 4: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18 コンパイラから XC8 C コンパイラへの移行

NOTES:

DS50002184A_JP - p.4 2014 Microchip Technology Inc.

Page 5: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18 コンパイラから

XC8 C コンパイラへの移行ガイド

序章

はじめに

本章では、MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイドを使い始める前に知っておくと便利な一般情報を説明します。下記の一般的事項について説明します。

• 本書の構成

• 本書の表記規則

• 推奨参考資料

• Microchip 社のウェブサイト

• 開発システムのお客様向け変更通知サービス

• カスタマサポート

• 改訂履歴

本書の構成

本書では C ソースコードを MPLAB C18 コンパイラから MPLAB XC8 C コンパイラ向けに移行する方法を説明します。以下に本ガイドの構成を示します。

• Chapter 1. 移行の概要

• Chapter 2. コンパイラの起動

• Chapter 3. 言語の機能

• 用語集

お客様へのご注意

全ての文書の内容は時間と共に古くなります。本書も例外ではありません。Microchip 社のツールとマニュアルは、お客様のニーズを満たすために常に改良を重ねており、実際のダイアログやツールの内容が本書の説明とは異なる場合があります。 新の文書は弊社ウェブサイト(www.microchip.com) をご覧ください。

文書は「DS」番号で識別します。この識別番号は、各ページのフッタのページ番号の前に記載しています。DS 番号の表記規則は「DSXXXXXA」で、「XXXXX」が文書番号、「A」が文書のリビジョンレベルを表しています。

開発ツールについての 新情報は、MPLAB® IDE のオンラインヘルプをご覧ください。[Help] メニューを選択して、次に [Topics] を選択すると、利用できるオンラインヘルプ ファイルのリストが表示されます。

2014 Microchip Technology Inc. DS50002184A_JP - p.5

Page 6: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

本書の表記規則

本書には下記の表記規則を適用します。

本書の表記規則

表記 意味 例

Arial、MS ゴシックフォント :

二重かぎカッコ 参考資料 『MPLAB® IDE ユーザガイド』

テキストの強調 ... は唯一のコンパイラです ...

角カッコ : [ ] ウィンドウ名 [Output] ウィンドウ

ダイアログ名 [Settings] ダイアログ

メニューの選択肢 [Enable Programmer] を選択

かぎカッコ : 「 」 ウィンドウまたはダイアログのフィールド名

「Save project before build」

右山カッコ (>) で区切った下線付き斜体テキスト

メニュー項目の選択 [File]>[Save]

角カッコで囲んだ太字のテキスト

ダイアログのボタン [OK] をクリックする

タブ [Power] タブをクリックする

N'Rnnnn Verilog 形式の数値 : N は総桁数、R は基数、n は各桁の値

4'b0010, 2'hF1

山カッコで囲まれたテキスト: < >

キーボードのキー <Enter>、<F1> を押す

Courier New フォント

標準書体の Courier New サンプル ソース コード #define START

ファイル名 autoexec.bat

ファイルパス c:\mcc18\h

キーワード _asm, _endasm, static

コマンドライン オプション -Opa+, -Opa-

ビット値 0, 1

定数 0xFF, 'A'

斜体の Courier New 変数の引数 file.o (fileは有効な任意のファイル名 )

角カッコ : [ ] オプションの引数 mcc18 [options] file [options]

中カッコとパイプ文字 : 文字 : { | }

引数のどれかを選択する場合(OR 選択 )

errorlevel {0|1}

... 繰り返されるテキスト var_name [, var_name...]

ユーザが定義するコード void main (void){ ...}

DS50002184A_JP - p.6 2014 Microchip Technology Inc.

Page 7: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

序章

推奨参考資料

本書では C ソースコードを MPLAB C18 コンパイラから MPLAB XC8 C コンパイラ向けに移行する方法を説明します。その他の便利な文書を、以下に一覧でご紹介します。以下に記載した Microchip 社の文書をお薦めします。

Readme ファイル

その他のツールの使用についての 新情報は、MPLAB IDE のインストール先ディレクトリのReadmesサブディレクトリにある各ツールのReadmeファイルを参照してください。Readme ファイルには、本移行ガイドに記載できなかった 新情報と既知の問題を記載しています。

『MPLAB X IDE ユーザガイド』(DS52027)

MPLAB X 統合開発環境 (IDE) の使い方を示すガイドです。

『MPLAB XC8 C Compiler User's Guide』(DS50002053)

MPLAB XC8 C コンパイラの使い方を示すガイドです。

Microchip 社のウェブサイト

Microchip 社は、ウェブサイト (www.microchip.com) でオンライン サポートを提供しています。このウェブサイトを通じて、お客様はファイルや情報を簡単に入手できます。一般的なインターネット ブラウザを使って下記の内容をご覧になれます。

• 製品サポート - データシートとエラッタ、アプリケーション ノートとサンプル プログラム、設計リソース、ユーザガイドとハードウェア サポート文書、 新のソフトウェアと過去のソフトウェア

• 一般的な技術サポート - よく寄せられる質問 (FAQ)、技術サポート リクエスト、オンライン ディスカッション グループ、Microchip 社コンサルタント プログラム メンバーの一覧

• ご注文とお問い合わせ - 製品セレクタと注文ガイド、 新プレスリリース、セミナー / イベントの一覧、お問い合わせ先 ( 営業所 / 販売代理店 / 代理店 ) の一覧

2014 Microchip Technology Inc. DS50002184A_JP - p.7

Page 8: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

開発システムのお客様向け変更通知サービス

Microchip 社のお客様向け通知サービスは、お客様が Microchip 社製品の 新情報を入手できるようにします。ご興味のある製品ファミリまたは開発ツールに関連する変更、更新、エラッタ情報をいち早くメールでお知らせします。

登録するには、Microchip 社のウェブサイト www.microchip.com にアクセスし、[Customer Change Notification] をクリックして登録手順に従ってください。

下記の開発システム製品カテゴリをお選び頂けます。

• コンパイラ - Microchip 社の C コンパイラやその他の言語ツールの 新情報です。MPLAB C18 および MPLAB C30 C コンパイラ、MPASM™ および MPLAB ASM30アセンブラ、MPLINK™ および MPLAB LINK30 オブジェクト リンカ、MPLIB™ および MPLAB LIB30 オブジェクト ライブラリアンが含まれます。

• エミュレータ - Microchip社のインサーキット エミュレータの 新情報です。MPLABICE 2000 と MPLAB ICE 4000 が含まれます。

• インサーキット デバッガ - Microchip 社のインサーキット デバッガ MPLAB ICD 2の 新情報です。

• MPLAB® IDE - Microchip 社の MPLAB IDE ( 開発システムツール向け Windows®

統合開発環境 ) の 新情報です。MPLAB IDE、MPLAB SIM シミュレータ、MPLABIDEプロジェクト マネージャ、一般的な編集 /デバッグ機能を中心とするリストです。

• プログラマ - Microchip 社のプログラマの 新情報です。MPLAB PM3 および PROMATE® II デバイス プログラマ、PICSTART® Plus および PICkit™ 1 開発プログラマが含まれます。

カスタマサポート

Microchip 社製品をお使いのお客様は、下記のチャンネルからサポートをご利用頂けます。

• 販売代理店

• 弊社営業所

• フィールド アプリケーション エンジニア (FAE)

• 技術サポート

サポートは販売代理店にお問い合わせください。弊社営業所にもご連絡頂けます。本書の末尾には各国営業所の一覧を記載しています。

技術サポートは下記のウェブサイトからもご利用頂けます : http://support.microchip.com

改訂履歴

リビジョン A (2013 年 7 月 )

本書の初版

DS50002184A_JP - p.8 2014 Microchip Technology Inc.

Page 9: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18 コンパイラから

XC8 C コンパイラへの移行ガイド

Chapter 1. 移行の概要

1.1 はじめに

本書は、MPLAB® C Compiler for PIC18 MCUs ( 以後 MPLAB C18) と MPLAB XC8 CCompiler の違いを説明し、MPLAB C18 向けに生成された C ソースコードとコンパイラ オプションを MPLAB XC8 向けに変更する方法を説明します。

本書は MPLAB XC8 コンパイラ向けにプロジェクトを移行する必要のある方、そしてMPLAB C18 の構文と使い方には慣れていて、MPLAB XC8 で新規プロジェクトを始める方にとって有益です。

本章では、以下の項目について概説します。

• C18 互換モードの使い方

• MPLAB XC8 へのプロジェクト移行

XC8 がリリースされる以前、Microchip 社が提供する PIC18 C コンパイラは MPLABC18 だけでした。このコンパイラは ANSI 準拠で、独立したアセンブラおよびリンカアプリケーションが付属していました。開発を迅速化するためのペリフェラル ライブラリも提供していました。MPLAB C18 コンパイラは開発終了済みであり、今後のリリースに大きな機能追加、改善は行いません。

MPLAB C18 を置き換えるのが MPLAB XC8 C コンパイラです。このコンパイラもANSI 準拠であり、独立したアセンブラとリンカが付属します。同じペリフェラル ライブラリも提供しています。

MPLAB C18 向けに作成した既存のプロジェクトと今後のコード開発には、いくつかの選択肢があります。

• 開発が終了した MPLAB C18 コンパイラを使い続ける

• C18 互換モードを使って MPLAB XC8 コンパイラでコンパイルする1

• プロジェクトとコードを MPLAB XC8 のネイティブ設定および構文に移行する

MPLAB C18 は開発終了済みのため、積極的な維持管理を必要としないプロジェクトにのみ使う事を推奨します。以前のビルド出力を厳密に複製する必要がある場合も、このコンパイラを使う事を推奨します。

MPLAB C18 コンパイラが使えず MPLAB XC8 ネイティブ構文にコードを移行する時間もない場合、MPLAB XC8 の互換モードが便利です。

Microchip 社は、可能な限り MPLAB XC8 構文へのコード移行を推奨します。こうする事で、プロジェクトに対する将来のサポートを確実にできます。

1. このモードの使用可否については、セクション 1.2「C18 互換モードの使い方」の Note を参照して

ください。

2014 Microchip Technology Inc. DS50002184A_JP - p.9

Page 10: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

本ガイドは特にコードの移行に的を絞り、MPLAB XC8 によるビルドに必要なソースコードとコンパイラ オプションの変更を説明します。各セクションには、コンパイラ間の一般的な相違点、必要となる可能性がある変更個所をまとめた移植ガイドライン、MPLAB XC8 コード開発のヒントを記載しています。

Note:1. 本書は、読者が MPLAB C18 の構文と機能に習熟している事を前提としています。本書は主に MPLAB XC8 で同等または も近い構文または機能の紹介を目的としていますが、これらの機能を全て説明するものではありません。このコンパイラが提供する全ての機能を知るには、MPLAB XC8user’s guide を確認する事が必要です。

2. MPLAB C18 コンパイラは関数を再入可能としてコンパイルできます。この機能は、MPLAB XC8 の将来のバージョンに導入される予定です。プロジェクトでこの機能が必要な場合、使っている MPLAB XC8 が再入をサポートするバージョンである事を確認してください。

3. MPLAB XC8 は、PIC18 デバイスだけでなくベースラインおよびミッドレンジ ファミリを含む全ての Microchip 社製 8 ビットデバイスに対応したコンパイラです。本ガイドでは PIC18 のプロジェクトのみを扱います。本ガイドで説明する機能は、他のデバイスには関連しない場合があります。

DS50002184A_JP - p.10 2014 Microchip Technology Inc.

Page 11: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

移行の概要

1.2 C18 互換モードの使い方

ネイティブのMPLAB XC8フォーマットへのコード移行を望まない場合、MPLAB XC8コンパイラを C18 互換モードで使えます。このモードでは、MPLAB C18 ソースコードが使っている非標準の拡張機能の多くを内部で変換します。この互換性は、擬似的な mcc18ドライバを使う事で MPLAB C18 のコンパイラ オプションにまで拡張されます。互換モードで動作している時の MPLAB XC8 は、MPLINK のリンカスクリプトを読み込めます。

Microchip 社は、MPLAB XC8 コンパイラを使ってコードを迅速にリビルドする場合、またはこのツールを実験的に使う場合に互換モードの使用を推奨します。また、MPLAB XC8 の言語と環境に習熟する目的で互換モードを使う事もできます。

互換モードは、以下の手順に従うだけで使えます。

• MPLAB IDE で既存の MPLAB C18 プロジェクトを開きます。1

• プロジェクト ツールスイートは変更せずに、そのまま MPLAB C18 ツールスイートを使います。

• MPLAB C18 ドライバ アプリケーションのパスを、MPLAB C18 でインストールされた mcc18.exeアプリケーションから、MPLAB XC8 コンパイラの binディレクトリ内にある同名の擬似アプリケーションに変更します。さらに、mplink.exeおよび mplib.exeアプリケーションへのパスも同様に変更します。(mpasmwin.exeアプリケーションでビルドされたコードはサポートしていません。)

• 通常の方法でコードをリビルドします。

プロジェクトのビルド時に、IDE は MPLAB C18 を使っているものと認識しますが、実際は MPLAB XC8 が提供する擬似アプリケーションを使っています。実行すると、これらのアプリケーションはプロジェクトで指定されている MPLAB C18 のオプションを MPLAB XC8 の等価オプションに書き換え、MPLAB XC8 コンパイラを実行し、コンパイラが互換モードで動作している事を確認します。

MPLAB C18 プロジェクトのビルドに MPLAB IDE ではなくバッチまたは make ファイルを使っている場合、MPLAB XC8 が提供する擬似アプリケーションを実行するように、これらのファイルを編集できます。

Note: 本書の執筆時点で C18 互換モードはベータ機能としてのみ提供しています。完全互換動作モードはコンパイラの今後のリリースに導入される予定です。今後のコンパイラのリリースノートを参照して、この機能の使用可否を確認してください。このモードのベータ実装では、全ての MPLABC18 機能を使える訳ではありません。

1. 執筆の時点で、C18 互換モードでのレガシー プロジェクトのコンパイルに使えるのは、MPLAB IDEバージョン 8 のみです。

Note: MPLAB C18 プロジェクトをコンパイルする場合、MPLAB XC8 コンパイラ (xc8) を明示的に実行しないでください。

C18 互換モードを指定するのに、手作業によるオプション設定は一切行わないでください。

MPLAB XC8 が提供する擬似アプリケーションのみを使い、これをコマンドライン、バッチまたは make ファイル、MPLAB IDE のいずれかを使って起動します。

2014 Microchip Technology Inc. DS50002184A_JP - p.11

Page 12: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

1.3 MPLAB XC8 へのプロジェクト移行

MPLAB C18 のコードをネイティブの MPLAB XC8 構文に移行すると、Microchip 社が提供する 新ツールとの互換性を維持できます。移行に要する工数は、コードの書き方および使っている MPLAB C18 の機能に大きく依存します。

1.3.1 ANSI 準拠のコード

ANSI 準拠のコードは 小限の工数で MPLAB XC8 に移行できます。

ANSI 規格には、コードに対して実装定義される動作を許容している側面がある事に注意が必要です。実装定義のコードの動作については、それぞれのコンパイラのユーザガイドに明確に記載されています。実装定義の動作を含むコードは想定外の動きになる可能性に注意する必要があります。

実装定義の動作が MPLAB C18 でコンパイルされたコードと MPLAB XC8 でコンパイルされたコード間で異なる状況では、以下の問題が存在します。

通常の char型

セクション 3.6「データ型と限界値」で詳述します。

整数除算の余りの符号

MPLAB XC8の場合は被除数の符号、MPLAB C18の場合は商の符号と同じです。

負の符号付き値の右シフトでの符号拡張

MPLAB XC8 を使う場合、符号拡張が発生しますが、MPLAB C18 を使う場合は発生しません。

浮動小数点の値の丸め

MPLAB C18 では常に浮動小数点の結果を も近い値に丸めます。MPLAB XC8も結果を も近い値に丸めますが、浮動小数点数をより幅の狭い浮動小数点数に変換する場合を除きます。その場合、より小さい浮動小数点の値に丸めます。

符号付きビットフィールドのサポート

構造体およびビットフィールドの差異はセクション 3.12「構造体と共用体」で詳述します。

MPLAB C18 コンパイラは、既定値では整数拡張を適用しない事に注意が必要です。プロジェクトで整数拡張を有効にするオプションを選択していない場合、intよりも小さい型のオペランドを含む整数式の結果に差異が生じる可能性があります。セクション 3.4「整数拡張」で詳述します。

DS50002184A_JP - p.12 2014 Microchip Technology Inc.

Page 13: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

移行の概要

1.3.2 非標準の拡張

組み込み環境でのプログラミングを容易にするため、MPLAB C18およびMPLAB XC8コンパイラのどちらにも非標準の拡張があります。これらの拡張は構文と動作が異なるため、移行時には細心の注意が必要です。非標準の拡張については、Chapter 3.

「言語の機能」で説明します。

全ての 新 MPLAB XC コンパイラ (XC8、XC16、XC32) は共通 C インターフェイス(CCI) を備え、これらのコンパイラ間の移植性を高めています。一部の非標準拡張の構文を標準化し、実装定義の動作をさらに洗練化しています。

MPLAB XC8 でコンパイルする場合、CCI が提供する代替構文を検討すべきです。CCIは有効化が必要なコンパイラモードである事に注意してください。このインターフェイスおよびネイティブの MPLAB XC8 構文と CCI 構文との対応については、『MPLABXC8 C Compiler User's Guide』(DS50002053) で説明しています。

1.3.3 オプションとリンカスクリプト

目的とするプログラム動作を実現するため、プロジェクトはソースコードの他にコンパイラ オプションおよびリンカスクリプト (またはどちらか )を使う場合があります。これらのオプションやスクリプトも C18 互換モード以外では受け付けられないため、MPLAB XC8 の等価コードまたは等価オプションに書き換える必要があります。

コンパイラ オプションは、追加の関連する MPLAB XC8 オプションと共にセクション Chapter 2.「コンパイラの起動」に記載しています。

リンカスクリプトについては、MPLAB XC8 に直接対応するものがありません。その代わり、コンパイラ ドライバから制御可能なリンカオプションを使います。リンカオプションは、アセンブリコード内のセクション ( つまり psect) を定義するアセンブラディレクティブと連動します。セクション 3.20「リンク」で説明します。

1.3.4 アセンブリコード

アセンブリコードは、たとえ同じデバイス向けのアセンブラでも移植できません。本書ではアセンブリコードの移行について説明しませんが、セクション 3.19「C とアセンブリ」にアセンブリコードの期待通りのビルドおよび動作を確保するために必要な変更について簡単なヒントを掲載しています。

1.3.5 オブジェクトおよびライブラリ ファイル

MPLAB C18 が使うオブジェクトおよびライブラリ ファイルは、MPLAB XC8 と互換性がありません。MPLAB XC8 には C 標準ライブラリセットが付属しており、既定値ではこれらがリンクされます。従って、同様のライブラリ関数を使えます ( セクション 3.11「関数バリアント」参照 )。

使う全てのオブジェクト ファイルのソースコードを入手し、MPLAB XC8 プロジェクトに含める必要があります。MPLAB XC8 フォーマットであっても、オブジェクトファイルをこのコンパイラへの入力ファイルとして使う事は推奨しません。可能な限り C ソースファイルまたは p-code ライブラリ ファイルを使います。

MPLAB XC8 で利用可能な等価のライブラリがない場合、それらのルーチンのソースコードも入手する必要があります。MPLAB C18 に付属するペリフェラル ライブラリは MPLAB XC8 にも付属しています。このライブラリは既定値でリンクされます(MPLAB XC8 user’s guide の --RUNTIMEオプション参照 )。

2014 Microchip Technology Inc. DS50002184A_JP - p.13

Page 14: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

NOTES:

DS50002184A_JP - p.14 2014 Microchip Technology Inc.

Page 15: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18 コンパイラから

XC8 C コンパイラへの移行ガイド

Chapter 2. コンパイラの起動

2.1 はじめに

この章では、MPLAB C18 から MPLAB XC8 に移行する際に、コマンドラインのコンパイラ オプションに加える変更について検討します。

MPLAB XC8 の実行方法と、このコンパイラ アプリケーションと MPLAB C18 の対応するコンパイラ アプリケーションの間の差異について説明します。

以下の項目について説明します。

• コンパイラの一般的な使い方

• ドライバのオプション

• MPLINK オプション

2.2 コンパイラの一般的な使い方

MPLAB C18 と MPLAB XC8 C のコンパイラのコマンドラインからの実行方法は若干異なります。

ビルドを実行する時に通常 MPLAB X IDE を使う場合、以下に述べる変換の多くは、新しいコンパイラ ツールスイートに移行する際に IDE が処理します。

2.2.1 コンパイラ アプリケーション

どちらのコンパイラも、コンパイル時に適切なアプリケーションを起動するためのコマンドライン ドライバを採用しています。しかし、MPLAB C18 ではリンカ (mplink)を明示的に実行する必要があります。一方、MPLAB XC8 ドライバでは暗黙のリンカ実行が可能です。その他の方法ではリンカを実行しない事を推奨します。表 2-1 に、コンパイル時に実行する MPLAB C18 アプリケーションの名称を、MPLAB XC8 の等価アプリケーションと共に示します。

xc8ドライバはコンパイルの全ステップを起動できるだけでなく、通常それを 1 つのコマンドで実行できます。例えば、MPLAB C18 で 1 つの簡単なソースファイルをコンパイルおよびリンクするには、以下のようなコマンドを使います。

mcc18.exe -p=18F4410 test.cmplink.exe /p18F4410 /u_CRUNTIME test.o

MPLAB XC8 の場合、これを以下の 1 コマンドだけで実行できます。

xc8 --chip=18f4410 test.c

MPLAB X IDE を使う場合、IDE は両コンパイラの動作方法を把握しており、常に適切なコマンドラインを使います。

表 2-1: アプリケーション名

タスクMPLAB C18

アプリケーション

MPLAB XC8アプリケーション

C コンパイル ( ドライバ ) mcc18 xc8

リンク mplink xc8

ライブラリ作成 mplib xc8

2014 Microchip Technology Inc. DS50002184A_JP - p.15

Page 16: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

2.2.2 コンパイルのシーケンス

MPLAB XC8 コンパイラは、OCG (Omniscient Code Generation) と呼ばれる新しいコード生成技術を使います。従来のコンパイラとは違い、OCG コンパイラはライブラリコードも含む C ソースコードの全てのパーツを、リンク段階ではなくコンパイルのコード生成段階で組み立てます。

このコンパイル シーケンスは、コンパイラが使う一時的な中間ファイルがオブジェクト ファイルではなく、パーサ アプリケーションが生成するファイルである事を意味します。これらのファイルは p-code ファイルと呼ばれます。

MPLAB XC8 でもオブジェクト ファイルを使いますが、C ソースコードの中間ファイルとしては使えません。これらを C コードから生成しようとすると、ほぼ確実にエラーが発生します。オブジェクト ファイルはアセンブリのソースコードのみから生成します。同様に、C ソースから生成するライブラリには従来のオブジェクト コードライブラリ (.libファイル ) ではなく、p-code ライブラリ フォーマット (.lppファイル ) を使う必要があります。

ソースファイルのマルチステップ コンパイルを実行する場合、パース処理後にコンパイルを停止して中間ファイルを残す --PASS1 オプションを使う必要があります。上記の例で使ったソースファイルは、中間ファイルからは以下のようにしてコンパイルできます。

xc8 --chip=18f4410 --pass1 test.c

xc8 --chip=18f4410 test.p1

どちらのコンパイル ステップでもドライバ (xc8) を使います。このマルチステップコンパイルは、MPLAB XC8 ツールスイートが選択されている時に MPLAB X IDE がC ソースファイルのコンパイルに使う方法です。

2.2.3 コマンドラインのフォーマット

ドライバに対するコマンドライン引数の配置は似ています。ドライバはコンパイル プロセスを制御する特殊なオプションを使い、ファイル名はコンパイル対象のファイルを示します。

コマンドラインでのファイルとオプションの相対的な位置関係は、どちらのコンパイラでも重要ではありません。オプションはファイル名の前後どちらで指定してもかまいません。生成されるコードの観点からは、ファイルの位置が、変数と関数に割り当てられるメモリアドレスに影響を与える可能性があります。

大文字と小文字を区別するファイルシステムの場合、ファイル名の指定時にはこれらを正しく記述する必要があります。

MPLAB XC8 でのコンパイルの一般形は、通常以下のようなものです。

xc8 --chip=device [options] files

オプションは大文字と小文字を区別しませんが、一部のオプションの引数が大文字 /小文字を区別する情報を指定する場合があります。セクション 2.3「ドライバのオプション」に、MPLAB XC8 コンパイラの等価オプションの一覧を示します。

MPLAB C18 コンパイラの既定値動作では、COFF ファイル出力 ( 拡張子 .o) を生成します。 新の MPLAB XC8 コンパイラ (v1.20 以降 ) は ELF/DWARF 出力 ( 拡張子 .elf)を生成できますが、既定値出力フォーマットはやはり COFF ファイルです。ELF ファイルはデバッグが容易なため、このフォーマットを推奨します。

mplinkに対するオプションは、MPLAB C18 ドライバ mcc18が使うオプションとはフォーマットが異なります。このアプリケーションには一連の独自コマンドライン オプションがあります (MPLINK ユーザガイドおよびセクション 2.4「MPLINK オプション」参照 )。

DS50002184A_JP - p.16 2014 Microchip Technology Inc.

Page 17: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

コンパイラの起動

2.2.4 コマンドライン使用時の移植ガイドライン

以下のガイドラインは、プロジェクトのビルドに MPLAB X IDE を使わない場合、つまり make またはバッチファイルを使う場合にのみ適用されます。

• コンパイラ ドライバ、リンカ、ライブラリアンの名前を xc8に変更します。

• C ソースコードから中間ファイルを生成する場合、これらの p-code ファイルを生成するために --PASS1 オプションを使います。 後の「リンク」ステップでは、拡張子 .p1のファイルを読み込みます。

2014 Microchip Technology Inc. DS50002184A_JP - p.17

Page 18: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

2.3 ドライバのオプション

このセクションでは、コンパイラ オプションを説明し、MPLAB C18 のオプションに対応する MPLAB XC8 オプションを示しに対応付けます。MPLAB C18 の全オプションをまとめ、その後で重要なオプションについて説明します。

2.3.1 オプションのまとめ

表 2-2 に、MPLAB C18 コンパイラのコマンドライン オプションと、MPLAB XC8 で使う等価または類似のオプションを並べて示します。

C18 オプションを直接置き換える MPLAB XC8 オプションもあれば、似たような動作のオプションもあります。全オプションの詳細は、『MPLAB XC8 C Compiler User'sGuide』(DS500002053) を参照してください。

表 2-2: MPLAB XC8 ドライバの等価オプションのまとめ

MPLAB C18 のオプション MPLAB XC8 の も近い等価オプション

-?, --help --HELP

-I=path -I=path

-fo=name -O

-fe=name -E

-z, --inc=name N/A

-k N/A

-ls N/A ( 大きなソフトウェア スタックを常にサポート )

-ms N/A

-ml N/A

-O, -O+ --OPT=all

-O- --OPT=none

-Oi+ N/A ( 整数拡張は常に有効 )

-Oi- N/A ( 整数拡張は常に有効 )

-Om+ N/A ( 文字列結合は常に有効 )

-Om- N/A ( 文字列結合は常に有効 )

-On+ N/A ( 適化は常に有効 )

-On- N/A ( 適化は常に有効 )

-Ou+ N/A ( 適化は常に有効 )

-Ou- N/A ( 適化は常に有効 )

-Os+ N/A ( 適化は常に有効 )

-Os- N/A ( 適化は常に有効 )

-Ot+ N/A ( 適化は常に有効 )

-Ot- N/A ( 適化は常に有効 )

-Ob+ N/A ( 適化は常に有効 )

-Ob- N/A ( 適化は常に有効 )

-sca N/A ( 自動変数は常に有効 )

-scs N/A ( 自動変数は常に有効 )

-sco N/A ( 自動変数は常に有効 )

-Od+ N/A ( 適化は常に有効 )

-Od- N/A ( 適化は常に有効 )

-Opa+ --OPT=+space

-Opa- --OPT=+speed

-pa=repeat count N/A ( 適化は常に有効 )

-Op+ N/A ( 適化は常に有効 )

DS50002184A_JP - p.18 2014 Microchip Technology Inc.

Page 19: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

コンパイラの起動

コンパイルに MPLAB IDE を使う場合、MPLAB IDE 内の MPLAB XC8 コンパイラ ツールスイートでは MPLAB XC8 コンパイラ オプションにグラフィカルにアクセスできます。MPLAB XC8 user’s guide には、MPLAB IDE v8 のビルドオプションと MPLABX IDEプロジェクト プロパティ ダイアログの両方について、コマンドライン オプションをウィジェットに割り当てています。

ヒント : MPLAB XC8 には、この表に示した以外にも多くのオプションがあります。これらのオプションには、MPLAB C18 に対応する等価オプションがありません。詳細は、『MPLAB XC8 C Compiler User's Guide』(DS500002053) を参照してください。

2.3.2 基本的なコンパイラ オプション

MPLAB XC8 を使う場合、ターゲット デバイスの名前をコマンドラインで必ず指定します。MPLAB C18 を使う時にこの情報がないと、コンパイラが既定値のデバイスを使います。MPLAB XC8 を使う時は必ずターゲット デバイスを指定します。指定しないとエラーが発生します。

MPLAB XC8 は PIC18 拡張命令セットをサポートしていません。MPLAB C18 プロジェクトで --extended オプションを使っている場合、この命令セットを使った手書きのアセンブリコードが含まれていない事を確認する必要があります。

出力ファイルのリネームを可能とするMPLAB C18の-FOオプションと、MPLAB XC8の -O オプションは同様の機能を果たしますが、後者はファイルのリネームだけでなく、出力ディレクトリも指定できます。

ヒント : その他の基本的な MPLAB XC8 のオプションとして、--EMI、--CCI、--MODE等があります。

-Op- N/A ( 適化は常に有効 )

-Or+ N/A ( 適化は常に有効 )

-Or- N/A ( 適化は常に有効 )

-Oa+ N/A ( 適化は常に有効 )

-Oa- N/A ( 適化は常に有効 )

-Ow+ N/A ( 適化は常に有効 )

-Ow- N/A ( 適化は常に有効 )

-p=processor --CHIP=processor

--extended N/A ( 常に標準命令セットを使用 )

--no-extended N/A ( 常に標準命令セットを使用 )

-Dmacro[=text] -Dmacro[=text]

-w={ 1 | 2 | 3 } --WARN=-9 to 9

-nw=n --MSGDISABLE=list

-verbose -V

--help-message-list N/A

--help-message-all N/A

--help-message=n N/A

--help-config N/A

-v --VER

表 2-2: MPLAB XC8 ドライバの等価オプションのまとめ

MPLAB C18 のオプション MPLAB XC8 の も近い等価オプション

2014 Microchip Technology Inc. DS50002184A_JP - p.19

Page 20: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

2.3.3 適化オプション

MPLAB XC8コンパイラを使う場合、コンパイラ 適化を制御する設定はMPLAB C18に比べて大幅に少なくなります。

MPLAB XC8 の C 言語レベルでの 適化は、多くが基本的なコード処理の一部として実行され、無効化できません。これらの 適化はアセンブリへの変換前に実行されるため、デバッグへの影響はほとんどなく、無効化する必要性もありません。一方、デバッグに悪影響を及ぼす恐れのあるアセンブリレベルの 適化は、完全に無効化できます。

MPLAB XC8のオプション --OPTとそのサブオプションだけで 適化を有効化 / 無効化できます。MPLAB C18 と同様、MPLAB XC8 ではコンパイラ 適化は既定値で全て有効です。

2.3.4 プリプロセッサ コマンド

MPLAB C18 と同様に、プリプロセッサ マクロはコマンドラインまたはコード内で#define ディレクティブを使って定義できます。どちらのコンパイラでも、このオプションは -Dです。

ヒント : MPLAB XC8 コンパイラのもう 1 つのオプションとして、マクロの定義を無効にする -Uがあります。

MPLAB C18 がインクルード ファイルを検索するパスは、環境変数 MCC_INCLUDEと-Iオプションで指定します。MPLAB XC8 コンパイラにも等価の -Iオプションがありますが、パスの指定に環境変数は使いません。代わりに、MCC_INCLUDE環境変数で指定したパスは、MPLAB XC8 の -Iオプションを使って追加します。

ヒント : プリプロセッサに関連するその他の MPLAB XC8 のオプションには -P、--PRE、--SCANDEP等があります。

2.3.5 診断

無効または疑わしいコードを示すためにコンパイラがメッセージを生成します。『MPLAB XC8 C Compiler User's Guide』(DS500002053)のエラーおよび警告メッセージに関する補遺に、全メッセージの一覧を記載しています。

MPLAB XC8 コンパイラは、全てのコンパイラ アプリケーションに共通の一元化されたメッセージ システムを使います。MPLAB XC8 のメッセージには MPLAB C18 と同様の複数のカテゴリがありますが、致命的エラーメッセージが追加されています。MPLAB XC8 が使うメッセージ カテゴリは以下の通りです。

アドバイザリ メッセージ

コンパイラが遭遇した状況、またはコンパイラが実行しようとしている動作に関する情報を提供します。

警告メッセージ

コンパイルは可能であるものの、異常であり実行時にコードが障害を発生する恐れがあるソースコードまたはその他の状況を知らせます。

エラーメッセージ

不正なソースコードまたはコードをコンパイルできない事を示します。

致命的エラーメッセージ

コンパイルをそれ以上進められずコンパイル処理が停止する状況を示します。

MPLAB C18 と同様に、MPLAB XC8 には警告メッセージをそのレベルによって抑制するドライバ オプションがあります。MPLAB C18 のメッセージに割り当てられる1、2、3 レベルとは異なり、MPLAB XC8 の警告には -9 ~ +9 のレベルが割り当てられます。レベルが高いほど、警告の重要性が増します。

メッセージに割り当てられたレベルは、MPLAB XC8 コンパイラの DATディレクトリにあるメッセージ記述ファイル (en_msg.txt) で調べる事ができます。

DS50002184A_JP - p.20 2014 Microchip Technology Inc.

Page 21: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

コンパイラの起動

MPLAB XC8の--WARNオプションでレベルを指定して警告メッセージを抑制します。既定値のレベルは 0 です。このオプションは、MPLAB C18 の -W オプションと同様の機能を果たします。

MPLAB XC8 コンパイラでは、識別番号でメッセージを無効にする事もできます。メッセージ番号はメッセージ テキストと一緒に出力されます。番号は、MPLAB XC8 user’sguide のエラーおよび警告メッセージに関する補遺にも記載しています。MPLAB XC8の --MSGDISABLEオプションは、MPLAB C18 の -NWオプションと同じ機能を果たします。ただし、MPLAB C18 では 1 つの番号しか指定できませんでしたが、--MSGDISABLE オプションを使った場合はカンマで区切って複数のメッセージ番号を指定できます。

ヒント : MPLAB XC8 コンパイラには、さらに高度な機能があります。ソースコードでプラグマを使ってメッセージを制御できます。MPLAB XC8 user’s guideの#pragmawarningを参照してください。プラグマは、1 行または複数行のコードに対して、発行されるメッセージを制御できます。MPLAB XC8 のメッセージに関連するその他のオプションとして、--MSGFORMAT、--ERRFORMAT、--WARNFORMAT、--ERRORS、--LANGがあります。

2.3.6 ドライバ オプションの移植ガイドライン

プロジェクトに対して適切なコンパイラ オプションを選ぶにあたり、以下のガイドラインが役に立つでしょう。

• IDE を使っている場合、MPLAB C18 プロジェクトをビルドして [Build] または[Output] ウィンドウで使用中のドライバ オプションを書き留めます。

• 本書に記載されたまとめから MPLAB XC8 での等価オプションを調べます。

• 必要に応じて MPLAB XC8 user’s guide を参照し、これらのオプションに対応するIDE 制御を調べます。

• 使用可能なその他の MPLAB XC8 オプションにも目を通し、適切なものを選択します。

2014 Microchip Technology Inc. DS50002184A_JP - p.21

Page 22: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

2.4 MPLINK オプション

セクション 2.3「ドライバのオプション」で述べた通り、MPLAB XC8 のリンカ (hlink)は明示的には実行されません。 も一般的に使われるリンカオプションに対応するMPLAB XC8 のオプションは、そのドライバ xc8に対して指定します。MPLINK のオプションと、対応する MPLAB XC8 ドライバのオプションを表 2-3 に示します。

アセンブリ リストファイルや COD および HEX ファイル等の出力ファイルの生成は、MPLAB XC8 内部の各種アプリケーションで制御されています。従って、MPLAB C18の /i、/w、/x等に直接対応するオプションは MPLAB XC8 には存在しません。ただし MPLAB XC8 の場合も、リストファイルの生成は --ASMLIST、出力ファイルのタイプは --OUPUTのオプションで制御できます。

表 2-3:

MPLINK オプション MPLAB XC8 で も近いオプション

/a hexformat --RUNTIME=download

/d --ASMLISTは使用不可

/g N/A

/h, /? --HELP

/i --ASMLIST

/k pathlist N/A

/l pathlist N/A

/m filename -M

/n length N/A

/o filename -O

/q -Q

/u sym [=value] N/A

/v --WARN=-9

/w N/A

/x N/A

/zsymbol=value -L-Usymbol ( 未定義シンボルとして )

DS50002184A_JP - p.22 2014 Microchip Technology Inc.

Page 23: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18 コンパイラから

XC8 C コンパイラへの移行ガイド

Chapter 3. 言語の機能

3.1 はじめに

この章では、MPLAB C18 と MPLAB XC8 コンパイラのソースコードを比較します。C ソースコードを MPLAB XC8 に移行する際に考慮すべき重要事項を説明します。MPLAB C18 に習熟していれば、MPLAB XC8 C コンパイラで使える等価の機能が良く分かるはずです。

以下の順序で説明します。

• 動作モード

• メモリモデル

• 整数拡張

• デバイス固有の情報

• データ型と限界値

• サイズの制限

• ストレージクラス

• ストレージ修飾子

• ポインタ ストレージ修飾子

• 関数バリアント

• 構造体と共用体

• 割り込み

• オブジェクトの配置

• 関数の再入可能性と呼び出し規則

• 実行時起動コード

• レジスタの使い方

• 前処理

• C とアセンブリ

• リンク

2014 Microchip Technology Inc. DS50002184A_JP - p.23

Page 24: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

3.2 動作モード

MPLAB C18 には 2 つの動作モードがあります。拡張と非拡張です。これらのモードは、PIC18 デバイスで使う命令セットに対応しています。コンパイラの拡張モードを使えるのは、拡張命令セットを備えた PIC18 デバイスのみです。非拡張モードは全てのデバイスで使用可能であり、PIC18 標準命令セットを使います。このモードの選択は、プログラムのコンパイル方法とソースコードで使用可能な機能に影響を与えます。

MPLAB XC8 には対応するモードがありません。コンパイラは PIC18 拡張命令セットをサポートしません。コードは常にPIC18標準命令セット向けにコンパイルされます。

3.2.1 動作モードの移植ガイドライン

コードを MPLAB XC8 に移植する場合、以下のガイドラインに従ってください。

• MPLAB XC8 向けにコンパイルされるコードでは非拡張命令セットを使う。

• コンフィグレーション ビットの設定が拡張命令セットを無効にしている事を確認する。

• 手書きのアセンブリコードがある場合、非拡張命令セットの使用を前提としている事を確認する。

3.3 メモリモデル

MPLAB XC8 コンパイラはメモリモデルを使いません。メモリモデルを指定するMPLAB C18 オプションは無視されます。

MPLAB C18 が使うメモリモデルは、ポインタ変数のサイズにのみ影響します。MPLAB XC8 が割り当てる各ポインタ変数のサイズは、プログラム全体の中でそのポインタに割り当てられたアドレスに基づいて、個別にかつ自動的に決定されます。

3.4 整数拡張

既定値では、MPLAB C18 は 大オペランドのサイズを使って算術演算を実行します。たとえ両方のオペランドが intより小さくても、この規則は適用されます。この動作は ANSI 規格には準拠していませんが、-Oiドライバ オプションで変更できます。

MPLAB XC8 コンパイラでは、この非標準の動作を真似る事ができません。このコンパイラの場合、より小さなデータ型 (short、char、構造型ビットフィールド ) は、常に signed intまたは unsigned intのどちらかに拡張されます。これは、より小さな型を使った式の結果が、MPLAB C18 でコンパイルした同じコードから得られる結果と異なる可能性がある事を意味します。

整数拡張については、MPLAB XC8 ユーザガイドおよび C プログラミング言語の優れた書籍ならばどれにでも、例を挙げて説明されています。

3.4.1 整数拡張の移植ガイドライン

-Oiオプションなしでコンパイルした、intよりも小さなオペランドを使ったMPLABC18 のコードは全て見直す必要があります。より小さな型を MPLAB XC8 で使う 16ビットのint型に拡張した場合に式の結果が同じになる事を確認する必要があります。

Note: 小さな型から大きな型への変化ならば結果には影響しないと思い込んではいけません。特に、小さな符号なしの型を signed int に拡張する場合に注意が必要です。オペランド符号の有無の変化は、数式の結果を大きく変える可能性があります。

DS50002184A_JP - p.24 2014 Microchip Technology Inc.

Page 25: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

言語の機能

3.5 デバイス固有の情報

3.5.1 ヘッダファイル

MPLAB XC8 は、全てのデバイス固有情報に対してヘッダファイル <xc.h> を使います。このヘッダは全ての C ソースモジュールにインクルードする必要があります。

独立したアセンブリ モジュールでSFRに名前でアクセスするには、ヘッダ<xc.inc>をインクルードする必要があります。

3.5.2 特殊機能レジスタ

MPLAB XC8 が SFR レジスタとその中のビットに定義する名前は、MPLAB C18 が使う名前と似ているため、これらの識別子の移植にはほとんど工数がかからないはずです。何らかの不一致があれば、未定義シンボルとして報告されます。1

MPLAB XC8 のコードでは、SFR レジスタ全体に一括してアクセスできます。例えばPORTA等のシンボルを使います。そのレジスタ内のビットには、各ビットを表すビットフィールド メンバーを含む構造体を使ってアクセスできます。例えば、PORTAbits.RA0等です。

ヒント : MPLAB XC8 では、ビットフィールドの代わりに RA0、RA1 等の定義済みbit型変数も使えます。ただし、移植性は低下します。

独立したアセンブリ モジュールを MPLAB XC8 でコンパイルする場合、<xc.inc>ファイルをインクルードします。アセンブリ ソース ファイルの前処理を許可する -Pオプションを有効にしてあれば、#includeディレクティブでこのファイルをインクルードできます。それとは別に、アセンブラのディレクティブ INCLUDE を使う方法もあります。SFR とその中のビットを表すアセンブリのシンボル名は、C 言語の対応するシンボル名と同じです。

3.5.3 コンフィグレーション ビット

コンフィグレーション ビットは、MPLAB C18 および XC8 のどちらのコンパイラもconfig プラグマを使って設定します。構文は同じであり、MPLAB C18 向けに作成されたコードはほとんど MPLAB XC8 でも変更せずに動作します。コンフィグレーションの設定および値の名前は同じはずですが、これまでに名前が変更された事があります。MPLAB C18 の古いバージョンを使っている場合、更新が必要なシンボル名が存在する可能性があります。このプラグマの詳細は、MPLAB XC8 user’s guide を参照してください。

ヒント : MPLAB XC8 コンパイラの docsディレクトリにある pic_chipinfo.htmlまたは pic18_chipinfo.htmlファイルを開くと、プラグマが使う設定と値の名前と、サポートしている全デバイスに対する例を調べる事ができます。同じプラグマをID ロケーション ビットの設定にも使えます。

1. 使うデバイスに対して MPLAB XC8 が定義する SFR シンボル名を正確に判断するには、プロジェ

クト内にある、<xc.h> ヘッダをインクルードした任意のモジュールの、前処理済みファイル (.pre拡張子 ) を開きます。

この前処理済みファイルには、ほとんどのデバイス固有情報に対するC言語の定義が含まれています。

2014 Microchip Technology Inc. DS50002184A_JP - p.25

Page 26: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

3.5.4 ビルトイン ルーチンとマクロ

MPLAB XC8 には、デバイス固有コードを補助する複数のプリプロセッサ マクロの定義があります。表 3-1 に示したマクロとビルトイン ルーチンの詳細は、MPLAB XC8user’s guide を参照してください。

Note 1: コンパイラは c = (c << 1) | (c >> 7);のような式を見つけると、これら

をローテート命令でエンコードします。

2: (c >> 4) | (c << 4)のような式は、値の中のニブルをスワップできます。

ヒント : MPLAB XC8 は、_delay()、_delaywdt()、__delay_us()等の遅延ループに関連するビルトイン ルーチン、ei()、di() 等の割り込みイネーブルマクロ、EEPROM へのデータプリロードに使う __EEPROM_DATA()も実装しています。

3.5.5 デバイス固有の移植ガイドライン

MPLAB XC8 のコンパイルでは、以下が完了している事を確認する必要があります。

• デバイス固有の情報にアクセスする必要がある全てのCモジュールで<xc.h>ファイルをインクルードする。

• <p18cxxx.h>、<p18c452.h>、その他コード内のあらゆるデバイス依存のヘッダファイルを含む MPLAB C18 ヘッダのインクルードを全て削除する。

• 独立したアセンブリ モジュールについては、<xc.inc> ファイルをインクルードする。

• 未定義シンボルエラーがないかを確認する。記述の資料や手法を用いて SFR 名、コンフィグレーション マクロ、プリプロセッサ マクロで使う設定および値の名前、ビルトイン関数名を修正する。

表 3-1: MPLAB XC8 の等価マクロおよびビルトイン関数

MPLAB C18 MPLAB XC8 の等価マクロ / ビルトイン関数

Nop() NOP()

ClrWdt() CLRWDT()

Sleep() SLEEP()

Reset() RESET()

Rlcf(), Rlncf(), Rrcf(), Rrncf() 通常のローテート式を使用 1

Swap() 通常のスワップ式を使用 2

DS50002184A_JP - p.26 2014 Microchip Technology Inc.

Page 27: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

言語の機能

3.6 データ型と限界値

MPLAB C18 が定義する整数データ型のサイズは、MPLAB XC8 コンパイラが定義するサイズと同じです。

標準の文字型は MPLAB C18 では signed char (-kオプションを使っていない場合 )ですが、MPLAB XC8 では unsigned charです。char型を定義する場合、常にその符号の有無を明示的に記述する事を推奨します。

どちらのコンパイラでも非標準の short long int型を使用可能であり、そのサイズはどちらの実装方法でも同じです。

MPLAB C18 で定義される float および double 型は、どちらも 32 ビット幅でIEEE-754 フォーマットを使います。MPLAB XC8 を使う場合、floatおよび double型のサイズは変更可能です。MPLAB C18 で使う場合と同様に、各型は個別に 32 ビット IEEE-754 フォーマットに設定できますが、既定値ではこのフォーマットを 24 ビットに切り詰めた形を使います。厳密な互換性が求められる場合、MPLAB XC8 のオプション --DOUBLE と --FLOAT を 32 に設定します。これらのオプションおよび浮動小数点型の詳細は、MPLAB XC8 user’s guide を参照してください。

MPLAB XC8 が格納する値には、MPLAB C18 と同じリトル エンディアン フォーマットを使います。

ビットフィールドのビットへの割り当て順は、両方のコンパイラとも同じで 下位ビットから 上位ビットです。

ヒント : XC8 コンパイラでは非標準の bit 型を使えます。この型は ( ブール型ではなく )1 ビット幅の整数値を保持できます。

3.6.1 データ型の移植ガイドライン

以下のガイドラインに従ってください。

• MPLAB C18 コードで定義された標準の char変数が signedまたは unsignedのどちらであるかを明示的に記述する。

• MPLAB C18で使われている浮動小数点オブジェクトが32ビット幅である必要がある場合、--FLOATまたは --DOUBLEオプションで MPLAB XC8 の型のサイズを大きくする。

2014 Microchip Technology Inc. DS50002184A_JP - p.27

Page 28: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

3.7 サイズの制限

個々の関数およびデータ オブジェクトの 大サイズは、MPLAB C18 と MPLAB XC8で異なる場合があります。以下に MPLAB XC8 の制限を示します。

3.7.1 関数のサイズ制限

関数に対して生成されるアセンブリ コードサイズは、ターゲット デバイスで使えるプログラムメモリの容量以外には制限されません。

3.7.2 データサイズの制限

コンパイルド スタックを使う関数に関連する auto およびパラメータ オブジェクトには以下の制限があります。

• 個々の auto またはパラメータ オブジェクト ( 例 : アレイまたは構造体 ) のサイズは、PIC18 のデータバンクのサイズである 100h バイトを超えてはなりません。

• 1 つの関数の全てのパラメータの合計サイズは、PIC18 データバンクのサイズを超えてはなりません ( これは autoオブジェクトには適用されません )。

• プログラム内の全ての関数の全てのautoおよびパラメータ オブジェクトの合計サイズは、使用可能なデータメモリ以外には制限されません。

ソフトウェア スタックを使う関数に関連する auto およびパラメータ オブジェクトに対しては、以下の制約が適用されます。

• 個々の auto またはパラメータ オブジェクト ( 例 : アレイまたは構造体 ) のサイズは、PIC18 のデータバンクのサイズである 100h バイトを超える事ができません。

• 1 つの関数の全ての auto およびパラメータ オブジェクトの合計サイズは、PIC18データバンクのサイズを超えてはなりません。

• プログラム内の全ての関数の全てのautoおよびパラメータ オブジェクトの合計サイズは、使用可能なデータメモリ以外には制限されません。

スタックを使わない全てのオブジェクト ( 例 : グローバルおよび静的オブジェクト )のサイズは、使用可能なデータメモリ以外には制限されません。

3.8 ストレージクラス

MPLAB C18 コンパイラはローカル変数空間を、ストレージクラス指定子の auto、static および非標準のクラス overlay に従って割り当てます。全ての auto オブジェクトには 2 つのデータスタックのどちらか一方の空間が割り当てられます。staticオブジェクトには永続性静的ストレージが割り当てられます。overlayオブジェクトは、コンパイラが非拡張モードで動作している場合、コンパイルド スタックに配置されます。コンパイラが拡張モードで動作している場合、overlay 指定子に効果はありません。

コンパイルド スタックへの割り当ては静的ですが、同時には有効とならない他のローカル オブジェクトとメモリを共有できます。

上記の指定子は、関数が再入可能であるかどうかに直接関係しています。これらのクラス指定子の詳細および移植ガイドラインは、セクション 3.15「関数の再入可能性と呼び出し規則」を参照してください。

Note: MPLAB XC8 が生成するアセンブリ中では、C 言語の各関数のサイズ、位置、実際の命令は異なる事に注意が必要です。

DS50002184A_JP - p.28 2014 Microchip Technology Inc.

Page 29: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

言語の機能

3.9 ストレージ修飾子

MPLAB C18 コンパイラは、標準の const および volatile 修飾子と共に、非標準の修飾子も複数定義します。修飾子は基本オブジェクトおよびポインタの参照先の型に使います。これについては、セクション 3.10.1「ポインタ ストレージ修飾子の移植ガイドライン」で別途説明します。

MPLAB C18 では rom および ram 修飾子を使ってデータメモリまたはプログラムメモリへのオブジェクト配置を独立して制御できます。標準の読み出し専用インジケータ constは、これらのメモリ指定子と組み合わせて使えます。

MPLAB XC8 コンパイラを使う場合、const 修飾子には、グローバル オブジェクトを読み出し専用化すると共に、これらをプログラムメモリに割り当てるという 2 つの役割があります。従って、MPLAB XC8 の const 修飾子は、MPLAB C18 で constと romを併用した場合と同様に動作します。MPLAB XC8 コンパイラでは、グローバルの読み出し専用変数をデータメモリに割り当てる定義は不可能ですが、constautoオブジェクトは RAM に割り当てられます。

MPLAB C18 の far修飾子は、オブジェクトが nearではない事、つまりバンク付きメモリに配置される事を示します。オブジェクトの既定値は farです。MPLAB XC8コンパイラも既定値で修飾子のないオブジェクトをバンク付きメモリ内に配置しますが、この配置を明示的に記述する修飾子はありません。

MPLAB XC8 の far 修飾子は MPLAB C18 と同名ですが意味は異なります。MPLABXC8 コンパイラは far で修飾されたオブジェクトをプログラムメモリに配置しますが、コンパイラが書き込み可能と見なす拡張メモリに配置します。

MPALB XC8 の near および far 修飾子は、どちらも --ADDRQUAL オプションで制御されます。このオプションおよび修飾子の詳細は、MPLAB XC8 user’s guide を参照してください。

3.9.1 ストレージ修飾子の移植ガイドライン

修飾子を MPLAB XC8 の も近い等価修飾子に変換するには、以下のガイドラインをここに記述した順に実行します。

• constとrom修飾子が併用されている全てのインスタンスをconstに置き換える。

• ram修飾子の全てのインスタンスを削除する。

• far修飾子の全てのインスタンスを削除する。

以下の MPLAB C18 の修飾子のシーケンスに直接対応する等価シーケンスは MPLABXC8 にはない事に注意が必要です。以下に示す代替手法を推奨します。

• グローバル オブジェクトに const修飾子だけが使われている場合 : const修飾子の削除を推奨します。オブジェクトが書き込み可能になります。修飾子を残す場合はオブジェクトは読み出し専用になりますがプログラムメモリに配置されます(const autoオブジェクトは変更不要です )。

• rom修飾子 (constなしで使われている場合 ): オブジェクトを書き込み可能にして外部メモリに配置する場合は、far修飾子への置換を推奨します。または、書き込まない場合は constへの置換を推奨します。

• nearと romを併用している場合 : これらを constに置換する事を推奨します。これによってオブジェクトはプログラムメモリに配置されますが、アドレスは指定できません。ターゲット デバイスのプログラムメモリが 64K よりも大きく、オブジェクトが 64K 境界よりも上位にリンクされる事が問題になる場合、絶対オブジェクトに設定する事を推奨します。ただし、constオブジェクトのほとんどはこのアドレスより下位に割り当てられます。

その他の修飾子シーケンスは変更不要です。

2014 Microchip Technology Inc. DS50002184A_JP - p.29

Page 30: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

3.10 ポインタ ストレージ修飾子

ポインタを定義して MPLAB C18 コンパイラを使う場合、参照先の型には near、far、rom修飾子を使う必要があります。これによってポインタのサイズと参照先の値を得るためのアクセス方法が変わります。例えば、ポインタが 64K 境界よりも下位のプログラムメモリ位置にあるオブジェクトのアドレスを保持する場合、次のように定義する必要があります。

rom near char * npsp;

参照先が romで修飾されたポインタは、RAM に配置される参照先を参照できません。また、RAM へのポインタ ( 既定値 ) は、プログラムメモリ内のオブジェクトを参照できません。ポインタ定義に使われる修飾子は、ポインタに割り当てられるアドレスにあるオブジェクトの修飾子と一致させる必要があります。

MPLAB XC8 を使う場合、ポインタの参照先の型に修飾子は不要であり、実際には無視されます。コンパイラはポインタへのアドレス割り当てを全て追跡しているため、ポインタの参照先は常に既知です。コンパイラは全てのオブジェクトのメモリ空間と割り当てられたバンクを把握しているため、 適なサイズとポインタの参照先の値を得る方法は自動的に選択できます。

MPLAB XC8 の一般的なポインタは、正しい型のオブジェクトであれば、その配置されたメモリ空間に関わらず全てにアクセスできます。同じポインタを使ってデータメモリおよびプログラムメモリ両方の参照先にアクセスできます。

ポインタ定義に constおよび volatile修飾子を使うと、それぞれ読み出し専用およびアクセス 適化禁止という通常の意味に設定されますが、それ以外の非標準修飾子はどれも使えず、使っても無視されます。従って、例えば MPLAB XC8 を使う場合、上記のポインタの例は以下のように定義します。

char * npsp;

MPLAB C18 のポインタは、ポインタ定義時に使われた修飾子に応じて 16 ビットまたは 24 ビット幅です。MPLAB XC8 で定義されるポインタは、コード内で割り当てたアドレスに応じて 8、16、24 ビット幅のいずれかです。ポインタサイズはプログラム内で固定ですが、ビルドにより変化する場合があります。ポインタサイズに依存するソースコードを生成しないように注意します。

3.10.1 ポインタ ストレージ修飾子の移植ガイドライン

ポインタ変数の移植は比較的簡単です。定義内の、ポインタの参照先の型に対する修飾子と、ポインタに対する修飾子の違いを確実に理解します。

• 全てのポインタの参照先の型から、near、far、romの全てのインスタンスを削除する。

• セクション 3.9.1「ストレージ修飾子の移植ガイドライン」の説明に従い、全てのポインタ修飾子を見直す。

Note: これは、ポインタに一度もアドレスを割り当てなかった場合、または NULLポインタしか割り当てなかった場合、MPLAB XC8 はこの事実も認識する事を意味します。そのような場合、コンパイラはポインタのサイズと参照先の値の取得方法を積極的に 適化します。

DS50002184A_JP - p.30 2014 Microchip Technology Inc.

Page 31: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

言語の機能

3.11 関数バリアント

MPLAB C18 のポインタ定義に修飾子が必要であるという事 ( セクション 3.10「ポインタ ストレージ修飾子」の説明参照 ) は、異なるメモリ空間にあるデータを処理するために複数の関数バリアントを作成しなければならない事を意味します。例えば、2つのポインタ パラメータを取る strcpy() 関数の場合、参照元と参照先の可能な組み合わせに対応する 4 つのバリアントが必要です。それらのプロトタイプは以下の通りです。

char *strcpy (auto char *s1, auto const char *s2);char *strcpypgm2ram (auto char *s1, auto const rom char *s2);rom char *strcpyram2pgm (auto rom char *s1, auto const char *s2);rom char *strcpypgm2pgm (auto rom char *s1, auto const rom char *s2);

MPLAB XC8 コンパイラのポインタ割り当て追跡はライブラリ関数にも適用されるため、この関数に必要なバリアントは 1 つだけであり、以下の標準 ANSI プロトタイプを使います。

char *strcpy (char *s1, const char *s2);

ポインタ パラメータのサイズと、この関数のエンコードはプログラム内で関数に渡される実際のアドレスに基づいて決まります。

MPLAB XC8 にコードを移行する場合、関数バリアントのベースバージョンの呼び出しのみで十分です。例えば、strcpypgm2ram()の呼び出しは、strcpy()の呼び出しに変更します。

ポインタ引数を取る関数を作成している場合、その関数の 1 つのバージョンを作成すれば十分です。この関数には、メモリ空間内の位置に関わらず、あらゆる正しい型のオブジェクトのアドレスを渡す事ができます。

3.11.1 関数バリアントの移植ガイドライン

複数の関数バリアントを使ったコードは移植すると簡素化されます。

関数のバリアントに対する呼び出しは、ベースルーチン自体への呼び出しに変更します。例えば、strcpypgm2ram() の呼び出しは、strcpy() の呼び出しに変更します。

2014 Microchip Technology Inc. DS50002184A_JP - p.31

Page 32: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

3.12 構造体と共用体

匿名 ( アノニマス ) 構造体と共用体は、MPLAB C18 と XC8 両方がサポートします。この機能を使った MPLAB C18 のコードは、変更なしで MPLAB XC8 に移行できます。このような機能は ANSI 規格に準拠していないため、可能限り避ける事を推奨します。

MPLAB C18 コンパイラでは、符号付きのビットフィールドを使えます。MPLAB XC8では、現在これをサポートしていません。

3.12.1 構造体の移植ガイドライン

MPLAB C18 のコードで符号付きビットフィールドを定義している場合、以下の変更が必要な場合があります。

signedビットフィールドのインスタンスをunsignedに変更するか、signed charの構造体メンバーに変更します。

3.13 割り込み

MPLAB XC8 での割り込みベクタおよびサービスルーチンの定義は MPLAB C18 と異なります。サービスルーチンのエンコードも異なります。

MPLAB C18 コンパイラの場合、割り込みの各優先度に対して 2 つの関数を作成します。1 つは割り込みサービスルーチン (ISR) を定義する関数、もう 1 つは割り込みベクタにリンクして制御を ISR に移す関数です。これを以下の MPLAB C18 の例で示します。

#pragma code low_vector=0x18void interrupt_at_low_vector(void){ _asm GOTO low_isr _endasm}

#pragma code /* return to the default code section */#pragma interruptlow low_isrvoid low_isr (void){ /* service routine body goes here */}

MPLAB XC8 コンパイラは、各割り込みに対して関数を 1 つだけ定義します。コンパイラは、割り込みサービスルーチンが見つかると、割り込みベクタに関連するコードを自動的に生成します。関数に interrupt指定子を適用すると ISR が作成されます。MPLAB XC8 では、上記の例を以下のように記述します。

void interrupt low_priority low_isr (void){ /* service routine body goes here */}

高優先度 ( 既定値 ) 割り込みの場合、関数定義時に low_priority キーワードを省略するか、high_priorityキーワードを使います。下に例を示します。

void interrupt high_isr (void){ /* service routine body goes here */}

MPLAB XC8 を使う場合、割り込み関数の本体に含めるコードに対する制限はありません。ただし、リアルタイム性能が求められる場合は、小さくシンプルなルーチンがより適しています。

DS50002184A_JP - p.32 2014 Microchip Technology Inc.

Page 33: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

言語の機能

MPLAB XC8 コンパイラは、割り込み関数が使う全てのレジスタと、割り込み関数が呼び出す全ての関数 ( ライブラリ関数を含む ) を推定できます。ただし、インラインアセンブリ コードに対してはレジスタの使用を調べません。割り込み関数からアセンブリ ルーチンを呼び出す場合、そのアセンブリ ルーチンが使うレジスタはプラグマregsusedで指定できます。この場合、コンテキスト切り換え時に保存するレジスタが増える可能性があります。割り込みルーチンが通常保存するレジスタセットを制限する仕組みはありません。

3.13.1 割り込みの移植ガイドライン

各割り込み優先度について、次のガイドラインに従ってください。

• 割り込みベクタにリンクされた関数を削除します。そのような関数は#pragma codeディレクティブで囲まれています。これらのディレクティブも削除します。

• ISR に関連する interruptまたは interruptlowプラグマを削除します。

• ISR のプロトタイプにキーワード interruptを追加します。

• 低優先度の割り込みを処理する関数の場合、ISR プロトタイプに (interrupt指定子と共に ) キーワード low_priorityを追加します。

• インライン アセンブリまたは独立したアセンブリ ルーチンで使っているレジスタに、保存が必要なものがないか確認し、アセンブリコードを含むルーチンに#pragma regsusedディレクティブを使います。または、アセンブリコード内で手動でレジスタを保存します。

2014 Microchip Technology Inc. DS50002184A_JP - p.33

Page 34: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

3.14 オブジェクトの配置

MPLAB C18 コンパイラは、特定のメモリ位置へのオブジェクトの配置にプラグマを使います。MPLAB XC8 にはこのプラグマに対応する等価機能がありますが、なぜオブジェクトを既定値以外の位置に配置するのか良く考えて、MPLAB XC8 が提供する代替方式を選ぶべきです。以降のセクションで説明します。

3.14.1 変数と関数

MPALB C18 の #pragma sectiontypeは、名前を指定して変数とコードを代替セクションに割り当てる時に使います。これは、そのセクションをメモリの特定のアドレスまたはアドレス範囲に明示的にリンクできるようにするための方法です。

目的が純粋に変数または関数を特定のアドレスに配置する事であれば、MPLAB XC8でこれを実現する も簡単な方法は、変数または関数を絶対化する事です。これには、@address構造体を使います。

MPLAB C18 で以下のように定義された変数を例に取ります。

#pragma udata myUdata=0x100int foobar;

これを MPLAB XC8 でも同じアドレスに割り当てるには、以下の絶対変数の定義を使います。

int foobar @ 0x100;

同様のプラグマを使い MPLAB C18 で次のように定義された関数を例に取ります。

#pragma code myCode=0x2000int calcOffset(int radius) { ...

MPLAB XC8 で以下の絶対関数定義を使えば、上記と同じ効果が得られます。

int calcOffset(int radius) @ 0x2000 { ...

sectiontypeプラグマを使う理由が変数を特定バンクに配置する事だけであった場合、MPLAB XC8 では bankxキーワードを使うのが も簡単です。ただし、このキーワードではどのデバイスでも先頭 4 バンクへの配置しかできません。例えば、

bank1 int foobar;

は、foobar をバンク 1 データメモリに割り当てます。修飾子を意図する通りに機能させるには、requestに --ADDRQUALオプションを設定する必要があります。既定値では、コンパイラはバンク修飾子を無視します。

変数または関数を新しいセクションに割り当てる事が目的の場合、MPLAB XC8 ではオブジェクトの代替セクションを指定する__section()指定子を使います。foobarを新しいセクションに配置する上記の MPALB C18 の例は、MPLAB XC8 では以下のコードに置き換える事ができます。

int __section('myUdata') foobar;

セクションのアドレスをコード内で指定する事はできません。セクションを特定のアドレスまたはアドレス範囲に配置するには、オプションを使う必要があります。例えば、以下の MPLAB XC8 ドライバ オプションを使います。

-L-pmyUdata=0100h

このオプションは myUdata セクションをアドレス 0x100 に配置します。先頭の -Lはこのオプションから取り除かれ、残りの部分 (-pリンカオプション ) はリンカに直接渡されます。リンカオプションを調整するために、リンカを明示的に実行する必要はありません。

DS50002184A_JP - p.34 2014 Microchip Technology Inc.

Page 35: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

言語の機能

セクションを既存またはユーザ定義のアドレス範囲 ( リンカクラスと呼ばれます ) の任意の場所にリンクする事もできます。例えば、以下のオプションで (-Aリンカオプションを使って ) 新しいリンカクラスを定義し、セクションをこのクラス内の任意の位置にリンクします。

-L-AMYSPACE=50h-0ffh,100h-1ffh-L-pmyUdata=MYSPACE

セクションとリンカオプションの詳細は、MPLAB XC8 user’s guide を参照してください。

3.14.1.1 変数および関数配置の移植ガイドライン

• sectiontype プラグマで定義した全ての変数を、絶対変数またはバンク修飾子を使った変数のどちらかに置換するか、__section() 指定子でユーザ定義の psect内に配置します。

• sectiontypeプラグマで定義した全ての関数を絶対関数に置換するか、__section()指定子でユーザ定義の psect 内に配置します。

• 必要に応じて、ユーザ定義セクションをアドレスまたはアドレス範囲にリンクするオプションを追加します。

• MPLAB XC8 のマップファイルを使ってこれらのオブジェクトの配置を確認します。

3.14.2 オブジェクト位置の指示

MPLAB C18 を使う場合、 適なコードを生成するには、他のモジュールで定義された変数の位置を自分で指示する必要があります。それには、varlocate プラグマを使います。

MPLAB XC8 では、そのような情報は不要です。MPLAB XC8 は全ての C オブジェクトについて、たとえそれらが __section() 指定子を使っている場合や、絶対オブジェクトである場合でも、その位置を把握しています。

3.14.2.1 オブジェクト位置に関する移植ガイドライン

ソースから全ての varlocateプラグマを削除します。

3.14.3 一時データの配置

MPLAB C18 は、一時データの位置指定に tmpdata プラグマを使います。MPLABXC8 を使う場合、一時データの位置を明示的に変更する事はできません。関数が使う一時変数は、その関数の auto変数と共にグループ化され、関数が再入可能としてエンコードされているかどうかに基づいて、コンパイルド スタックまたはソフトウェアスタックに格納されます。

一時データの位置に依存しないコードであれば、これらのプラグマを削除しても動作に影響しません。

3.14.3.1 一時データ配置の移植ガイドライン

• #pragma tmpdataディレクティブの全てのインスタンスを削除します。

• 一時データの位置に依存するコードがない事を確認します。

Note: MPLAB XC8 user’s guide では、セクションを「psect」と呼びます。この用語は「program section」を短縮したものですが、MPLAB C18 やその他のコンパイラが使うセクションと同じ概念です。

2014 Microchip Technology Inc. DS50002184A_JP - p.35

Page 36: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

3.15 関数の再入可能性と呼び出し規則

MPLAB C18 も XC8 も関数の再入呼び出しが可能です。ただし、両コンパイラが使うプログラム スタック モデルは異なります。

再入可能性の問題は、 終的にはコンパイラが autoおよびパラメータ変数をどこに配置するかに関係します。関数を再入可能にするには、その autoおよびパラメータオブジェクトに、関数のインスタンスごとに一意のメモリを割り当てる必要があります。関数がプログラムで再入呼び出しされない場合、これらの変数に一意のメモリを割り当てる必要はなく、それぞれのアドレスを静的に割り当てる事ができます。

Microchip 社がソフトウェア スタックと呼ぶ領域は、再入可能関数に関連する autoおよびパラメータ変数を格納します。または、コンパイルド スタックと呼ばれる領域を使います。通常、コンパイルド スタックはソフトウェア スタックよりも効率的にアクセスできますが、再入可能ではありません。1

MPLAB C18 も XC8 も、autoおよびパラメータ変数の格納にソフトウェア スタックとコンパイルド スタックを使います。ただし、既定値の動作は両コンパイラで異なります。スタック内の変数配置に関して指定できる内容も異なります。

3.15.1 既定値の関数の再入動作

既定値では、MPLAB C18 は全ての関数を再入可能な方法でエンコードします。つまり、ソフトウェア スタックを使います。ターゲット デバイスが拡張命令セットをサポートしている場合、拡張モードが有効になります。このモードによるソフトウェアスタックへのアクセスは、非拡張モードよりも高効率です。

MPLAB XC8 の既定値設定では、プログラム内で再入呼び出しされた関数だけを再入可能にエンコードします。従って、これらの関数の autoおよびパラメータ変数はソフトウェア スタックを使います。再入呼び出しされなかった関数はコンパイルド スタックを使ってエンコードされ、再入不可になります。これは、ほとんどの関数がコンパイルド スタックを使って効率的にエンコードされるものの、必要に応じて再入可能性がサポートされる事を意味します。これをハイブリッド スタック モデルと呼びます。1 つのプログラムで両方のスタックを使えるためです。常に標準命令セットのみを使います。

MPLAB XC8 コンパイラは、コンパイル中に構築される完全なコールグラフから再入呼び出しされる関数を検出し、ハイブリッド モデルを使う時にこの情報を参照します。コールグラフの中で関数がループに含まれている場合、または複数のコールグラフ( 例 : メインライン コードと割り込みのコールグラフ ) に含まれている場合、その関数は再入呼び出しされたと見なされます。ポインタを介して間接呼び出しされた関数も、コールグラフが正確である事を確かめるためコンパイラにより解析されます。

関数がどのようにエンコードされたか、つまりどのスタックが使われたかは、アセンブリ リスト ファイルまたはマップファイルに示される関数情報を調べる事で分かります。MPLAB XC8 user’s guide には、これらのファイルのレイアウトの全情報を記載しています。

Note: 本書で説明する MPLAB XC8 の再入可能の機能は、このコンパイラの今後のバージョンに導入される予定です。

この機能が必要な場合、再入可能性をサポートするコンパイラを使っている事を確認してください。再入可能性をサポートしていない MPLAB XC8コンパイラはコンパイルド スタックのみを使い、この動作を制御するオプションまたは指定子はありません。

1.MPLAB XC8 コンパイラは、コンパイルド スタックを使う必要があり、かつ複数のコールグラフか

ら呼び出される関数を複製できます。これによって、関数が再入可能であるかのように見せる事がで

きます。この手法は再帰的に呼び出される関数には使えません。関数に強制的にコンパイルド スタッ

クを使わせ ( 後述します )、この関数がメインラインと割り込みコードの両方から呼び出された時に、

複製が実行されます。

DS50002184A_JP - p.36 2014 Microchip Technology Inc.

Page 37: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

言語の機能

既存のプロジェクトが関数再入に関して MPLAB C18 の既定値を使っている場合、通常は MPLAB XC8 への移植作業は不要です。

MPLAB C18 コンパイラの既定値動作を変更する何らかの言語キーワードまたはコンパイラ オプションを使っている場合、以下のセクションで説明する移植方法を説明します。

3.15.2 関数再入可能性の制御

MPLAB C18 の既定値動作は、全ての autoおよびパラメータ変数をソフトウェア スタックに割り当てるため、このコンパイラはこれらの変数をコンパイルド スタックに割り当てるオプションしか備えていません。

overlay 指定子は auto 変数をコンパイルド スタックに割り当てます。static 指定子はパラメータ変数に対してこれと同じ機能を果たします。( 通常ならば auto の変数を static として指定すると、ANSI 規格が規定する通常の効果が得られます。すなわち、プログラム実行期間全体で保持され、メモリは同様の方法でグローバル変数に割り当てられます。)

MPLAB C18 のオプション -sco を使うと、プログラム全体に含まれる全ての autoおよびパラメータ変数を強制的にオーバーレイする事ができ、従ってコンパイルド スタックに割り当てる事ができます。または、オプション -scsを使うと、全ての autoおよびパラメータ変数を staticに設定できます。

これとは対照的に、MPLAB XC8 では、各関数が全ての autoおよびパラメータ変数を割り当てる方法のみ制御できます。変数ごとに割り当てを変更する手段はありません。ただし、プログラム全体の動作を変えるオプションを使えます。

C プログラムで再入呼び出しされない場合であっても関数の autoおよびパラメータ変数に対して強制的にソフトウェア スタックを使わせたい場合があります。例えば、アセンブリコードから、このような設定を必要とする方法で呼び出される場合です。このような関数に対しては、MPLAB XC8 の reentrant指定子を使います。

関数にコンパイルド スタックを使わせたい場合、nonreentrant指定子を使います。このように指定した関数がプログラム内の複数のコールグラフから呼び出されると( 再入が必要になると )、関数出力が複製されます。関数複製の詳細は、MPLAB XC8user’s guide を参照してください。nonreentrantと指定された関数がソースコード内で再帰的に呼び出されるとエラーが発生します。

MPLAB XC8 のオプション --STACK=compiledを使うと、全ての関数が、そのプログラム内での呼び出され方に関わらずコンパイルド スタックを使うようにエンコードされます。オプション --STACK=reentrant を使うと、全ての関数がソフトウェア スタックを使います。--STACK=hybridオプションは明示的に既定値動作を指定します。すなわち、各関数のプログラム内での呼び出され方に基づいて、スタックが割り当てられます。--STACK=compiled オプションを使い、かつ reentrant指定子を使わない関数 ( 下記参照 ) がプログラム内で複数のコールグラフから再入呼び出しされると、関数の出力が複製されます。このオプションを使い、プログラム内で関数が再帰的に呼び出された場合、エラーが発生します。

前述の MPLAB XC8 キーワードと --STACKオプションの設定が競合した場合、前者が優先されます。従って、--STACK=compiledオプションで全ての関数を再入不可に指定し、関数を定義する個所で reentrant指定子を使い、その関数 1 つだけを再入可能にする事を推奨します。

2014 Microchip Technology Inc. DS50002184A_JP - p.37

Page 38: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

3.15.3 再入可能性の移植ガイドライン

MPLAB C18 からコードを移植する場合、MPLAB XC8 ではハイブリッド モデル ( 既定値 ) を使い、必要に応じて指定子とオプションを使う事を推奨します。再入呼び出しされる関数は自動的に検出されるため、この情報をコンパイラに知らせる必要はありません。移植に際しての作業は主に MPLAB C18 で使っていた明示的な制御の削除となるでしょう。

コードを MPLAB C18 から XC8 に移植する場合、以下のガイドラインに従います。

• MPLAB XC8 の既定値であるハイブリッド スタック モデルを使う。

• auto変数で使っている overlay指定子の全インスタンスを削除する。

• パラメータに使われている static指定子の全インスタンスを削除する。

• ローカル変数のうち、通常の ANSI 規格の意味で static指定子が必要なもの ( プログラム実行期間全体で保持する必要がある変数 ) に対して、この指定子を使う。

• C18 の -scs オプションを使っていた場合、各ローカル オブジェクトの定義時に明示的にstaticストレージクラスを指定する(パラメータはstaticに指定できない)。

• C18 の -scoオプションを使っていた場合、MPLAB XC8 の --STACK=compiledオプションの使用を検討します。

• ソフトウェア スタックまたはコンパイルド スタックを常に使う必要がある関数が存在するかを見直し、存在する場合は必要に応じて reentrantまたは nonreentrant指定子を使います。

多くの関数または全ての関数に nonreentrant指定子を適用していた場合、--STACK=compiledオプションでコンパイルド スタック ( 再入不可 ) モデルへの切り換えを推奨します。同様に、reentrant指定子を繰り返し使っている場合、--STACK=reentrantによる再入可能モデルへの切り換えを推奨します。

3.15.4 呼び出し規則

関数呼び出し規則はコンパイラで異なり、使うスタックモデルでも変わります。

どちらのコンパイラも呼び出し規則を直接制御する事はできません。スタックを使うオブジェクトにアクセスするアセンブリコードを手書きで作成していない限り、MPLAB XC8 に移行した場合の動作の変化が問題になる可能性は小さいと思われます。そのようなコードがある場合、見直しが必要です。この問題は本書の範囲外ですが、以下に見直しのプロセスに役立つ一般情報を示します。

MPLAB XC8 で関数がコンパイルド スタックを使う場合、auto およびパラメータ変数には静的アドレスが割り当てられ、このアドレスには、functionName@variableNameの形式のグローバル シンボルでアクセスできます。例えば、main() で定義されたinputという名前の auto変数は、シンボル main@inputでアクセスできます。このシンボルの定義とリンクするには、アセンブラのGLOBALディレクティブを使います。

ソフトウェア スタックに格納されたオブジェクトにはアクセスしない事を推奨します。関数がソフトウェア スタックを使う場合、コンパイラは FSR1 をスタック ポインタレジスタ専用とします。フレームポインタは使わないため、スタック内のオブジェクトのオフセットを表すシンボルは定義できません。スタックポインタの内容は関数実行中に変化する可能性があるため、スタックを使うオブジェクトを固定オフセットにより参照する事はできません。

DS50002184A_JP - p.38 2014 Microchip Technology Inc.

Page 39: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

言語の機能

ソフトウェア スタックを使う関数が呼び出されると、呼び出し元の関数は全パラメータをソースコードでの定義順とは逆の順序でスタックに配置 ( プッシュ) します。従って、以下のプロトタイプを持つ関数が呼び出されると

int aReentrantFunction(int a, int b);

b の引数がスタックにプッシュされてから、a の引数がプッシュされます。関数が呼び出されると、その関数が定義する全ての autoまたは一時変数のためにスタック上に空間を確保します。

スタックはメモリの上方、つまり上位アドレスに向けて増加していきます。つまり、プッシュはスタックポインタをインクリメントさせ、ポップはデクリメントさせます。

呼び出された関数がリターンする前に、全ての autoまたはローカル変数を解放するために、スタックポインタを調整します ( 減少させます )。

2014 Microchip Technology Inc. DS50002184A_JP - p.39

Page 40: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

3.16 実行時起動コード

MPLAB C18 は複数のコンパイル済み実行時起動モジュールを用意しています。これらは、選択したオプションに基づいてプロジェクトにリンクされます。特殊な実行時起動モジュールがリンクされていない限り、初期化された staticオブジェクトはクリアされません。ANSI 規格に準拠するには、これらのオブジェクトをクリアする必要があります。

MPLAB XC8 にはコンパイル済み実行時起動モジュールがありません。この役割を果たすアセンブリコードは、コンパイラが C コード全体を調べた後に生成します。コンパイラは必要なコードのみ生成するため、 適な起動シーケンスが得られます。このコードはプロジェクトに自動的に組み込まれます。

このコードの生成方法を制御するオプションもありますが、うまく行かない事があります。このオプションを使えば、変数等をクリアまたは初期化するコードの削除を選択できますが、コード障害を生じる恐れがある事に注意してください。これを制御するオプションは --RUNTIMEです。このオプションに伴う多くのサブオプションの詳細は、MPLAB XC8 user’s guide を参照してください。適当な --RUNTIME オプションを使わない限り、全ての static変数は初期化されます。

リセット後に実行するカスタムコードを追加する場合、MPLAB XC8 コンパイラの電源投入ルーチン機能を使います。このルーチン内のアセンブリコードは、実行時起動コードより前に実行されます。このルーチンをプリコンパイルする必要はありません。単にプロジェクトにソースファイルをインクルードしてリビルドします。これは、MPLABC18 の実行時起動ルーチン内の entry()関数と等価です。

3.16.1 実行時起動モジュールの移植ガイドライン

• プロジェクトから全ての起動モジュールを削除する(MPLAB C18オブジェクト ファイルは MPLAB XC8 と非互換 )。

• static オブジェクトの初期化がプロジェクトの動作に悪影響を及ぼさない事を確認する。

• entry()関数の全てのコードを電源投入ルーチンに移行する。

DS50002184A_JP - p.40 2014 Microchip Technology Inc.

Page 41: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

言語の機能

3.17 レジスタの使い方

MPLAB XC8 のコード ジェネレータが使うレジスタは、MPLAB C18 が使うレジスタとほぼ同じです。これらのレジスタの一覧を、主な使い方と共に表 3-2 に示します。レジスタにはこれ以外の用途もある事に注意してください。例えば、PROD、FSR0、FSR2、TBLPTR レジスタは MPLAB XC8 では再入関数で一時的に値を保持する時にも使えます。

MPLAB XC8 コンパイラは、これらのレジスタがインライン アセンブリ コードによって変更されないものと想定します。レジスタの変更が必要な場合、インライン アセンブリ コードで保存と復元が必要になる場合があります。

ISR の関数または ISR が呼び出す全ての関数内の C コードでこれらのレジスタが使われた場合、MPLAB XC8 はこれらのレジスタが ISR によって確実に保存および復元されるようにします。インライン アセンブリ コードがレジスタを使っているかどうかは調べないので注意が必要です。

3.17.1 レジスタの使い方の移植ガイドライン

• プロジェクト内でコンパイラ管理のレジスタは使わないようにする。

• MPLAB XC8 で未定義のセクション ( 例 : section.tmpdata) への参照を全て削除する。

• インライン アセンブリ コードが上書きするコンパイラ管理レジスタが、全てアセンブリコードで保存および復元される事を確認する。

表 3-2: コンパイラが使うレジスタ

コンパイラ管理のリソース

C18 での主な用途 XC8 での主な用途

PC 実行制御 実行制御

WREG 中間計算 中間計算

STATUS 計算結果 計算結果

BSR バンク選択 バンク選択

PROD 乗算結果、戻り値、中間計算 乗算結果

section.tmpdata 中間計算 N/A

FSR0 RAM へのポインタ RAM へのポインタ

FSR1 スタックポインタ スタックポインタ

FSR2 フレームポインタ RAM へのポインタ

TBLPTR プログラムメモリ内の値へのアクセス

プログラムメモリ内の値へのアクセス

TABLAT プログラムメモリ内の値へのアクセス

プログラムメモリ内の値へのアクセス

PCLATH 関数ポインタの呼び出し 関数ポインタの呼び出し

PCLATU 関数ポインタの呼び出し 関数ポインタの呼び出し

MATH_DATAセクション 引数、戻り値、算術ライブラリ関数の一時保管

N/A

2014 Microchip Technology Inc. DS50002184A_JP - p.41

Page 42: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

3.18 前処理

前処理と定義済みマクロは、MPLAB C18 と XC8 コンパイラ間で若干異なります。

3.18.1 定義済みマクロの名前

プリプロセッサ マクロは、ソースコードの #defineで定義できます。どちらのコンパイラも、これらのマクロをコマンドラインで定義できます。どちらも -D オプションを使います。ただし、いくつかのマクロはコンパイラによって定義済みです。これらの定義を見る事はできませんが、ソースコード内で使えます。

MPLAB C18による定義済みマクロとMPLAB XC8の等価マクロを表 3-3に示します。これらのマクロが定義されるのは、対応する条件が満たされた場合のみです。

__18CXXマクロと、__XCまたは __XC8マクロのどちらか一方を使うと、開発中にコードを両方のコンパイラでコンパイルできます。以下に例を示します。

#ifdef __18CXX signed int input; // to ensure no integral promotion issues#elif defined (__XC8) signed char input;#elif#error 'What exactly are we using to compile this code?'#endif

ヒント : MPLAB XC8 では、さらに多くの定義済みプリプロセッサ マクロが作成されます。それらは『MPLAB XC8 C Compiler User's Guide』(DS50002053) に記載しています。

3.18.1.1 定義済みマクロの移植ガイドライン

コードを移行するには、以下の手順を実行します。

• __SMALL__および __LARGE__マクロのインスタンスを削除する。これらは常に偽と評価されるため。これらの定義が前提条件となるコードを見直す。

• __TRADITIONAL18__および__EXTENDED18__マクロを使って条件付きでコンパイルされたコードは期待通りに動作するが、後者は定義されない。

• どちらのコンパイラを使用中かを示して移植の助けとするために、__18CXXマクロと、__XCまたは __XC8マクロを使う。

表 3-3: 定義済みプリプロセッサ マクロ

MPLAB C18 のマクロ 定義される条件MPLAB XC8 の

等価マクロ

__18CXX MPLAB C18コンパイラを使っている __XC、__XC8

__PROCESSOR 指定したデバイス向けにコードをコンパイルしている ( 例 : __18F452)

__PROCESSOR

__SMALL__ -ms コマンドライン オプションを使っている

N/A

__LARGE__ -ml コマンドライン オプションを使っている

N/A

__TRADITIONAL18__ 非拡張モードを使っている __TRADITIONAL18__

__EXTENDED18__ 拡張モードを使っている N/A

DS50002184A_JP - p.42 2014 Microchip Technology Inc.

Page 43: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

言語の機能

3.18.2 プリプロセッサ マクロ

MPLAB C18 とは異なり、現在 MPLAB XC8 コンパイラは可変引数リストを使うプリプロセッサ マクロをサポートしていません。関数として書き直すか、異なる引数の組み合わせを処理する複数のマクロに分割する必要があります。

どちらのコンパイラもプラグマ引数のマクロ展開を実行します。MPLAB XC8 では、意図せぬ置換が発生しないようにconfigプラグマに対して引用符で囲んだ引数を使えます。

3.18.2.1 プリプロセッサ マクロの移植ガイドライン

可変引数リストを使うプリプロセッサ マクロの定義を全て等価の関数に置換するか、異なる引数の組み合わせで複数のマクロを作成します。

2014 Microchip Technology Inc. DS50002184A_JP - p.43

Page 44: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

3.19 C とアセンブリ

MPLAB C18 と同様、MPLAB XC8 コンパイラは独立したモジュールまたは C コードのインラインコードとしてアセンブリコードを手動で作成できます。アセンブリコード命令移行の全プロセスは本書では網羅しませんが、以下のセクションでは差異を概説し、変更が必要であろう主な項目を示します。

3.19.1 アセンブラ アプリケーション

MPLAB C18 は実際には 2 つのアセンブラを使います。1 つは内部アセンブラで、Cコードにインラインで指定されたアセンブリを処理します。もう 1 つは MPASM で、手書きのアセンブリコードを含む独立したモジュールを処理します。MPASM はアセンブリ言語を完全に受け付けますが、内部アセンブラは異なります。アセンブリ ディレクティブは受け付けず、実際の命令とコードの指定にしか使えません。

一方 MPLAB XC8 の場合、アセンブリコードは C コードのインラインと独立したモジュールの両方共 MPLAB XC8 アセンブラ (aspic18) によって処理されます。どちらの状況でも MPLAB XC8 アセンブラのディレクティブを使えますが、以下のセクションで説明するディレクティブに関する注意点を確認してください。

3.19.2 アセンブリ言語の差異

MPLAB XC8 は PIC18 拡張命令セットをサポートしません。この命令セット向けに作成された MPLAB C18 アセンブリコードは、MPLAB XC8 では全て障害を発生します。PIC18 拡張命令セットは、標準命令セットには存在しない新しい命令を定義しています。しかし も重要な事は、拡張命令セットを使った場合標準命令の挙動も変化する事です。従って、標準命令しか使っていないコードであっても拡張命令セットを選択して実行すると障害を発生する可能性が高くなります。プロジェクトに大量のアセンブリが含まれている場合、標準命令セットへの移植の工数は非常に大きくなる場合があります。

MPLAB XC8 への移植時に、アセンブリ命令自体への変更が必要になる可能性があります。命令構文の違いは MPLAB XC8 user’s guide のマクロアセンブラの章に記載していますが、 も一般的な変更を以下の段落に示します。

MPLAB XC8 への移植に伴う も一般的なコードの変更は、命令の宛先に対して使うオペランドです。MPLAB C18 が指定する 0と 1に代わり、MPLAB XC8 では wと fを使います。fは、RETFIE命令で高速リターンを表す時にも使う事に注意します。

MPLAB C18 の擬似命令 MOVFW operandは MPLAB XC8 アセンブラでは実装されていません。命令 MOVF operand,wに置き換えるか、この命令を定義する MPLAB XC8アセンブラマクロを実装します (MPLAB XC8 user’s guide のアセンブラのセクションにあるMACROとENDM参照)。代わりにプリプロセッサ マクロを定義する事もできます。

C ソースで定義されるグローバル シンボルは、MPLAB XC8 が使うアセンブリ ドメインでは先頭にアンダースコアを付けます。アセンブリが C コードのインラインでも独立したモジュールでもこの規則が適用されます。従って、例えば C の変数 inputには、まず GLOBALディレクティブを使うと、シンボル _inputを使ってアセンブリコードからアクセスできるようになります。非グローバル シンボルにはセクション3.15.4「呼び出し規則」で説明した特殊なアセンブラ表記を使います。

ヒント : MPLAB XC8 は、LJMPや FCALL等の擬似命令を実装しています。これらは、MPLAB C18 には実装されていません。これらはページ選択を処理する命令ですが、従来通りコード内でページ選択、呼び出し、GOTO 等を実行する通常の命令を使う事も可能です。

DS50002184A_JP - p.44 2014 Microchip Technology Inc.

Page 45: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

言語の機能

アセンブラ ディレクティブは両コンパイラで異なります。MPLAB XC8 user’s guideのマクロアセンブラの章には、ディレクティブと制御の全リストを、それぞれの機能と共に記載しています。MPLAB XC8 で も一般的に必要とされるディレクティブにGLOBALがあります。これは、あるシンボルが同名の他のシンボルとグローバルにリンクできるようにするものです。また、PSECTディレクティブはセクション (MPLABXC8 用語では psect) を定義します。これは MPLAB C18 の CODE、IDATA、UDATAディレクティブ等に似ています。

アセンブリコードは、C コンパイラが生成するアセンブリコードの動作に準拠する必要があるため、ほとんどの場合アセンブリの再構成が必要です。C オブジェクトに割り当てられるアセンブリ シンボルとそのメモリ内の位置は異なる可能性があります。MPLAB XC8 の全てのアセンブリコードは psect (MPLAB XC8 user’s guide の PSECTディレクティブ参照 ) 内に含まれている必要があり、これらの psect が使うフラグは、その保持する情報に適していなければなりません。適切な動作に必要な も一般的なフラグは reloc、delta、spaceです。全て『MPLAB XC8 C Compiler User's Guide』(DS500002053) のアセンブリのセクションで説明しています。

アセンブリによるコード作成は 後の手段にすべきです。アセンブリコードは C コードに比べて移植性がはるかに劣るからです。プロジェクトにアセンブリコードを含める前に、その動作が C コードで実現できないか検討すべきです。アセンブリコードが避けられない場合は、MPLAB XC8 user’s guide のマクロアセンブラの章にあるアセンブリ作成に関する情報を参照してください。また、アセンブリ リスト ファイルでコンパイラのアセンブリ出力を参照し、コンパイラが生成するアセンブリコードを確認する事も検討してください。MPLAB X IDE では、アセンブリ リスト ファイルは自動的に生成されます。IDE 外でビルドしている場合は、MPLAB XC8 ユーザガイドの--ASMLISTを参照してください。

3.19.3 インライン アセンブリ

インライン アセンブリを指定するコマンドは MPLAB C18 と XC18 で異なります。MPLAB C18は、アセンブリ コード ブロックの開始と終了 _asmおよび _endasmトークンで示します。MPLAB XC8 では、それらをそれぞれ #asm と #endasm に変更できます。あるいは、アセンブリ命令ごとに asm('instruction'); の構文を使う事もできます。以下に例を示します。

_asm movlw 20 movwf 33h_endasm

は、以下のように変更できます。

asm('movlw 20');asm('movwf 33h');

または、以下のように変更できます。

#asm movlw 20 movwf 33h#endasm

インライン アセンブリ コードは、ほぼ確実に変更が必要です。差異に関する基本的な情報は、セクション 3.19.2「アセンブリ言語の差異」を参照してください。また、インライン アセンブリ コードに特有の、以下の点について注意が必要です。

C コードで定義された変数に関連するアセンブリ ドメインのシンボルは、常に C の識別子の前にアンダースコア文字を付けます。この規則は、MPLAB C18 でインラインアセンブリ コードを作成する時には適用されません。

2014 Microchip Technology Inc. DS50002184A_JP - p.45

Page 46: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

MPLAB XC8 コンパイラはシンボルの値を切り捨てません ( 切り捨てを実行する演算子がある場合は除く )。ファイルアドレスのオペランドを取る PIC 命令のほとんどは、現在選択中のバンク内のオフセットを必要とします。これは、アドレスからバンク情報をマスクする必要がある事を意味します。マスクしないと、リンカのフィックスアップ エラーが発生する場合があります。MPLAB C18 では、このマスク操作は不要です。

以下の例は、BANKSEL 擬似命令と BANKMASK マクロを使い、C の変数 myCVar にMPLAB XC8 のアセンブリコード内で適切にアクセスする方法を示します。このコードは、変数 ( 特にバンク ) の位置についての予断を一切含んでいません。

GLOBAL _myCVarmovlw 66BANKSEL (_myCVar)movwf BANKMASK(_myCVar)

従来の命令と演算子を使ってバンクを選択、アドレスをマスクするコードを作成する事もできます。しかし、上記の方法の方が異なるメモリ アーキテクチャを持つデバイスへの移植性に優れています。

DS50002184A_JP - p.46 2014 Microchip Technology Inc.

Page 47: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

言語の機能

3.20 リンク

MPLAB C18 コンパイラ ( 具体的には MPLINK アプリケーション ) は、メモリ内のセクションの配置方法を指定するためにリンカスクリプトを使います。MPLAB C18 のリンカスクリプトは、MPLAB XC8 コンパイラと互換性がありません。MPLAB XC8はリンカを設定するファイルを使いません。

一連のリンカオプションは、ビルドごとに MPLAB XC8 ドライバによって生成されます。これらのオプションは選択したデバイスと、プロジェクトで使ったその他のドライバ オプションに基づいて決まります。

生成されたリンカオプションは、メモリの定義方法とそのメモリ内への psect ( セクション ) の割り当て方法を制御します。これらのリンカオプションは、アセンブリコード内の psect 定義で指定されるフラグと連動します。このフラグは、その psectの特殊なリンク要件を示すものです。

MPLAB XC8 コンパイラが生成する既定値のリンカオプションは、ほとんどのプロジェクトに適用可能です。アプリケーションに特別な要件がある場合、リンカオプションを追加するか、-Lドライバ オプションで既定値のリンカオプションを変更できます。このドライバ オプションを使うと、リンカを直接実行せずにリンカオプションを直接制御できます。( このオプションを -Lドライバ オプションまたは -Lリンカオプションと混同しないように注意してください。)

MPLAB C18 プロジェクトで既定値のリンカスクリプトを変更していない場合、MPLAB XC8 の既定値のリンカオプションは適切に動作するはずです。両者は異なるコンパイラであり、異なる出力を生成し、オブジェクトの配置とコードは変化する事に注意してください。

オブジェクトまたはセクションを特定の位置に配置するためにMPLAB C18プロジェクトを変更した場合、コードと MPLAB XC8 のプロジェクト設定を見直す必要があります。MPLAB XC8 でオブジェクトを絶対化する方法、またはオブジェクトをユーザ定義セクションに配置する方法の詳細は、セクション 3.14「オブジェクトの配置」を参照してください。

MPLAB C18 リンカスクリプトに加えた簡単な変更ならば、MPLAB XC8 の等価リンカオプションに書き換える事ができます。前述の通り、これらをリンカに渡すには、以下に示す一般的な形の -L-ドライバ オプションを使います。

以下のMPLAB C18の SECTIONディレクティブ (リンカスクリプト内にあります )の一般形

SECTION NAME=sectionName ROM=memoryName

は、MPLAB XC8 ドライバ オプションで以下のように実装できます。

-L-psectionName=linkerClass

ここで、sectionNameは C コード内で __sectoin()ディレクティブを使うか、アセンブリコード内で PSECT ディレクティブを使って定義済みであるものとします。linkerClassが既存のコンパイラ生成のリンカクラスではない場合、以下のドライバ オプションで定義できます。

-L-AlinkerCLass=start-end[,start-end]

セクションをアドレス範囲内の任意の位置ではなく特定のアドレスに配置する必要がある場合、上記の代わりに以下の方法で定義します。

-L-psectionName=address

-L- ドライバ オプションで制御可能なリンカオプションの詳細は、MPLAB XC8user’s guide のリンカの章を参照してください。この章ではリンクプロセスと psect全般も説明しています。

2014 Microchip Technology Inc. DS50002184A_JP - p.47

Page 48: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

NOTES:

DS50002184A_JP - p.48 2014 Microchip Technology Inc.

Page 49: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18 コンパイラから

XC8 C コンパイラへの移行ガイド

用語集

記号、数字

[Halt]

プログラム実行を停止する事。Halt を実行する事は、ブレークポイントで停止する事と同じ。

[Watch] ウィンドウ (Watch Window)

ウォッチ変数の一覧が表示され、ブレークポイントで毎回表示が更新されるウィンドウ。

16 進数 (Hexadecimal)

0 ~ 9 の数字と A ~ F ( または a ~ f) のアルファベットを使った、16 を底とした記数法。A ~ F で 10 進数の 10 ~ 15 を表現する。一番右の桁が 1 の位、次の桁が 16の位、その次の桁が 162 = 256 の位を表す。

2 進数 (Binary)

0 と 1 の数字を使う、2 を底とした記数法。一番右の桁が 1 の位、次の桁が 2 の位、その次の桁が 22 = 4 の位を表す。

8 進数 (Octal)

0 ~ 7 の数字のみを使う、8 を底とした記数法。一番右の桁が 1 の位、次の桁が 8 の位、その次の桁が 82 = 64 の位を表す。

A

AND 条件ブレークポイント (ANDed Breakpoints)

プログラム実行を停止するために設定する AND 条件 ( ブレークポイント 1 とブレークポイント 2 が同時に発生した場合のみプログラム実行を停止する )。AND 条件で実行が停止するのは、データメモリのブレークポイントとプログラムメモリのブレークポイントが同時に発生した場合のみ。

ANSI

American National Standards Institute ( 米国規格協会 ) の略。米国における標準規格の策定と承認を行う団体。

ASCII

American Standard Code for Information Interchange の略。7 桁の 2 進数で 1 つの文字を表現する文字セットエンコード方式。大文字、小文字、数字、記号、制御文字等を含む。

CC\C++

C 言語は、簡潔な表現、現代的な制御フローとデータ構造、豊富に用意された演算子等を特長とする汎用プログラミング言語。C++ とは、C 言語のオブジェクト指向バージョン。

COFF

Common Object File Format の略。このフォーマットのオブジェクト ファイルは、マシンコードの他、デバッグ等に関する情報を含む。

2014 Microchip Technology Inc. DS50002184A_JP - p.49

Page 50: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

CPU

「中央演算処理装置」を参照。

DDWARF

Debug With Arbitrary Record Formatの略。ELFファイルのデバッグ情報フォーマット。

EEEPROM

Electrically Erasable Programmable Read Only Memory の略。電気的に消去可能なタイプの PROM。データの書き込みと消去をバイト単位で行う。EEPROM の内容は電源を OFF にしても保持される。

ELF

Executable and Linking Format の略。この形式のオブジェクト ファイルはマシンコードを含む。デバッグその他の情報は DWARF で指定する。ELF/DWARF の方が COFFよりも 適化したコードのデバッグに適している。

EPROM

Erasable Programmable Read Only Memory の略。再書き込みが行えるタイプの ROMで、消去は紫外線照射で行うものが主流。

FFNOP

Forced No Operation の略。Forced NOP サイクルは、2 サイクル命令の 2 サイクル目で発生する。PIC マイクロコントローラのアーキテクチャはパイプライン構造となっており、現在の命令を実行中に物理アドレス空間の次の命令がプリフェッチされる。しかし、現在の命令でプログラム カウンタが変化した場合、プリフェッチした命令は明示的に無視され、Forced NOP サイクルが発生する。

GGPR

General Purpose Register ( 汎用レジスタ ) の略。デバイスのデータメモリ (RAM) のうち、汎用目的に使える部分。

H

HEX コード /HEX ファイル (Hex Code/Hex File)

HEX コードは、実行可能な命令を 16 進数形式のコードで保存したもの。HEX ファイルは、HEX コードを格納したファイル。

IICE/ICD

インサーキット エミュレータ / インサーキット デバッガの略。ターゲット デバイスをデバッグおよびプログラミングするためのハードウェア ツール。エミュレータは、デバッガよりも多くの機能 ( トレース等 ) を備える。

インサーキット エミュレーション / インサーキット デバッグとは、インサーキットエミュレータまたはデバッガを使った作業の事を指す。

-ICE/-ICD: インサーキット エミュレーション / デバッグ用の回路を内蔵したデバイス(MCU または DSC)。このデバイスは必ずヘッダボードにマウントされ、インサーキット エミュレータまたはデバッガによるデバッグ用に使われる。

DS50002184A_JP - p.50 2014 Microchip Technology Inc.

Page 51: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

用語集

ICSP

In-Circuit Serial Programming (インサーキット シリアル プログラミング)の略。Microchip社製の組み込みデバイスをシリアル通信を利用して 小限のデバイスピンでプログラミングする方法。

IDE

Integrated Development Environment の略。MPLAB IDE の IDE と同じ意味。

IEEE

Institute of Electrical and Electronics Engineers の略。

LLVDS

Low Voltage Differential Signaling の略。銅線を使って、低ノイズ、低消費電力、低振幅でデータを高速伝送 (Gbps) する方法。

標準の I/O シグナリングでは、データストレージは実際の電圧レベルに依存する。電圧レベルは信号線の長さによって影響を受ける ( 信号線が長いと抵抗が増大し、電圧が低下する )。これに対し LVDS では、データストレージは実際の電圧レベルでなく正と負の電圧値によってのみ区別する。従って、長い信号線でもクリアで安定したデータストリームを維持した伝送が可能。

出典 : http://www.webopedia.com/TERM/L/LVDS.html

MMake Project

アプリケーションを再ビルドするコマンド。前回の完全なコンパイル後に変更されたソースファイルのみを再コンパイルする。

make ファイル (Makefile)

プロジェクトの Make に関する指示をファイルにエクスポートしたもの。このファイルは、MPLAB IDE 以外の環境で make コマンドを実行してプロジェクトをビルドする際に使う。

MCU

Microcontroller Unit の略。マイクロコントローラの事。「µC」と表記する事もある。

MPASM アセンブラ (MPASM Assembler)

PIC マイクロコントローラ、KeeLoq®、Microchip 社のメモリデバイスに対応したMicrochip 社の再配置可能なマクロアセンブラ。

MPLAB ( 言語ツール名 ) for ( デバイス名 ) (MPLAB Language Tool for Device)

特定のデバイスに対応した Microchip 社の C コンパイラ、アセンブラ、リンカ。言語ツールは、アプリケーションで使うデバイスに対応したものを選択する必要がある。例えば PIC18 MCU 用の C コードを作成する場合は「MPLAB C Compiler for PIC18MCU」を使う。

MPLAB ICD

MPLAB IDE と連動する Microchip 社のインサーキット デバッガ。ICE/ICD を参照。

MPLAB IDE

Microchip 社の統合開発環境。エディタ、プロジェクト マネージャ、シミュレータが付属する。

MPLAB PM3

Microchip 社のデバイス プログラマ。PIC18 マイクロコントローラと dsPIC デジタルシグナル コントローラの書き込みに対応。MPLAB IDE との併用も、単体での使用も可能。PRO MATE II の後継製品。

2014 Microchip Technology Inc. DS50002184A_JP - p.51

Page 52: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

MPLAB REAL ICE インサーキット エミュレータ (MPLAB REAL ICE In-CircuitEmulator)

MPLAB IDEと組み合わせて使うMicrochip社の次世代インサーキット エミュレータ。ICE/ICD を参照。

MPLAB SIM

MPLAB IDE と組み合わせて使う Microchip 社のシミュレータで、PIC MCU と dsPICDSC に対応する。

MPLAB Starter Kit for ( デバイス名 ) (MPLAB Starter Kit for Device)

特定のデバイスでの作業を開始する上で必要となるものを全てセットにしたMicrochip 社のスタータキット。既製のアプリケーションの動作を確認した後で、一部を変更してカスタム アプリケーションとしてデバッグとプログラムを行う。

MPLIB オブジェクト ライブラリアン (MPLIB Object Librarian)

MPLAB IDE と組み合わせて使う Microchip 社のライブラリアン。MPLIB ライブラリアンは、MPASM アセンブラ (mpasm または mpasmwin v2.0) または MPLAB C18 Cコンパイラで作成した COFF オブジェクト モジュールに使うオブジェクト ライブラリアン。

MPLINK オブジェクト リンカ (MPLINK Object Linker)

Microchip 社の MPASM アセンブラと C18 C コンパイラに対応したオブジェクト リンカ。Microchip 社の MPLIB ライブラリアンとの併用も可能。MPLAB IDE に統合して使用できるように設計されているが、MPLAB IDE 以外の環境でも使用できる。

MRU

Most Recently Used の略。 近使ったファイルおよびウィンドウの事。MPLAB IDEのメインメニューで選択できる。

NNOP

No Operation の略。実行してもプログラム カウンタが進むだけで何も動作を行わない命令。

OOTP

One Time Programmable の略。パッケージに窓のない EPROM デバイス。EPROMを消去するには紫外線照射が必要なため、パッケージに窓のあるデバイスしか消去できない。

PPC

パーソナル コンピュータまたはプログラム カウンタの略。

PICkit 2/3

Microchip 社の開発用デバイス プログラマで、Debug Express によるデバッグ機能を備える。サポートしているデバイスの種類は、各ツールの Readme ファイルを参照。

PIC MCU (PIC MCUs)

Microchip 社の全てのマイクロコントローラ ファミリの総称。

Psect

GCC のセクションに相当する OCG の用語。プログラム セクション (program section)の略語。リンカが 1 つのまとまりとして処理するコードまたはデータのブロック。

DS50002184A_JP - p.52 2014 Microchip Technology Inc.

Page 53: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

用語集

PWM 信号 (PWM Signals)

パルス幅変調 (Pulse Width Modulation) 信号。一部の PIC MCU は周辺モジュールとして PWM を内蔵している。

RRAM

Random Access Memory の略。データメモリ。任意の順にメモリ内の情報にアクセスできる。

ROM

Read Only Memory の略。プログラムメモリ。メモリの内容を変更できない。

Run

エミュレータを Halt から解放するコマンド。エミュレータはアプリケーション コードを実行し、I/O に対してリアルタイムに変更、応答を行う。

SSerialized Quick Turn Programming (SQTP)

デバイス プログラマでマイクロコントローラをプログラムする際に、各デバイスに異なるシリアル番号を書き込めるようにする機能。エントリコード、パスワード、ID 番号等を書き込む目的で使う。

SQTP

「Serialized Quick Turn Programming」を参照。

UUSB

Universal Serial Bus の略。2 本のシリアル伝送線で PC と外部周辺機器の通信を行う外部周辺インターフェイス規格。USB 1.0/1.1 でサポートされるデータ転送レートは12 Mbps。USB 2.0 (Hi-Speed USB) は 大 480 Mbps のデータレートをサポートしている。

VVolatile

メモリ内の変数へのアクセス方法に影響を与えるコンパイラの 適化を抑制する変数修飾子。

アーカイブ / アーカイバ (Archive/Archiver)

アーカイブ / ライブラリは、再配置可能なオブジェクト モジュールの集まり。複数のソースファイルをオブジェクト ファイルにアセンブルした後、アーカイバ / ライブラリアンを使ってこれらオブジェクト ファイルを 1 つのアーカイブ / ライブラリ ファイルにまとめると生成される。アーカイブ / ライブラリをオブジェクト モジュールや他のアーカイブ / ライブラリとリンクすると、実行コードが生成される。

アクセス エントリ ポイント (Access Entry Points)

リンク時に定義されていない可能性のある関数に、セグメントの境界を越えて制御を渡すための手段。ブートセグメントとセキュア アプリケーション セグメントを別々にリンクする方法を提供する。

アクセスメモリ (Access Memory)

PIC18 のみ - PIC18 でバンク セレクト レジスタ (BSR) の設定に関わらずアクセスできる特殊なレジスタ。

2014 Microchip Technology Inc. DS50002184A_JP - p.53

Page 54: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

アセンブリ / アセンブラ (Assembly/Assembler)

アセンブリとは、2 進数のマシンコードをシンボル表現で記述したプログラミング言語。アセンブラとは、アセンブリ言語のソースコードをマシンコードに変換する言語ツール。

アップロード (Upload)

エミュレータやプログラマ等のツールからホスト PC へ、またはターゲットボードからエミュレータへデータを転送する事。

アドレス (Address)

メモリ内の位置を一意に特定する値。

アプリケーション (Application)

PICマイクロコントローラで制御されるソフトウェアとハードウェアを組み合わせたもの。

アルファベット文字 (Alphabetic Character)

アルファベットの小文字と大文字の総称 (a, b, …, z, A, B,…, Z)。

イベント (Event)

アドレス、データ、パスカウント、外部入力、サイクルタイプ ( フェッチ、R/W)、タイムスタンプ等、バスサイクルを記述したもの。トリガ、ブレークポイント、割り込みを記述するために使う。

入れ子の深さ (Nesting Depth)

マクロに他のマクロを含める事のできる階層の数。

インポート (Import)

Hex ファイル等の外部ソースから MPLAB IDE にデータを取り込む事。

ウォッチドッグ タイマ (WDT: Watchdog Timer)

PIC マイクロコントローラに内蔵されたタイマの 1 つで、ユーザが設定した期間が経過するとプロセッサをリセットする。WDT の有効化 / 無効化、設定はコンフィグレーション ビットで行う。

ウォッチ変数 (Watch Variable)

デバッグ セッション中に [Watch] ウィンドウで観察できる変数。

英数字 (Alphanumeric)

アルファベット文字と 0 ~ 9 の 10 進数の数字の総称 (0,1,…,9)。

永続データ (Persistent Data)

クリアも初期化もされないデータ。デバイスをリセットしてもアプリケーションがデータを保持できるようにするために使う。

エクスポート (Export)

MPLAB IDE のデータを標準フォーマットで外部に出力する事。

エピローグ (Epilogue)

コンパイラで生成したコードのうち、スタック領域の割り当て解除、レジスタの復帰、ランタイムモデルで指定したその他のマシン固有の要件を実行するコード部分。関数のユーザコードの後、関数リターンの直前にエピローグを実行する。

エミュレーション / エミュレータ (Emulation/Emulator)

ICE/ICD を参照。

エラー / エラーファイル (Error/Error File)

プログラムの処理を継続できない問題が発生するとエラーとして報告される。可能な場合、エラーは問題が発生したソースファイル名と行番号を特定する。エラーファイルは、言語ツールから出力されたエラーメッセージと診断結果を格納する。

DS50002184A_JP - p.54 2014 Microchip Technology Inc.

Page 55: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

用語集

演算子 (Operators)

定義可能な式を構成する際に使う「+」や「-」等の記号。各演算子に割り当てられた優先順位に基づいて式を評価する。

エンディアン (Endianness)

マルチバイト オブジェクトにおけるバイトの並び順。

オフチップメモリ (Off-Chip Memory)

PIC18 で選択できるメモリオプション。ターゲットボード上のメモリを使うか、または全てのプログラムメモリをエミュレータから供給する。[Options]>[DevelopmentMode] の順にクリックして [Memory] タブでオフチップメモリの選択を行う。

オブジェクト コード / オブジェクト ファイル (Object Code/Object File)

オブジェクト コードとは、アセンブラまたはコンパイラで生成されるマシンコードの事。オブジェクト ファイルとは、マシンコードを格納したファイル。デバッグ情報を含む事もある。そのまま実行できるものと、他のオブジェクト ファイル ( 例 : ライブラリ)とリンクしてから完全な実行プログラムを生成する再配置可能形式のものがある。

オブジェクト ファイル ディレクティブ (Object File Directives)

オブジェクト ファイル作成時にのみ使うディレクティブ。

オペコード (Opcodes)

Operational Code の略。「ニーモニック」を参照。

拡張マイクロコントローラ モード (Extended Microcontroller Mode)

拡張マイクロコントローラ モードでは、内蔵プログラムメモリと外部メモリの両方が利用できる。プログラムメモリのアドレスが PIC18 の内部メモリ空間より大きい場合、自動的に外部メモリの実行に切り換わる。

拡張モード (Extended Mode) (PIC18 MCU)

コンパイラの動作モードの 1 つ。拡張命令 (ADDFSR、ADDULNK、CALLW、MOVSF、MOVSS、PUSHL、SUBFSR、SUBULNK) とリテラル オフセットによるインデックス アドレス指定を利用できる。

環境 (Environment)

MPLAB PM3 - デバイスのプログラミングに関する設定ファイルを保存したフォルダ。このフォルダを SD/MMC カードに転送できる。

緩和 (Relaxation)

ある命令を、機能が同じでよりサイズの小さい命令に変換する事。コードサイズを抑えるために便利である。 新の MPLAB ASM30 には、CALL 命令を RCALL 命令に緩和する機能がある。この変換は、現在の命令から +/-32k 命令ワード以内にあるシンボルを呼び出す場合に行われる。

外部 RAM (External RAM)

オフチップの読み書き可能なメモリ。

外部シンボル (External Symbol)

外部リンケージを持つ識別子のシンボル。参照の場合と定義の場合がある。

外部シンボル解決 (External Symbol Resolution)

リンカが全ての入力モジュールの外部シンボル定義を 1 つにまとめ、全ての外部シンボル参照を解決しようとするプロセス。外部シンボル参照に対応する定義が存在しない場合、リンカエラーとなる。

2014 Microchip Technology Inc. DS50002184A_JP - p.55

Page 56: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

外部入力ライン (External Input Line)

外部信号に基づいてイベントを設定するための外部入力信号ロジック プローブ ライン (TRIGIN)。

外部ラベル (External Label)

外部リンケージを持つラベル。

外部リンケージ (External Linkage)

関数または変数が、それ自身を定義したモジュールの外部から参照できる場合、外部リンケージを持つという。

記憶域クラス (Storage Class)

指定されたオブジェクトを格納する記憶場所の持続期間を決定する。

記憶域修飾子 (Storage Qualifier)

宣言されるオブジェクトの特別な属性を示す (const等 )。

基数 (Radix)

アドレスを指定する際の記数法 (16 進法、10 進法 ) の底。

クリーン (Clean)

クリーンする事により、アクティブなプロジェクトのオブジェクト ファイル、Hexファイル、デバッグファイル等、全ての中間ファイルが削除される。これらのファイルは、プロジェクトのビルド時に他のファイルから再構築される。

警告 (Warning)

MPLAB IDE - デバイス、ソフトウェア ファイル、装置に物理的な損傷を与える可能性のある状況で、ユーザに注意を促すために表示されるメッセージ。

16 ビットアセンブラ / コンパイラ - 問題となる可能性のある状態を警告として報告するが、処理は停止されない。MPLAB C30 の警告メッセージはソースファイル名と行番号を報告するが、エラーメッセージと区別するために「warning:」の文字列も付加する。

高級言語 (High Level Language)

プログラムを記述するための言語で、プロセッサから見てアセンブリよりも遠い位置関係にあるもの。

校正メモリ (Calibration Memory)

PIC マイクロコントローラの内蔵 RC オシレータやその他の周辺モジュールの校正値を格納するための特殊機能レジスタまたはレジスタ。

国際標準化機構 (International Organization for Standardization)

コンピューティングや通信を始めとする、多くのテクノロジとビジネス関連の標準規格の策定を行っている団体。一般的に ISO として知られる。

コマンド ライン インターフェイス (Command Line Interface)

プログラムとユーザのやり取りをテキストの入出力だけで行う方法。

コンパイラ (Compiler)

高級言語で記述されたソースファイルをマシンコードに変換するプログラム。

コンパイルド スタック (Compiled Stack)

コンパイラが管理するメモリの領域で、この領域内で変数に静的に空間を割り当てる。ターゲット デバイス上にソフトウェア スタックまたはハードウェア スタックのメカニズムを効率的に実装できない場合、コンパイルド スタックがソフトウェア スタックまたはハードウェア スタックに置き換わる。

DS50002184A_JP - p.56 2014 Microchip Technology Inc.

Page 57: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

用語集

コンパイルド スタック (Stack、Compiled)

コンパイラが管理し割り当てるメモリの領域で、この領域内で変数に静的に空間を割り当てる。ターゲット デバイス上にソフトウェア スタックのメカニズムを効率的に実装できない場合、ソフトウェア スタックがコンパイルド スタックに置き換わる。このメカニズムでは、関数は再入可能ではなくなる。

コンフィグレーション ビット (Configuration Bits)

PIC MCU と dsPIC DSC の動作モードを設定するために書き込む専用ビット。コンフィグレーション ビットは事前プログラミングされている場合とされていない場合がある。

再入可能 (Reentrant)

1 つの関数を複数呼び出して同時に実行できる事。直接または間接再帰、あるいは割り込み処理中の実行によって起こる事がある。

再帰 (Recursion)

定義した関数またはマクロがそれ自身を呼び出す事。再帰マクロを作成する際は、再帰から抜けずに無限ループとなりやすいため注意が必要。

再帰呼び出し (Recursive Calls)

直接または間接的に自分自身を呼び出す関数。

再配置 (Relocation)

リンカが絶対アドレスを再配置可能セクションに割り当てる事。再配置可能セクション内の全てのシンボルを新しいアドレスに更新する。

再配置可能 (Relocatable)

アドレスがメモリの固定番地に割り当てられていないオブジェクト。

再配置可能セクション (Relocatable Section)

16ビットアセンブラ - アドレスが固定されていない (絶対アドレスでない )セクション。再配置可能セクションには、再配置と呼ばれるプロセスで、リンカがアドレスを割り当てる。

左辺値 (L-value)

検査または変更が可能なオブジェクトを指し示す式。左辺値は代入演算子の左側で使う。

シーケンス ブレークポイント (Sequenced Breakpoints)

シーケンスで発生するブレークポイント。ブレークポイントのシーケンスはボトムアップ方式で実行される。つまり、シーケンスの 後のブレークポイントが 初に発生する。

シェル (Shell)

MPASM アセンブラにおいて、マクロアセンブラへの入力を行うためのプロンプト インターフェイス。MPASM アセンブラには DOS 用シェルと Windows 用シェルの 2 種類がある。

式 (Expressions)

算術演算子または論理演算子で区切った定数または記号の組み合わせ。

識別子 (Identifier)

関数または変数の名前。

システム ウィンドウ コントロール (System Window Control)

ウィンドウと一部のダイアログの左上隅にあるコントロール。通常、このコントロールをクリックすると、[ 小化 ]、[ 大化 ]、[ 閉じる ] 等のメニュー項目がポップアップ表示される。

2014 Microchip Technology Inc. DS50002184A_JP - p.57

Page 58: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

シナリオ (Scenario)

MPLAB SIM シミュレータにおいて、スティミュラス制御を具体的に設定したもの。

シミュレータ (Simulator)

デバイスの動作をモデリングするソフトウェア プログラム。

修飾子 (Qualifier)

パスカウンタで使ったり、複合トリガにおける次の動作前のイベントとして使ったりするアドレスまたはアドレス範囲。

初期化済みデータ (Initialized Data)

初期値を指定して定義されたデータ。C では、

int myVar=5;

として定義した変数は初期化済みデータセクションに格納する。

シングルステップ (Single Step)

コードを 1 命令ずつ実行するコマンド。1 命令を実行するたびに、MPLAB IDE のレジスタ ウィンドウ、ウォッチ変数、ステータス ディスプレイの表示が更新されるため、命令実行を解析してデバッグできる。C コンパイラのソースコードもシングルステップ実行できるが、その場合は 1 命令ずつ実行されるのではなく、高級言語の C で記述されたコードの 1 行から生成される全てのアセンブリレベル命令がシングルステップで実行される。

シンボル (Symbol)

プログラムを構成する各種の要素を記述する汎用のメカニズム。関数名、変数名、セクション名、ファイル名、struct/enum/union タグ名等がある。MPLAB IDE では、主に変数名、関数名、アセンブリラベルをシンボルと呼ぶ。リンク実行後は、シンボルの値はメモリ内の値となる。

実行可能コード (Executable Code)

読み込んで実行できる形式のソフトウェア。

条件付きアセンブリ (Conditional Assembly)

アセンブリ言語で、ある特定の式のアセンブル時の値に基づいて含まれたり除外されたりするコード。

条件付きコンパイル (Conditional Compilation)

プログラムの一部を、プリプロセッサ ディレクティブで指定した特定の定数式が真の場合のみコンパイルする事。

推奨しない機能 (Deprecated Features)

後方互換性確保のためにサポートしているだけで現在は使っておらず、いずれ廃止になる事が決まっている機能。

スキッド (Skid)

ハードウェア ブレークポイントを使ってプロセッサを停止する場合、ブレークポイントからさらに 1 つ以上の命令を実行してプロセッサが停止する事がある。ブレークポイントの後に実行する命令の数をスキッドと呼ぶ。

スキュー (Skew)

命令実行に対応する情報は、異なる複数のタイミングでプロセッサバスに現れる。例えば、実行されるオペコードは直前の命令の実行時にフェッチとしてバスに現れる。ソースデータのアドレスと値、並びにデスティネーション データのアドレスは、オペコードが実際に実行される時にバスに現れる。デスティネーション データの値は次の命令の実行時にバスに現れる。トレースバッファには、1 インスタンスでバス上に存在する情報がキャプチャされる。従って、トレースバッファの 1 エントリには 3 つの命令の実行情報が含まれる。1 つの命令実行で、ある情報から次の情報までにキャプチャされるサイクル数をスキューと呼ぶ。

DS50002184A_JP - p.58 2014 Microchip Technology Inc.

Page 59: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

用語集

スタティック RAM (SRAM) (Static RAM or SRAM)

Static Random Access Memory の略。ターゲットボード上の読み書き可能なプログラムメモリ。頻繁に書き換える必要のないプログラムを書き込む。

ステータスバー (Status Bar)

MPLAB IDE ウィンドウの一番下にあるバーで、カーソル位置、開発モードとデバイス、アクティブなツールバー等に関する情報が表示される。

スティミュラス (Stimulus)

シミュレータへの入力。すなわち、外部信号に対する応答をシミュレートするために生成されるデータ。通常、テキストファイルにアクションのリストとしてこのデータを記述する。スティミュラスの種類には、非同期、同期 ( ピン )、クロック動作、レジスタがある。

ステップアウト (Step Out)

現在ステップ実行中のサブルーチンから抜け出すためのコマンド。このコマンドを実行すると、サブルーチンの残りのコードを全て実行し、サブルーチンのリターンアドレスで実行が停止する。

ステップイントゥ (Step Into)

Single Step と同じコマンド。Step Over とは異なり、Step Into では CALL 命令が呼び出すサブルーチン内もステップ実行する。

ステップオーバー (Step Over)

Step Over を実行すると、サブルーチン内はステップ実行せずにデバッグできる。StepOver では、CALL 命令があると CALL の次の命令にブレークポイントが設定される。何らかの理由により、サブルーチンが無限ループになる等、正しくリターンしない場合、次のブレークポイントには到達しない。CALL 命令の処理以外は、Step Over コマンドと Single Step コマンドは同じ。

ストップウォッチ (Stopwatch)

実行サイクルを測定するためのカウンタ。

制御ディレクティブ (Control Directives)

アセンブリ言語コード内で使うディレクティブで、指定した式のアセンブル時の値に基づいてコードを含めるか除外するかを決定する。

セクション (Section)

OCG の psect に相当する GCC の用語。リンカが 1 つのまとまりとして処理するコードまたはデータのブロック。

セクション属性 (Section Attribute)

GCC のセクションの特徴を表す情報 ( 例 : accessセクション )。

絶対シンボル (Symbol、Absolute)

アセンブリの .equディレクティブによる定義等、即値を表す。

絶対セクション (Absolute Section)

リンカで変更されない固定 ( 絶対 ) アドレスを持つ GCC コンパイラのセクション。

絶対変数 / 関数 (Absolute Variable/Function)

OCGコンパイラの@ address構文を使って絶対アドレスに配置される変数または関数。

ソースコード (Source Code)

プログラマ ( 人間 ) が記述したコンピュータ プログラム。プログラミング言語で記述されたソースコードは、マシンコードに変換して実行するか、またはインタプリタで実行される。

ソースファイル (Source File)

ソースコードを記述した ASCII テキストファイル。

2014 Microchip Technology Inc. DS50002184A_JP - p.59

Page 60: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

相互参照ファイル (Cross Reference File)

シンボルテーブルとそのシンボルを参照するファイルリストを参照するファイル。シンボルが定義されている場合、リストの 初のファイルがシンボル定義の位置となる。残りのファイルはシンボルへの参照を含む。

ソフトウェア スタック (Stack、Software)

アプリケーションがリターンアドレス、関数パラメータ、ローカル変数を保存するのに使うメモリ。このメモリはプログラムでの命令の実行時に動的に割り当てられる。これによって、再入可能な関数の呼び出しが可能になる。

属性 (Attribute)

GCC の C プログラムの変数または関数の特徴を表す情報で、マシン固有の特性を記述する目的で使う。

属性 ( セクション属性 ) (Attribute、Section)

「executable」、「readonly」、「data」等、GCC のセクションの特徴を表す情報。アセンブラの .sectionディレクティブでフラグとして指定できる。

ターゲット (Target)

ユーザ ハードウェアの事。

ターゲット アプリケーション (Target Application)

ターゲットボードに読み込んだソフトウェア。

ターゲット プロセッサ (Target Processor)

ターゲット アプリケーション ボードで使われているマイクロコントローラ デバイス。

ターゲットボード (Target Board)

ターゲット アプリケーションを構成する回路とプログラマブルなデバイス。

ダウンロード (Download)

ホストから別のデバイス ( エミュレータ、プログラマ、ターゲットボード等 ) にデータを送信する事。

致命的エラー (Fatal Error)

コンパイルがただちに停止するようなエラー。エラー以降はメッセージも出力されない。

中央演算処理装置 (Central Processing Unit)

デバイス内で、実行する正しい命令をフェッチし、デコードして実行する装置。必要に応じて、算術論理演算装置 (ALU) と組み合わせて命令実行を完了する。プログラムメモリのアドレスバス、データメモリのアドレスバス、スタックへのアクセスを制御する。

ツールバー (Tool Bar)

MPLAB IDE の機能を実行するためのボタン ( アイコン ) を縦または横に並べたもの。

テンプレート (Template)

後でファイルに挿入するために作成するテキスト行。MPLAB エディタでは、テンプレートはテンプレート ファイルに保存される。

データ監視および制御インターフェイス (DMCI: Data Monitor and ControlInterface)

MPLAB X IDE 内のツール。このインターフェイスは、プロジェクト内のアプリケーション変数の動的な入力制御を提供する。4 つの動的に割り当て可能なグラフィックウィンドウを使って、アプリケーションが生成するデータをグラフィカルに表示できる。

DS50002184A_JP - p.60 2014 Microchip Technology Inc.

Page 61: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

用語集

データ ディレクティブ (Data Directives)

アセンブラが行うプログラムメモリまたはデータメモリの割り当てを制御するディレクティブ。データ項目をシンボル ( 意味のある名前 ) で参照する手段として使う。

データメモリ (Data Memory)

Microchip 社の MCU と DSC では、データメモリ (RAM) は汎用レジスタ (GPR) と特殊機能レジスタ (SFR) で構成される。EEPROM データメモリを内蔵したデバイスもある。

ディレクティブ (Directives)

言語ツールの動作を制御するためにソースコードに記述するステートメント。

デジタル シグナル コントローラ (Digital Signal Controller)

デジタル信号処理機能をサポートしたマイクロコントローラ。Microchip 社の dsPICDSC 等。

デジタル信号処理 /デジタル シグナル プロセッサ (Digital Signal Processing\DigitalSignal Processor)

デジタル信号処理 (DSP) とは、デジタル信号をコンピュータで処理する事。通常は、アナログ信号 ( 音声または画像 ) をデジタル形式に変換 ( サンプリング ) して処理する事をいう。デジタル シグナル プロセッサとは、信号処理用に設計されたマイクロプロセッサの事。

デバイス プログラマ (Device Programmer)

マイクロコントローラ等、電気的に書き込み可能な半導体デバイスをプログラミングするためのツール。

デバッグ / デバッガ (Debug/Debugger)

ICE/ICD を参照。

デバッグ情報 (Debugging Information)

コンパイラとアセンブラでこのオプションを選択すると、アプリケーション コードのデバッグに使える各種レベルの情報を出力できる。デバッグ オプションの選択の詳細はコンパイラまたはアセンブラのマニュアル参照。

特殊機能レジスタ (SFR: Special Function Registers)

I/O プロセッサ機能、I/O ステータス、タイマ等の各種モードや周辺モジュールを制御するレジスタ専用に使うデータメモリ (RAM) 領域。

匿名構造体 (Anonymous Structure)

16 ビット C コンパイラ - 無名の構造体

PIC18 C コンパイラ - C 共用体のメンバーである名前のない構造体。匿名構造体のメンバーは、その構造体を包含している共用体のメンバーと同じようにアクセスできる。例えば以下のサンプルコードでは、hiと loは共用体 casterに含まれる匿名構造体のメンバーである。

union castaway{ int intval; struct { char lo; //accessible as caster.lo char hi; //accessible as caster.hi };} caster;

トライグラフ (Trigraphs)

「??」で始まる3文字のシーケンス。ISO Cで定義されており、1つの文字に置換される。

2014 Microchip Technology Inc. DS50002184A_JP - p.61

Page 62: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

トリガ出力 (Trigger Output)

任意のアドレスまたはアドレス範囲で生成でき、トレースとブレークポイントの設定から独立したエミュレータ出力信号の事。トリガ出力ポイントはいくつでも設定できる。

トレース (Trace)

プログラム実行のログを記録するエミュレータまたはシミュレータの機能。エミュレータはプログラム実行のログをトレースバッファに記録し、これを MPLAB IDE のトレース ウィンドウにアップロードする。

トレースマクロ (Trace Macro)

エミュレータ データからのトレース情報を提供するマクロ。これはソフトウェア トレースのため、トレースを利用するには、マクロをコードに追加し、コードを再コンパイルまたは再アセンブルし、ターゲット デバイスにこのコードをプログラムする必要がある。

トレースメモリ (Trace Memory)

エミュレータに内蔵されたトレース用のメモリ。トレースバッファとも呼ばれる。

内部リンケージ (Internal Linkage)

関数または変数が、それ自身を定義したモジュールの外部からアクセスできない場合、内部リンケージを持つという。

ニーモニック (Mnemonics)

マシンコードと 1 対 1 で対応したテキスト命令。オペコードとも呼ぶ。

ネイティブ データ サイズ (Native Data Size)

ネイティブ トレースの場合、[Watch] ウィンドウで使う変数のサイズは選択したデバイスのデータメモリと同じサイズ (PIC18 の場合は同じバイトサイズ、16 ビットデバイスの場合は同じワードサイズ ) である必要がある。

ノード (Node)

MPLAB IDE のプロジェクトを構成するコンポーネント。

ハードウェア スタック (Stack、Hardware)

PIC マイクロコントローラで関数を呼び出す時にリターンアドレスを格納する場所。

パスカウンタ (Pass Counter)

イベント ( 特定のアドレスの命令を実行する等 ) が発生するたびに値をデクリメントするカウンタ。パスカウンタの値がゼロになると、イベントの条件を満たす。パスカウンタはブレークロジック、トレースロジック、複合トリガダイアログの任意のシーケンシャル イベントに割り当てられる。

パワーオン リセット エミュレーション (Power-on-Reset Emulation)

データ RAM 空間に無作為な値を書き込んで、初回電源投入時の RAM の非初期化値をシミュレートするソフトウェア無作為化処理。

ヒープ (Heap)

動的メモリ割り当てに使うメモリ空間。メモリブロックの割り当てと解放は実行時に任意の順序で行う。

非拡張モード (Non-Extended Mode) (PIC18 MCU)

コンパイラの動作モードの 1 つ。拡張命令またはリテラル オフセットによるインデックス アドレス指定を利用しない。

非初期化データ (Uninitialized Data)

初期値なしで定義されたデータ。C では、

DS50002184A_JP - p.62 2014 Microchip Technology Inc.

Page 63: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

用語集

int myVar;

は、非初期化済みデータセクションに格納される変数を定義する。

非同期 (Asynchronously)

複数のイベントが同時には発生しない事。一般に、プロセッサ実行中の任意の時点で発生する割り込みに言及する際に使う。

非同期スティミュラス (Asynchronous Stimulus)

シミュレータ デバイスへの外部入力をシミュレートするために生成されるデータ。

非リアルタイム (Non Real Time)

ブレークポイントで停止中、またはシングルステップ実行中のプロセッサ、あるいはシミュレータ モードで動作中の MPLAB IDE を指す。

ビルド (Build)

全てのソースファイルのコンパイルとリンクを行ってアプリケーションを作成する事。

ファイルレジスタ (File Registers)

汎用レジスタ (GPR) と特殊機能レジスタ (SFR) から成る内蔵のデータメモリ。

ファントムバイト (Phantom Byte)

dsPIC アーキテクチャで、24 ビット命令ワードを 32 ビット命令ワードと見なして扱う場合に使う未実装バイト。dsPIC の hex ファイルに見られる。

フィックスアップ (Fixup)

リンカによる再配置後にオブジェクト ファイルのシンボル参照を絶対アドレスに置き換える処理。

フィルタ (Filter)

トレース ディスプレイまたはデータファイルにどのデータを含めるか /除外するかを選択するもの。

不揮発性ストレージ (Non-Volatile Storage)

電源を OFF にしても内容が失われないストレージ デバイス。

フラッシュ (Flash)

データの書き込みと消去をバイト単位ではなくブロック単位で行えるタイプのEEPROM。

フリースタンディング (Free-Standing)

複素数型を使っておらず、ライブラリ (ANSI C89 規格第 7 節 ) で規定する機能の使用が標準ヘッダ (<float.h>、<iso646.h>、<limits.h>、<stdarg.h>、<stdbool.h>、<stddef.h>、<stdint.h>) の内容にのみ限定されている厳密な規格合致プログラムを受理する処理系。

フレームポインタ (Frame Pointer)

スタックベースの引数とスタックベースのローカル変数の境界となるスタック番地を指し示すポインタ。ここを基準にすると、現在の関数のローカル変数やその他の値に容易にアクセスできる。

ブレークポイント (Breakpoint)

ハードウェア ブレークポイント : 実行するとファームウェアの実行が停止するイベント。

ソフトウェア ブレークポイント : ファームウェアの実行が停止するアドレス。通常、特別な Break 命令で実行が停止される。

2014 Microchip Technology Inc. DS50002184A_JP - p.63

Page 64: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

プラグイン (Plug-ins)

MPLAB IDE では、標準コンポーネントにプラグイン モジュールを追加する事で、各種ソフトウェア / ハードウェア ツールに対応する。一部のプラグインツールは、[Tools]メニューから利用できる。

プラグマ (Pragma)

特定のコンパイラにとって意味を持つディレクティブ。一般に、実装で定義した情報をコンパイラに伝達するために使う。MPLAB C30 は属性を利用してこの情報を伝達する。

プログラム カウンタ (Program Counter)

現在実行中の命令のアドレスを格納した場所。

プログラム カウンタ ユニット (Program Counter Unit)

16 ビットアセンブラ - プログラムメモリのレイアウトを概念的に表現したもの。プログラム カウンタは 1 命令ワードで 2 つインクリメントする。実行可能セクションでは、2 プログラム カウンタ ユニットは 3 バイトに相当する。読み出し専用セクションでは、2 プログラム カウンタ ユニットは 2 バイトに相当する。

プログラムメモリ (Program Memory)

MPLAB IDE - デバイス内で命令を保存するメモリ空間。また、エミュレータまたはシミュレータにダウンロードしたターゲット アプリケーションのファームウェアを格納するメモリ空間もプログラムメモリと呼ぶ。

16 ビットアセンブラ / コンパイラ - デバイス内で命令を保存するメモリ空間。

プロジェクト (Project)

アプリケーションのビルドに必要なファイル ( ソースコードやリンカ スクリプトファイル等 ) 一式と、各種ビルドツールやビルドオプションとの関連付けをまとめたもの。

プロトタイプ システム (Prototype System)

ユーザのターゲット アプリケーションまたはターゲットボードの事。

プロファイル (Profile)

MPLAB SIM シミュレータにおいて、実行したスティミュラスをレジスタ別に一覧表示したもの。

プロローグ (Prologue)

コンパイラで生成したコードのうち、スタック領域の割り当て、レジスタの退避、ランタイムモデルで指定したその他のマシン固有の要件を実行するコード部分。プロローグは、関数のユーザコードの前に実行する。

ベクタ (Vector)

リセットまたは割り込みが発生した時にアプリケーションのジャンプ先となるメモリ番地。

ホスト PC (PC Host)

サポートされた Windows オペレーティング システムが動作する PC。

ポッド (Pod)

インサーキット エミュレータまたはデバッガの筐体。丸型の場合「パック」(Puck) と呼ぶ事もある。あるいは「プローブ」(Probe) とも呼ぶが、「論理プローブ」と混同せぬよう注意が必要。

マイクロコントローラ (Microcontroller)

CPU、RAM、プログラムメモリ、I/O ポート、タイマ等、多くの機能を統合したチップ。

DS50002184A_JP - p.64 2014 Microchip Technology Inc.

Page 65: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

用語集

マイクロコントローラ モード (Microcontroller Mode)

PIC18 マイクロコントローラで設定可能なプログラムメモリ構成の 1 つ。マイクロコントローラ モードでは、内部実行のみが許可される。つまり、マイクロコントローラモードでは内蔵プログラムメモリしか利用できない。

マイクロプロセッサ モード (Microprocessor Mode)

PIC18 マイクロコントローラで設定可能なプログラムメモリ構成の 1 つ。マイクロプロセッサ モードでは、内蔵プログラムメモリは使用されない。プログラムメモリ全体を外部にマッピングする。

マクロ (Macro)

マクロ命令。一連の命令シーケンスを短い名前で表現した命令。

マクロ ディレクティブ (Macro Directives)

マクロ定義の中で実行とデータ割り当てを制御するディレクティブ。

マシンコード (Machine Code)

コンピュータ プログラムをプロセッサが実際に読み出して解釈できる形式で表現したもの。2 進数のマシンコードで記述されたプログラムは、マシン命令のシーケンス( 命令間にデータを挟む事もある ) で構成される。ある特定のプロセッサで使える全ての命令の集合を「命令セット」という。

マシン語 (Machine Language)

ある CPU が翻訳を必要とせず実行できる命令の集合。

未割り当てセクション (Unassigned Section)

リンカのコマンドファイルで特定のターゲット メモリブロックに割り当てられていないセクション。リンカは、未割り当てセクションを割り当てるターゲット メモリブロックを検出する必要がある。

命令 (Instructions)

CPUに対して特定の演算を実行するように指示するビット列。演算の対象となるデータを含める事もできる。

命令セット (Instruction Set)

特定のプロセッサが理解できるマシン語命令の集合。

メッセージ (Message)

言語ツールの動作に問題が発生した事を知らせる文字列。メッセージが表示されても処理は停止しない。

メモリモデル (Memory Model)

C コンパイラの場合、アプリケーションで利用可能なメモリを表現したもの。PIC18C コンパイラの場合、プログラムメモリを指し示すポインタのサイズに関する規定を記述したもの。

モジュール (Module)

プリプロセッサ ディレクティブ実行後の前処理済みのソースファイル出力。翻訳単位とも呼ぶ。

優先順位 (Precedence)

式の評価順を定義した規則。

読み出し専用メモリ (Read Only Memory)

恒久的に保存されているデータへの高速アクセスが可能なメモリ ハードウェア。ただし、データの追加や変更は不可。

2014 Microchip Technology Inc. DS50002184A_JP - p.65

Page 66: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

ライブラリ / ライブラリアン (Library/Librarian)

「アーカイブ / アーカイバ」を参照。

ランタイム ウォッチ (Runtime Watch)

アプリケーション実行中に [Watch] ウィンドウで変数の値がリアルタイムに変化する事。ランタイム ウォッチの設定方法は、各ツールのマニュアルを参照。ランタイム ウォッチをサポートしていないツールもある。

ランタイムモデル (Run-time Model)

ターゲット アーキテクチャのリソースの使用を記述したもの。

リアルタイム (Real Time)

インサーキット エミュレータまたはデバッガがHalt状態から解放されると、プロセッサの実行はリアルタイム モードとなり、通常のチップと同じ挙動をする。リアルタイム モードでは、エミュレータのリアルタイム トレース バッファが有効になり、選択した全てのサイクルを常時キャプチャする。また、全てのブレークロジックが有効になる。インサーキット エミュレータまたはデバッガでは、有効なブレークポイントで停止するか、またはユーザが実行を停止するまでプロセッサはリアルタイムで動作する。

シミュレータでは、ホストCPUでシミュレート可能な 大速度でマイクロコントローラの命令を実行する事をリアルタイムと呼ぶ。

リスティング ディレクティブ (Listing Directives)

アセンブラのリスティング ファイルのフォーマットを制御するディレクティブ。タイトルや改ページ指示等、リスティング ファイルに関する各種の設定を行う。

リスティング ファイル (Listing File)

ソースファイルにある各 C ソース ステートメント、アセンブリ命令、アセンブラ ディレクティブ、マクロに対して生成されたマシンコードを記述した ASCII テキストファイル。

リトル エンディアン (Little Endian)

マルチバイト データで LSb をより下位のアドレスに格納するデータ並び順方式。

量産プログラマ (Production Programmer)

デバイスを高速にプログラミングできるようにリソースを強化したプログラマ。各種電圧レベルでのプログラミングに対応し、プログラミング仕様に完全に準拠している。量産環境ではアプリケーション回路が組立ラインにとどまる時間をなるべく短くする必要があるため、デバイスへの書き込み時間が特に重要である。

リンカ (Linker)

オブジェクト ファイルとライブラリを結合し、モジュール間の参照を解決して実行可能コードを生成する言語ツール。

リンカ スクリプト ファイル (Linker Script Files)

リンカのコマンドファイル。リンカのオプションを定義し、ターゲット プラットフォームで利用可能なメモリを記述する。

ループバック テスト ボード (Loop-Back Test Board)

MPLAB REAL ICE インサーキット エミュレータの動作をテストするために用いる。

レイテンシ (Latency)

イベントが発生してからその応答までの時間の長さ。

ロー (raw) データ (Raw Data)

あるセクションに関連付けられたコードまたはデータを 2 進数で表現したもの。

DS50002184A_JP - p.66 2014 Microchip Technology Inc.

Page 67: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

用語集

2014 Microchip Technology Inc. DS50002184A_JP - p.67

ローカルラベル (Local Label)

マクロ内で LOCAL ディレクティブを使って定義されたラベル。ローカルラベルは、マクロの同一インスタンス内でのみ有効。すなわち、LOCAL として宣言されたシンボルやラベルには、ENDM マクロ以降はアクセスできない。

ロジックプローブ (Logic Probes)

Microchip 社製エミュレータには、 大 14 のロジックプローブを接続できるものがある。ロジックプローブは、外部トレース入力、トリガ出力信号、+5 V、共通グランドを提供する。

ワークブック (Workbook)

MPLAB SIM シミュレータにおいて、SCL スティミュラスの生成に関する設定を保存したもの。

割り当てセクション (Assigned Section)

リンカのコマンドファイルで特定のターゲット メモリ ブロックに割り当てられたGCC コンパイラのセクション。

割り込み (Interrupt)

CPU に対する信号の一種。この信号が発生すると、現在動作中のアプリケーションの実行を一時停止し、制御を割り込みサービスルーチン (ISR) に渡してイベントを処理する。ISR の実行が完了すると、通常のアプリケーションの実行を再開する。

割り込みサービス要求 (IRQ: Interrupt Service Request)

プロセッサの通常の命令実行を一時的に停止し、割り込みハンドラルーチンの実行開始を要求するイベント。プロセッサによっては複数の割り込み要求イベントを持ち、優先度の異なる割り込みを処理できるものもある。

割り込みサービスルーチン (ISR: Interrupt Service Routine)

言語ツールの場合、割り込みを処理する関数。

MPLAB IDE の場合、割り込みが発生すると実行されるユーザ作成コード。通常、発生した割り込みの種類によってプログラムメモリ内の異なる位置のコードを実行する。

割り込みハンドラ (Interrupt Handler)

割り込み発生時に専用のコードを実行するルーチン。

割り込みベクタ (Interrupt Vector)

割り込みサービスルーチンまたは割り込みハンドラのアドレス。

Page 68: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

NOTES:

DS50002184A_JP - p.68 2014 Microchip Technology Inc.

Page 69: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18 コンパイラから

XC8 C コンパイラへの移行ガイド

索引

記号#asm ディレクティブ ........................................................ 45__section() 指定子 .............................................................. 34_asm ディレクティブ ........................................................ 45

Aasm 命令 ............................................................................ 45aspic18 アプリケーション ................................................. 44auto 指定子 .................................................................. 28, 37

Bbankx 修飾子 ...................................................................... 34bit データ型 ........................................................................ 27

CC18 互換モード .............................................................. 9, 11CCI  ..............................................................................................13char データ型 ..................................................................... 27ClrWdt マクロ .................................................................... 26CODE アセンブラ ディレクティブ .................................... 45code プラグマ .............................................................. 32, 34COFF ファイル .................................................................. 16config プラグマ .................................................................. 25const 修飾子 ....................................................................... 29C とアセンブリ .................................................................. 44

EELF ファイル ..................................................................... 16entry 関数 ........................................................................... 40

Ffar 修飾子 ........................................................................... 29FCALL 命令 ........................................................................ 44

GGLOBAL アセンブラ ディレクティブ ................................ 45

IIDATA アセンブラ ディレクティブ ................................... 45idata プラグマ .................................................................... 34interrupt 指定子 .................................................................. 32

LLJMP 命令 .......................................................................... 44low_priority 指定子 ............................................................. 32

Mmcc18 アプリケーション ................................................... 15mcc18 ドライバ ................................................................. 11Microchip 社ウェブサイト .................................................... 7MOVFW 命令 ..................................................................... 44MPASM  ......................................................................................44MPLAB IDE ................................................................................19mplib アプリケーション xc8 アプリケーション ................. 15mplink アプリケーション ................................................... 15mplink オプション .............................................................. 22

Nnonreentrant 指定子 ........................................................... 37

Nop マクロ ........................................................................ 26

Ooverlay 指定子 ............................................................. 28, 37

Pp-code ファイル ................................................................ 16p-code ライブラリ ............................................................. 16PSECT アセンブラ ディレクティブ .................................. 45

Rram 修飾子 ......................................................................... 29reentrant 指定子 ................................................................. 37regsused pragma ............................................................... 33RETFIE 命令 ...................................................................... 44Rlcf マクロ ......................................................................... 26romdata プラグマ .............................................................. 34rom 修飾子 ......................................................................... 29RUNTIME ドライバ オプション ........................................ 40

Ssectiontype プラグマ ......................................................... 34SECTION リンカ スクリプト ディレクティブ .................. 47SFR .............................................................................................25short long int 型 .................................................................. 27Sleep マクロ ...................................................................... 26STACK ドライバ オプション ............................................ 37static オブジェクト ............................................................ 40static オブジェクトのクリア ............................................. 40static 指定子 ................................................................. 28, 37Swap マクロ ...................................................................... 26

Ttmpdata プラグマ .............................................................. 35

UUDATA アセンブラ ディレクティブ ................................. 45udata プラグマ .................................................................. 34USB .............................................................................................53

Vvarlocate プラグマ ............................................................. 35

WWWW アドレス ................................................................... 7

Xxc.h ヘッダ ........................................................................ 25xc.inc ヘッダ ...................................................................... 25

あアセンブラ アプリケーション ........................................... 44アセンブリ シンボル ......................................................... 44アセンブリコード ........................................................ 13, 44アセンブリ命令宛先指定子 ............................................... 44

い移行 ..................................................................................... 9一時データの配置 .............................................................. 35インターネット アドレス .................................................... 7

・ 2014 Microchip Technology Inc. DS50002184A_JP - p.69

Page 70: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

MPLAB® C18コンパイラからXC8 Cコンパイラへの移行ガイド

インライン アセンブリ ...................................................... 45

うウォッチドッグ タイマ ...................................................... 54

えエラー ................................................................................ 20

おお客様向け通知サービス ...................................................... 8オブジェクト ファイル ...................................................... 13オブジェクト位置の指示 .................................................... 35オブジェクトのサイズ ....................................................... 28オブジェクトの配置 ........................................................... 34オプション ......................................................................... 18

か拡張命令セット ............................................................ 19, 44拡張モード ......................................................................... 24カスタマサポート ................................................................ 8可変引数リストを使うマクロ ............................................ 43関数のサイズ ...................................................................... 28関数のパラメータ .............................................................. 38関数の戻り値 ...................................................................... 38関数バリアント .................................................................. 31関数呼び出し規則 .............................................................. 38

き擬似 mcc18 ドライバ ......................................................... 11共通 C インターフェイス ................................................... 13共用体型 ............................................................................. 32

け警告 .................................................................................... 20

こ構造体型 ............................................................................. 32構造体ビットフィールド .................................................... 32コマンドライン オプション ............................................... 18コマンドラインの使い方 .................................................... 15コマンドラインのフォーマット ......................................... 16コンパイラ メッセージ ...................................................... 20コンパイラ管理のリソース ................................................ 41コンパイルド スタック ...................................................... 36コンフィグレーション ビット ........................................... 25

さ再入可能性 ......................................................................... 36サイズ制限 ......................................................................... 28

大オブジェクト サイズ ................................................... 28大関数サイズ .................................................................. 28適化 ................................................................................ 20

し実行時起動コード .............................................................. 40実装定義の動作 .................................................................. 12

す推奨参考資料 ........................................................................ 7スタック ............................................................................. 36ストレージクラス .............................................................. 28

せ整数拡張 ....................................................................... 12, 24セクション配置のためのリンカオプション ....................... 34絶対関数 ............................................................................. 34絶対変数 ............................................................................. 34

そソフトウェア スタック ...................................................... 36

ち遅延ビルトイン、EEPROM データ ................................... 26中間ファイル ..................................................................... 16

て定義済みマクロ ............................................................ 26, 42データ型 ............................................................................ 27データ型のサイズ .............................................................. 27データスタック .................................................................. 36電源投入ルーチン .............................................................. 40

と動作モード ......................................................................... 24特殊機能レジスタ .............................................................. 25特定アドレスへのオブジェクト配置 ................................. 34匿名構造体 ......................................................................... 32ドライバ アプリケーション ............................................... 15ドライバのオプション ....................................................... 18

はハイブリッド スタック モデル .......................................... 36パラメータ ......................................................................... 38バンクへのオブジェクト配置 ............................................ 34

ひ非拡張モード ..................................................................... 24ビットフィールド .............................................................. 32

ふ浮動小数点データ型 .......................................................... 27プリプロセッサ コマンド .................................................. 20プリプロセッサ マクロ ...................................................... 42プロジェクトの移行 ............................................................ 9

へヘッダファイル .................................................................. 25

ほポインタ ストレージ修飾子 ............................................... 30ポインタサイズ .................................................................. 30ポインタ変数 ..................................................................... 24本書

構成 ............................................................................. 5表記 ............................................................................. 6

ま前処理 ................................................................................ 42マクロ .......................................................................... 26, 42

め命令セット ......................................................................... 24メッセージ ......................................................................... 20メモリモデル ..................................................................... 24

も戻り値 ................................................................................ 38

らライブラリ ファイル ......................................................... 13

りリンカスクリプト ........................................................ 13, 47リンク ................................................................................ 47

れレジスタの使い方 .............................................................. 41

わ割り込み ............................................................................ 32

DS50002184A_JP - p.70 2014 Microchip Technology Inc.

Page 71: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

2014 Microchip Technology Inc. DS50002184A_JP - p.71

NOTES:

Page 72: XC8 C コンパイラへの移行ガイド - ww1.microchip.comww1.microchip.com/downloads/jp/DeviceDoc/50002184A_JP.pdf · MPLAB® C18 コンパイラから XC8 C コンパイラへの移行ガイド

DS50002184A_JP - p.72 2014 Microchip Technology Inc.

北米本社2355 West Chandler Blvd.Chandler, AZ 85224-6199Tel: 480-792-7200 Fax: 480-792-7277技術サポート : http://www.microchip.com/supportURL: www.microchip.com

アトランタDuluth, GA Tel: 678-957-9614 Fax: 678-957-1455

オースティン、TXTel: 512-257-3370

ボストンWestborough, MATel: 774-760-0087 Fax: 774-760-0088

シカゴItasca, ILTel: 630-285-0071 Fax: 630-285-0075

クリーブランドIndependence, OHTel: 216-447-0464Fax: 216-447-0643

ダラスAddison, TXTel: 972-818-7423 Fax: 972-818-2924

デトロイトNovi, MI Tel: 248-848-4000

ヒューストン、TXTel: 281-894-5983

インディアナポリスNoblesville, INTel: 317-773-8323Fax: 317-773-5453

ロサンゼルスMission Viejo, CATel: 949-462-9523 Fax: 949-462-9608

ニューヨーク、NY Tel: 631-435-6000

サンノゼ、CATel: 408-735-9110

カナダ - トロント

Tel: 905-673-0699 Fax: 905-673-6509

アジア / 太平洋アジア太平洋支社Suites 3707-14, 37th FloorTower 6, The GatewayHarbour City, KowloonHong KongTel: 852-2943-5100Fax: 852-2401-3431

オーストラリア - シドニー

Tel: 61-2-9868-6733Fax: 61-2-9868-6755

中国 - 北京

Tel: 86-10-8569-7000Fax: 86-10-8528-2104

中国 - 成都

Tel: 86-28-8665-5511Fax: 86-28-8665-7889

中国 - 重慶

Tel: 86-23-8980-9588Fax: 86-23-8980-9500

中国 - 杭州

Tel: 86-571-8792-8115Fax: 86-571-8792-8116

中国 - 香港 SARTel: 852-2943-5100 Fax: 852-2401-3431

中国 - 南京

Tel: 86-25-8473-2460Fax: 86-25-8473-2470

中国 - 青島

Tel: 86-532-8502-7355Fax: 86-532-8502-7205

中国 - 上海

Tel: 86-21-5407-5533Fax: 86-21-5407-5066

中国 - 瀋陽

Tel: 86-24-2334-2829Fax: 86-24-2334-2393

中国 - 深圳

Tel: 86-755-8864-2200 Fax: 86-755-8203-1760

中国 - 武漢

Tel: 86-27-5980-5300Fax: 86-27-5980-5118

中国 - 西安

Tel: 86-29-8833-7252Fax: 86-29-8833-7256

中国 - 厦門

Tel: 86-592-2388138 Fax: 86-592-2388130

中国 - 珠海

Tel: 86-756-3210040 Fax: 86-756-3210049

アジア / 太平洋インド - バンガロール

Tel: 91-80-3090-4444 Fax: 91-80-3090-4123

インド - ニューデリー

Tel: 91-11-4160-8631Fax: 91-11-4160-8632

インド - プネ

Tel: 91-20-3019-1500

日本 - 大阪

Tel: 81-6-6152-7160Fax: 81-6-6152-9310

日本 - 東京

Tel: 81-3-6880-3770 Fax: 81-3-6880-3771

韓国 - 大邱

Tel: 82-53-744-4301Fax: 82-53-744-4302

韓国 - ソウル

Tel: 82-2-554-7200Fax: 82-2-558-5932 または

82-2-558-5934

マレーシア - クアラルンプール

Tel: 60-3-6201-9857Fax: 60-3-6201-9859

マレーシア - ペナン

Tel: 60-4-227-8870Fax: 60-4-227-4068

フィリピン - マニラ

Tel: 63-2-634-9065Fax: 63-2-634-9069

シンガポールTel: 65-6334-8870Fax: 65-6334-8850

台湾 - 新竹

Tel: 886-3-5778-366Fax: 886-3-5770-955

台湾 - 高雄

Tel: 886-7-213-7830

台湾 - 台北

Tel: 886-2-2508-8600 Fax: 886-2-2508-0102

タイ - バンコク

Tel: 66-2-694-1351Fax: 66-2-694-1350

ヨーロッパオーストリア - ヴェルス

Tel: 43-7242-2244-39Fax: 43-7242-2244-393

デンマーク - コペンハーゲン

Tel: 45-4450-2828 Fax: 45-4485-2829

フランス - パリ

Tel: 33-1-69-53-63-20 Fax: 33-1-69-30-90-79

ドイツ - デュッセルドルフ

Tel: 49-2129-3766400

ドイツ - ミュンヘン

Tel: 49-89-627-144-0 Fax: 49-89-627-144-44

ドイツ - プフォルツハイム

Tel: 49-7231-424750

イタリア - ミラノ Tel: 39-0331-742611 Fax: 39-0331-466781

イタリア - ヴェニス

Tel: 39-049-7625286

オランダ - ドリューネン

Tel: 31-416-690399 Fax: 31-416-690340

ポーランド - ワルシャワ

Tel: 48-22-3325737

スペイン - マドリッド

Tel: 34-91-708-08-90Fax: 34-91-708-08-91

スウェーデン - ストックホルム

Tel: 46-8-5090-4654

イギリス - ウォーキンガム

Tel: 44-118-921-5800Fax: 44-118-921-5820

各国の営業所とサービス

03/25/14