MICROCHIP MPLAB XC8 C コンパイラ ソフトウェア
このドキュメントには、MICROCHIP AVR デバイスを対象とする場合の MPLAB XC8 C コンパイラに関する重要な情報が含まれています。
このソフトウェアを実行する前に、必ずお読みください。 8 ビット PIC デバイス用のコンパイラを使用している場合は、MPLAB XC8 C コンパイラ リリース ノートの PIC ドキュメントを参照してください。
以上view
導入
Microchip MPLAB® XC8 C コンパイラのこのリリースには、いくつかの新機能、バグ修正、および新しいデバイス サポートが含まれています。
ビルド日
このコンパイラ バージョンの公式ビルド日は 3 年 2022 月 XNUMX 日です。
前のバージョン
以前の MPLAB XC8 C コンパイラのバージョンは、2.39 年 27 月 2022 日にビルドされた機能安全コンパイラの 2.36 でした。以前の標準コンパイラは、27 年 2022 月 XNUMX 日にビルドされたバージョン XNUMX でした。
機能安全マニュアル
MPLAB XC コンパイラの機能安全マニュアルは、機能安全ライセンスを購入するとドキュメント パッケージに含まれています。
コンポーネントのライセンスとバージョン
MPLAB® XC8 C Compiler for AVR MCU ツールは、GNU General Public License (GPL) の下で作成および配布されています。これは、そのソース コードが自由に配布され、一般に公開されていることを意味します。 GNU GPL に基づくツールのソース コードは、Microchip の Web サイトから個別にダウンロードできます。 webサイト。 GNU GPL は file インストール ディレクトリのサブディレクトリに名前が付けられています。 GPL の根底にある原則の一般的な議論は、ここで見つけることができます。 ヘッダーに提供されるサポート コード file、リンカー スクリプト、およびランタイム ライブラリは独自のコードであり、GPL の対象外です。
このコンパイラは、GCC バージョン 5.4.0、binutils バージョン 2.26 の実装であり、avr-libc バージョン 2.0.0 を使用します。
システム要件
MPLAB XC8 C コンパイラとそれが使用するライセンス ソフトウェアは、以下の 64 ビット バージョンを含むさまざまなオペレーティング システムで利用できます。 Microsoft Windows 10 の Professional エディション。 Ubuntu 18.04; macOS 10.15.5. Windows 用のバイナリはコード署名されています。 Mac OS 用のバイナリはコード署名され、公証されています。
ネットワーク ライセンス サーバーを実行している場合、ライセンス サーバーをホストするために使用できるのは、コンパイラでサポートされているオペレーティング システムを搭載したコンピュータのみです。 xclm バージョン 2.0 では、ネットワーク ライセンス サーバーを Microsoft Windows Server プラットフォームにインストールできますが、オペレーティング システムのサーバー バージョンでライセンス サーバーを実行する必要はありません。
サポートされるデバイス
このコンパイラは、リリース時に知られているすべての 8 ビット AVR MCU デバイスをサポートします。 サポートされているすべてのデバイスのリストについては、(コンパイラの doc ディレクトリにある) を参照してください。 これらは fileまた、各デバイスの構成ビット設定もリストします。
エディションとライセンスのアップグレード
MPLAB XC8 コンパイラは、ライセンス (PRO) またはライセンスなし (無料) の製品としてアクティベートできます。 コンパイラのライセンスを取得するには、アクティベーション キーを購入する必要があります。 ライセンスにより、無料製品と比較してより高いレベルの最適化が可能になります。 ライセンスのないコンパイラは、ライセンスなしで無期限に操作できます。
MPLAB XC8 機能安全コンパイラは、Microchip から購入した機能安全ライセンスで有効にする必要があります。 このライセンスがないと、コンパイラは動作しません。 有効にすると、任意の最適化レベルを選択して、すべてのコンパイラ機能を使用できます。 MPLAB XC 機能安全コンパイラのこのリリースは、ネットワーク サーバー ライセンスをサポートしています。
ライセンスの種類とライセンスを使用したコンパイラのインストールについては、MPLAB XC C コンパイラのインストールとライセンス (DS50002059) ドキュメントを参照してください。
インストールとアクティベーション
このコンパイラに含まれる最新のライセンス マネージャーに関する重要な情報については、移行の問題と制限のセクションも参照してください。
MPLAB IDE を使用している場合は、このツールをインストールする前に、最新の MPLAB X IDE バージョン 5.0 以降をインストールしてください。 コンパイラをインストールする前に IDE を終了します。 .exe (Windows)、.run (Linux)、または app (macOS) コンパイラ インストーラー アプリケーション (XC8-1.00.11403-windows.exe など) を実行し、画面の指示に従います。
デフォルトのインストール ディレクトリをお勧めします。 Linux を使用している場合は、ターミナルを使用して root アカウントからコンパイラをインストールする必要があります。 管理者権限のある macOS アカウントを使用してインストールします。
アクティベーションは、インストールとは別に実行されるようになりました。 詳細については、MPLAB® XC C コンパイラのライセンス マネージャー (DS52059) を参照してください。
評価ライセンスでコンパイラを実行することを選択した場合、評価期間の終了から 14 日以内にコンパイル中に警告が表示されるようになりました。 HPA サブスクリプションの終了から 14 日以内の場合、同じ警告が発行されます。
XC Network License Server は個別のインストーラーであり、シングルユーザー コンパイラー インストーラーには含まれていません。
XC License Manager は、フローティング ネットワーク ライセンスのローミングをサポートするようになりました。 モバイル ユーザーを対象としたこの機能により、フローティング ライセンスを短時間ネットワークから切り離すことができます。 この機能を使用すると、ネットワークから切断しても MPLAB XC コンパイラを使用できます。 この機能の詳細については、XCLM インストールの doc フォルダーを参照してください。 MPLAB X IDE には、ローミングを視覚的に管理するためのライセンス ウィンドウ ([ツール] > [ライセンス]) が含まれています。
インストールの問題の解決
いずれかの Windows オペレーティング システムでコンパイラをインストールする際に問題が発生した場合は、次の提案を試してください。
- 管理者としてインストールを実行します。
- インストーラー アプリケーションのアクセス許可を「フル コントロール」に設定します。 (右クリック file、[プロパティ]、[セキュリティ] タブの順に選択し、ユーザーを選択して、編集します。)
- 一時フォルダーのアクセス許可を「フル コントロール!」に設定します。
temp フォルダーの場所を特定するには、[ファイル名を指定して実行] コマンド (Windows ロゴ キー + R) に %temp% と入力します。 これにより、 file そのディレクトリを示すエクスプローラ ダイアログが表示され、そのフォルダのパスを特定できます。
コンパイラのドキュメント
コンパイラのユーザー ガイドは、スクリーンショットに示されているように、MPLAB X IDE ダッシュボードの青いヘルプ ボタンをクリックするとブラウザで開く HTML ページから開くことができます。
8 ビット AVR ターゲット用にビルドする場合、MPLAB® XC8 C Compiler User's Guide for AVR® MCU には、このアーキテクチャに適用可能なコンパイラ オプションと機能に関する情報が含まれています。
カスタマーサポート
Microchip 社は、このコンパイラ バージョンに関するバグ レポート、提案、またはコメントを歓迎します。 バグ レポートや機能のリクエストは、サポート システム経由で送信してください。
ドキュメントの更新
MPLAB XC8 ドキュメントのオンラインおよび最新バージョンについては、Microchip のオンライン テクニカル ドキュメントにアクセスしてください。 webサイト。
このリリースの新規または更新された AVR ドキュメント:
- MUSL著作権表示
- MPLAB XC C コンパイラ (リビジョン M) のインストールとライセンス
- 組み込みエンジニア向け MPLAB XC8 ユーザー ガイド – AVR MCU (リビジョン A)
- AVR MCU 用 MPLAB XC8 C コンパイラ ユーザー ガイド (リビジョン F)
- Microchip 統合標準ライブラリ リファレンス ガイド (リビジョン B)
Microchip Unified Standard Library Reference Guide では、Microchip Unified Standard Library で定義された関数の動作とインターフェイス、およびライブラリ タイプとマクロの使用目的について説明しています。 この情報の一部は、AVR® MCU の MPLAB® XC8 C Compiler User!s Guide に以前含まれていたものです。 デバイス固有のライブラリ情報は、このコンパイラ ガイドに引き続き含まれています。
8 ビット デバイスと MPLAB XC8 C コンパイラを使い始めたばかりの場合は、MPLAB® XC8 User!s Guide for Embedded Engineers – AVR® MCU (DS50003108) に MPLAB X IDE でのプロジェクトのセットアップとコードの記述に関する情報があります。最初の MPLAB XC8 C プロジェクトに。 このガイドは現在、コンパイラと共に配布されています。
Hamate ユーザー ガイドは、このリリースの docs ディレクトリに含まれています。 このガイドは、スタンドアロン アプリケーションとして Hamate を実行するユーザーを対象としています。
新着情報
以下は、コンパイラが現在サポートしている新しい AVR ターゲット機能です。 サブヘッダーのバージョン番号は、後続の機能をサポートする最初のコンパイラ バージョンを示します。
バージョン 2.40
新しいデバイスのサポート 次の AVR パーツのサポートが利用可能になりました: AT90PWM3、AVR16DD14、AVR16DD20、AVR16DD28、AVR16DD32、AVR32DD14、AVR32DD20、AVR32DD28、AVR32DD32、AVR64EA28、AVR64EA32、および AVR64EA48。
手続き型抽象化の改善 プロシージャル アブストラクション (PA) 最適化ツールが改善され、関数呼び出し命令 (呼び出しリコール) を含むコードを概説できるようになりました。 これは、関数に引数を渡したり、関数から戻り値を取得したりするためにスタックが使用されていない場合にのみ発生します。 スタックは、可変引数リストを使用して関数を呼び出すとき、またはこの目的のために指定されたレジスタよりも多くの引数を取る関数を呼び出すときに使用されます。 この機能は、monk-pa-outline-calls オプションを使用して無効にするか、オブジェクトの手続き型抽象化を完全に無効にすることができます。 file または -monk-pa-on- を使用して機能するfile および -mo.-pa-on-function をそれぞれ使用するか、関数で選択的に nipa 属性 ( nipa 指定子) を使用して
コード カバレッジ マクロ 有効な mcodecov オプションが指定されている場合、コンパイラはマクロ __CODECOV を定義するようになりました。
メモリー予約オプション xc8-cc ドライバーは、AVR ターゲットのビルド時に -mreserve=space@start: end オプションを受け入れるようになりました。 このオプションは、指定されたメモリ範囲をデータ メモリ空間またはプログラム メモリ空間のいずれかに予約し、リンカがこの領域にコードまたはオブジェクトを設定しないようにします。
よりスマートなスマート IO Smart IO 関数にいくつかの改善が加えられました。これには、printf コア コードの全般的な調整、%n 変換指定子の独立したバリアントとしての扱い、必要に応じた vararg pop ルーチンへのリンク、IO 関数の引数の処理に可能な場合はより短いデータ型の使用が含まれます。 、およびフィールド幅と精度の処理で一般的なコードを因数分解します。 これにより、コードとデータが大幅に節約され、IO の実行速度が向上します。
バージョン 2.39 (機能安全リリース)
ネットワーク サーバー ライセンス MPLAB XC8 機能安全コンパイラのこのリリースは、ネットワーク サーバー ライセンスをサポートしています。
バージョン 2.36
なし。
バージョン 2.35
新しいデバイスのサポート 次の AVR 部品に対応しています: ATTINY3224、ATTINY3226、ATTINY3227、AVR64DD14、AVR64DD20、AVR64DD28、および AVR64DD32。
コンテキスト切り替えの改善 新しい -mcall-isr-prologues オプションは、割り込み関数がエントリ時にレジスタを保存する方法と、割り込みルーチンが終了したときにそれらのレジスタを復元する方法を変更します。 -mcall-prologues オプションと同様に機能しますが、割り込み関数 (ISR) にのみ影響します。
さらに改善されたコンテキスト切り替え 新しい -mgas-isr-prologues オプションは、小さな割り込みサービス ルーチン用に生成されるコンテキスト イッチ コードを制御します。 この機能を有効にすると、アセンブラは ISR をスキャンしてレジスタの使用状況を確認し、必要な場合にのみこれらの使用済みレジスタを保存します。
設定可能なフラッシュ マッピング AVR DA および AVR DB ファミリの一部のデバイスには、プログラム メモリのどの 32k セクションをデータ メモリにマップするかを指定する SFR (たとえば、FLMAP) があります。 新しい – mconst-data-in-config-mapped-proem オプションを使用すると、リンカがすべての cons 修飾データを 32 つの XNUMXk セクションに配置し、関連する SFR レジスタを自動的に初期化して、このデータがデータ メモリ空間にマップされるようにすることができます。 、より効果的にアクセスできます。
Microchip 統一標準ライブラリ すべての MPLAB XC コンパイラは、MPLAB XC8 のこのリリースで利用できる Microchip Unified Standard Library を共有します。 MPLAB® XC8 C Compiler User's Guide/または AVR® MCU には、これらの標準関数のドキュメントは含まれていません。 この情報は、Microchip Unified Standard Library Reference Guide に記載されています。 avr-libc によって以前に定義された一部の機能は使用できなくなったことに注意してください。 (Librar を参照):'. 機能性…)
スマートIO 新しい統合ライブラリの一部として、印刷ファミリとスキャン ファミリの IO 関数は、これらの関数がプログラムでどのように使用されるかに基づいて、ビルドごとにカスタム生成されるようになりました。 これにより、プログラムが使用するリソースを大幅に削減できます。
スマート IO アシスト オプション スマート IO 関数 ( printf () や scanf () など) の呼び出しを分析する場合、コンパイラは常に、書式文字列から判断したり、呼び出しに必要な変換指定子を引数から推測したりできるとは限りません。 以前は、コンパイラは常に仮定を行わず、完全に機能する IO 関数が最終的なプログラム イメージにリンクされていることを確認していました。 新しい – msmart-io-format=fmt オプションが追加され、使用法があいまいなスマート IO 関数によって使用される変換指定子をユーザーが代わりにコンパイラに通知できるようになり、過度に長い IO ルーチンがリンクされるのを防ぐことができます。 (詳細については、smart-io-format オプションを参照してください。)
カスタム セクションの配置 以前は、-Wl, –section-start オプションは、リンカー スクリプトが同じ名前の出力セクションを定義したときに、指定されたセクションのみを要求されたアドレスに配置していました。 そうでない場合、セクションはリンカーによって選択されたアドレスに配置され、オプションは基本的に無視されました。 これで、リンカー スクリプトでセクションが定義されていなくても、すべてのカスタム セクションでオプションが有効になります。 ただし、標準セクションの場合は . 文章、 。 BSまたは。 ベスト フィット アロケーターは配置を完全に制御し、オプションは効果がありません。 ユーザーズ ガイドで説明されているように、-Wl, -Tsection=add オプションを使用します。
バージョン 2.32
スタックガイダンス PRO コンパイラ ライセンスで利用できるコンパイラのスタック ガイダンス機能を使用して、プログラムで使用されるスタックの最大深度を推定できます。 プログラムの呼び出しグラフを構築および分析し、各関数のスタック使用量を決定し、レポートを生成します。このレポートから、プログラムが使用するスタックの深さを推測できます。 この機能は、-mchp-stack-usage コマンドライン オプションによって有効になります。 実行後にスタック使用量の概要が出力されます。 詳細なスタック レポートはマップで利用できます file、通常の方法でリクエストできます。
新しいデバイスのサポート ATTINY 427, ATTINY 424, ATTINY 426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32, AVR32DB48.
格納されたデバイスのサポート AVR16DA28、AVR16DA32、および AVR16DA48 の AVR 部品では使用できなくなりました。
バージョン 2.31
なし。
バージョン 2.30
データの初期化を防止する新しいオプション 新しい -mno-data-init ドライバー オプションは、データの初期化と bss セクションのクリアを防止します。 アセンブリ内の do_copy_data および do_clear_bss シンボルの出力を抑制することで機能します。 fileこれにより、リンカーがこれらのルーチンを含めることができなくなります。
強化された最適化 冗長な return 命令の削除、skip-if-bit-is 命令に続く一部のジャンプの削除、手続き型抽象化の改善、およびこのプロセスを反復する機能など、多くの最適化の改善が行われました。
これらの最適化の一部を制御するための追加オプション、特に -f セクション アンカーを使用できるようになりました。これにより、静的オブジェクトへのアクセスを 2 つのシンボルに対して実行できます。 -mpai derations=n。手続き型抽象化の反復回数をデフォルトの XNUMX から変更できます。 -mpa-call cost-shortcall は、リンカが長い呼び出しを緩和できることを期待して、より積極的な手続き型の抽象化を実行します。 この最後のオプションは、基礎となる仮定が実現されていない場合、コード サイズを増加させる可能性があります。
新しいデバイスのサポート 次の AVR パーツのサポートが利用可能です: AVR16DA28、AVR16DA32、
AVR16DA48、AVR32DA28、AVR32DA32、AVR32DA48、AVR64DA28、AVR64DA32、AVR64DA48、AVR64DA64、AVR128DB28、AVR128DB32、AVR128DB48、およびAVR128DB64。
格納されたデバイスのサポート 次の AVR パーツのサポートは終了しました: ATA5272、ATA5790、ATA5790N、ATA5791、ATA5795、ATA6285、ATA6286、ATA6612C、ATA6613C、ATA6614Q、ATA6616C、ATA6617C、および ATA664251。
バージョン 2.29 (機能安全リリース)
ヘッダ file コンパイラ組み込みの場合、コンパイラが MISRA などの言語仕様に確実に準拠できるようにするために、 ヘッダ fileによって自動的に含まれます。 、更新されました。 このヘッダーには、_buil tin _avrnop () や _buil tin_ avr delay_cycles () など、すべての組み込み関数のプロトタイプが含まれています。 一部のビルトインは MISRA に準拠していない場合があります。 これらは、define _Xe_STRICT_MISRA をコンパイラ コマンド ラインに追加することで省略できます。 ビルトインとその宣言は、固定幅型を使用するように更新されました。
バージョン 2.20
新しいデバイスのサポート 次の AVR パーツがサポートされています: ATTINY1624、ATTINY1626、および ATTINY1627。
最適な割り当ての改善 コンパイラのベスト フィット アロケータ (BFA) が改善され、より最適化できる順序でセクションが割り当てられるようになりました。 BFA は、名前付きアドレス空間をサポートし、データの初期化をより適切に処理できるようになりました。
手続き型抽象化の改善 手続き型の抽象化の最適化が、より多くのコード シーケンスで実行されるようになりました。 この最適化によってコード サイズが増加する可能性がある以前の状況は、最適化コードがリンカーのガベージ コレクション プロセスを認識できるようにすることで解決されました。
AVRアセンブラの不在 AVR Assembler は、このディストリビューションには含まれなくなりました。
バージョン 2.19 (機能安全リリース)
なし。
バージョン 2.10
コード カバレッジ このリリースには、プロジェクトのソース コードが実行された範囲の分析を容易にするコード カバレッジ機能が含まれています。 オプション -mcodecov=ram を使用して有効にします。 ハードウェアでプログラムを実行すると、コード カバレッジ情報がデバイスで照合され、コード カバレッジ プラグインを介して MPLAB X IDE に転送されて表示されます。 このプラグインの入手方法については、IDE のドキュメントを参照してください。 #pragma mcodecov を使用して、後続の関数をカバレッジ分析から除外できます。 理想的には、プラグマは file その全体を除外する file カバレッジ分析から。 または、属性 ( (mcodecov) ) を使用して、カバレッジ分析から特定の関数を除外することもできます。
デバイスの説明 files 新しいデバイス file avr chipinfo と呼ばれます。 html は、コンパイラ配布の docs ディレクトリにあります。 これ file コンパイラがサポートするすべてのデバイスを一覧表示します。 デバイス名をクリックすると、そのデバイスで許可されているすべての構成ビット設定/値のペアを示すページが開きます。ampレ。
手続き型の抽象化 アセンブリ コードの共通ブロックをそのブロックの抽出されたコピーへの呼び出しに置き換える、手続き型の抽象化の最適化がコンパイラに追加されました。 これらは別のアプリケーションによって実行され、レベル 2、3 または s の最適化を選択すると、コンパイラによって自動的に呼び出されます。 これらの最適化によりコード サイズは縮小されますが、実行速度とコードのデバッグ性が低下する可能性があります。
手続き型抽象化は、オプション -mno-pa を使用して高い最適化レベルで無効にするか、-mpa を使用して低い最適化レベル (ライセンスに応じて) で有効にすることができます。 オブジェクトに対して無効にすることができます file -mno-pa-on-を使用してfile=fileまたは、function= function で -mno-pa を使用して関数を無効にします。
ソース コード内では、関数の定義で _attribute_ ( (nopa)) を使用するか、属性 ( (nopa, noinline)) に展開される _nopa を使用して関数の手続き型抽象化を無効にすることができ、関数のインライン化が行われなくなります。インラインコードの抽象化があります。
プラグマでのロック ビットのサポート #pragma config を使用して、AVR ロック ビットとその他の構成ビットを指定できるようになりました。 avr チップ情報を確認します。 html file (上記) このプラグマで使用する設定/値のペア。
新しいデバイスのサポート AVR28DA128、AVR64DA128、AVR32DA128、および AVR48DA128 の部品がサポートされています。
バージョン 2.05
あなたのお金のためのより多くのビット このコンパイラとライセンス マネージャーの macOS バージョンは、64 ビット アプリケーションになりました。 これにより、最新バージョンの macOS で警告なしにコンパイラがインストールされ、実行されることが保証されます。
プログラム メモリ内の const オブジェクト コンパイラは、const 修飾されたオブジェクトを RAM に配置するのではなく、プログラム フラッシュ メモリに配置できるようになりました。 const 修飾されたグローバル データがプログラム フラッシュ メモリに格納され、適切なプログラム メモリ命令を使用してこのデータに直接および間接的にアクセスできるように、コンパイラが変更されました。 この新機能はデフォルトで有効になっていますが、-mno-const-data-in-progmem オプションを使用して無効にすることができます。 avrxmega3 および avrtiny アーキテクチャでは、プログラム メモリがこれらのデバイスのデータ アドレス空間にマップされるため、この機能は必要なく、常に無効になっています。
標準で無料 このコンパイラのライセンスのない (無料の) バージョンでは、レベル 2 までの最適化が可能になりました。
ようこそAVRSM2 2 ビット デバイス用の AVRASM8 アセンブラーが XC8 コンパイラー インストーラーに含まれるようになりました。 このアセンブラは XC8 コンパイラでは使用されませんが、手書きのアセンブリ ソースに基づくプロジェクトで使用できます。
新しいデバイスのサポート ATMEGA1608、ATMEGA1609、ATMEGA808、および ATMEGA809 のパーツがサポートされています。
バージョン 2.00
トップレベルのドライバー xc8-cc と呼ばれる新しいドライバーは、以前の avr-gcc ドライバーと xc8 ドライバーの上に位置し、ターゲット デバイスの選択に基づいて適切なコンパイラを呼び出すことができます。 このドライバーは、GCC スタイルのオプションを受け入れます。これらのオプションは、実行中のコンパイラーに変換されるか、パススルーされます。 このドライバは、同様のセマンティクスを持つ同様のオプション セットを任意の AVR または PIC ターゲットで使用できるようにするため、コンパイラを呼び出す方法として推奨されます。 必要に応じて、以前のバージョンのコンパイラで受け入れられた古いスタイルのオプションを使用して、古い avr-gcc ドライバーを直接呼び出すことができます。
共通 C インターフェイス このコンパイラは MPLAB 共通 C インターフェイスに準拠できるようになり、ソース コードをすべての MPLAB XC コンパイラに簡単に移植できるようになりました。 -mext=cci オプションはこの機能を要求し、多くの言語拡張の代替構文を有効にします。
新しい司書ドライバー 新しいライブラリアン ドライバは、以前の PIC ライブラリアン ライブラリアンと AVR avr-ar ライブラリアンの上に配置されます。 このドライバーは、GCC アーカイバー スタイルのオプションを受け入れます。これらのオプションは、実行中のライブラリアンに変換されるか、渡されます。 新しいドライバーにより、同様のセマンティクスを持つ同様のオプション セットを使用して、PIC または AVR ライブラリを作成または操作できます。 file したがって、ライブラリアンを呼び出す推奨される方法です。 レガシー プロジェクトで必要な場合は、以前のバージョンのコンパイラで受け入れられていた古いスタイルのオプションを使用して、以前のライブラリアンを直接呼び出すことができます。
移行の問題
以下は、コンパイラによって異なる方法で処理されるようになった機能です。 これらの変更により、コードをこのコンパイラ バージョンに移植する場合、ソース コードの変更が必要になる場合があります。 サブヘッダーのバージョン番号は、その後の変更をサポートする最初のコンパイラ バージョンを示します。
バージョン 2.40
なし。
バージョン 2.39 (機能安全リリース)
なし。
バージョン 2.36
なし。
バージョン 2.35
string-to base の処理 (XCS-2420) 他の XC コンパイラとの一貫性を確保するために、strtol () などの XC8 string-to 関数は、指定された基数が 36 より大きい場合、入力文字列を変換しようとしなくなり、代わりに errno を EINVAL に設定します。 C 標準では、このベース値を超えた場合の関数の動作は指定されていません。
不適切な速度の最適化 レベル 3 の最適化 (-03) を選択すると、手続き型の抽象化の最適化が有効になっていました。 これらの最適化は、コード速度を犠牲にしてコード サイズを縮小するため、実行すべきではありませんでした。 この最適化レベルを使用するプロジェクトは、このリリースでビルドすると、コード サイズと実行速度に違いが見られる場合があります。
ライブラリ機能 多くの標準 C ライブラリ関数のコードは、現在、Microchip の統合標準ライブラリから取得されています。これは、以前の avr-libc ライブラリによって提供されたものと比較して、状況によっては異なる動作を示す可能性があります。 例えばamplprintf_flt ライブラリ (-print _flt オプション) をリンクして、float 形式指定子の書式付き IO サポートを有効にする必要がなくなりました。 Microchip Unified Standard Library のスマート IO 機能により、このオプションは不要になります。 さらに、フラッシュ内の const 文字列を操作する文字列およびメモリ関数 (例: strcpy_P () など) に _p サフィックス付きルーチンを使用する必要はなくなりました。 const-data-in-program-memory 機能が有効になっている場合、標準の C ルーチン (strcpy() など) は、このようなデータを正しく処理します。
バージョン 2.32
なし。
バージョン 2.31
なし。
バージョン 2.30
なし。
バージョン 2.29 (機能安全リリース)
なし。
バージョン 2.20
DFP レイアウトの変更 コンパイラは、DFP (デバイス ファミリ パック) で使用される別のレイアウトを想定するようになりました。 これは、古い DFP がこのリリースで動作しない可能性があり、古いコンパイラが最新の DFP を使用できないことを意味します。
バージョン 2.19 (機能安全リリース)
なし。
バージョン 2.10
なし
バージョン 2.05
プログラム メモリ内の const オブジェクト デフォルトでは、const 修飾されたオブジェクトはプログラムメモリに配置され、アクセスされることに注意してください (ここで説明されているように) 。 これはプロジェクトのサイズと実行速度に影響しますが、RAM の使用量を減らす必要があります。 この機能は、必要に応じて -mnoconst-data-in-progmem オプションを使用して無効にすることができます。
バージョン 2.00
構成ヒューズ デバイス コンフィギュレーション ヒューズは、config プラグマとそれに続く設定値ペアを使用して、ヒューズの状態を指定するようにプログラムできるようになりました。
#pragma config WDT0N = SET
#pragma config B0DLEVEL = B0DLEVEL_4V3
絶対オブジェクトと関数 CCI _at (アドレス) 指定子を使用して、オブジェクトと関数をメモリ内の特定のアドレスに配置できるようになりました。ampル: #include int foobar at(Ox800100); char at(Ox250) get ID(int offset) { … } この指定子の引数は、最初のバイトまたは命令が配置されるアドレスを表す定数でなければなりません。 RAM アドレスは、0x800000 のオフセットを使用して示されます。 CCI がこの機能を使用できるようにします。
新しい割り込み関数の構文 コンパイラは、C 関数が割り込みハンドラであることを示すために、CCI 割り込み (num) 指定子を受け入れるようになりました。 指定子は割り込み番号を取ります。ampル: #include void interrupt(SPI STC_vect_num) spi Isr(void) { … }
修正された問題
以下は、コンパイラに対して行われた修正です。 これらは、生成されたコードのバグを修正したり、コンパイラの動作をユーザー ガイドで意図または指定されたものに変更したりする可能性があります。 サブヘッダーのバージョン番号は、後続の問題に対する修正が含まれる最初のコンパイラ バージョンを示します。 タイトルの角かっこで囲まれたラベルは、追跡データベースでのその問題の識別です。 これらは、サポートに連絡する必要がある場合に役立ちます。
一部のデバイス固有の問題は、デバイスに関連付けられているデバイス ファミリ パック (DFP) で修正されていることに注意してください。 DFP に加えられた変更に関する情報と最新のパックのダウンロードについては、MPLAB Pack Manager を参照してください。
バージョン 2.40
リラックスしすぎ (XCS-2876) -mrelax オプションを使用すると、コンパイラはいくつかのセクションをまとめて割り当てず、最適なコード サイズが得られませんでした。 これは、新しい MUSL ライブラリを使用したコードまたは弱いシンボルで発生した可能性があります。
警告に記載されているように、マッピング機能が無効になっていません (XCS-2875) cost-data-in-config マップされたプログラム機能は、有効になっている cost-data-in-proem 機能に依存しています。 オプションを使用して cost-data-ipconfig-mapped-proem 機能を明示的に有効にし、cost-data-inprogmem 機能を無効にした場合、cons data-in-config-mapped- proem 機能が自動的に無効になっていましたが、これは完全に正しくありませんでした。 const-data-in-config-mapped-proem 機能は、この状況では完全に無効になりました。
NVMCTRL に正しくアクセスするための DFP の変更 (XCS-2848) AVR64EA デバイスで使用されるランタイム スタートアップ コードは、NVMCTRL レジスタが構成変更保護 (CCP) の下にあることを考慮せず、IO SFR を const-data-in configmapped-proem コンパイラで使用されるページに設定できませんでした。特徴。 AVR-Ex_DFP バージョン 2.2.55 で行われた変更により、ランタイム スタートアップ コードがこのレジスタに正しく書き込むことができます。
フラッシュ マッピングを回避するための DFP の変更 (XCS-2847) AVR128DA28/32/48/64 シリコン エラッタ (DS80000882) で報告されているフラッシュ マッピング デバイス機能に関する問題の回避策が実装されています。 const-data-in-config-mapped-proem コンパイラ機能は、デフォルトでは影響を受けるデバイスに適用されません。この変更は、AVR-Ex_DFP バージョン 2.2.160 で表示されます。
sinhf または coshf でのビルド エラー (XCS-2834) sinhf () または coshf () ライブラリ関数を使用しようとすると、未定義の参照を示すリンク エラーが発生しました。 参照されている不足している関数は、コンパイラの配布に含まれるようになりました。
nopa でのビルド エラー (XCS-2833) as () を使用してアセンブラ名を指定した関数で nopa 属性を使用すると、アセンブラからエラー メッセージが表示されました。 この組み合わせはありえません。
ポインター引数での可変長関数の失敗 (XCS-2755、XCS-2731) 可変数の引数を持つ関数は、cost-data-in-proem 機能が有効になっている場合、可変引数リストで 24 ビット (_memo タイプ) ポインターが渡されることを期待します。 データ メモリへのポインタである引数が 16 ビット オブジェクトとして渡されていたため、最終的に読み取られたときにコード エラーが発生していました。 cons data-in-proem 機能を有効にすると、すべての 16 ビット ポインター引数が 24 ビット ポインターに変換されるようになりました。 strtoxxx ライブラリ関数の失敗 (XCS-2620) const-data-in-proem 機能が有効な場合、プログラム メモリにないソース文字列引数に対して strtoxxx ライブラリ関数の入力パラメータが正しく更新されませんでした。
無効なキャストのアラート (XCS-2612) cost-in-proem 機能が有効で、文字列リテラルのアドレスがデータ アドレス空間に明示的にキャストされている (const 修飾子を削除している) 場合、コンパイラはエラーを発行するようになりました。ample, (uint8 t *) “Hello World!”. const データ ポインターがデータ アドレス空間に明示的にキャストされているときにアドレスが無効である可能性がある場合は、警告が発行されます。
初期化されていない const オブジェクトの配置 (XCS-2408) 初期化されていない const および const volatile オブジェクトが、プログラム メモリのすべてまたは一部をデータ アドレス空間にマップするデバイスのプログラム メモリに配置されていませんでした。 これらのデバイスの場合、そのようなオブジェクトはプログラム メモリに配置されるようになり、他のデバイスとの動作が一致します。
バージョン 2.39 (機能安全リリース)
なし。
バージョン 2.36
遅延時のエラー (XCS-2774) デフォルトのフリー モード最適化でのマイナーな変更により、オペランド式の遅延組み込み関数への一定のフォールディングが防止され、それらが非接触として扱われ、エラーがトリガーされました:時間整数定数。
バージョン 2.35
_at を使用した連続割り当て (XCS-2653) 同じ名前のセクションに複数のオブジェクトを配置し、at () を使用して連続して割り当てると、正しく機能しませんでした。 例えばample: constchararrl [ ] at tri butte ((sect on(“.misses”))) at (Ox50 0 ) = {Oxo , Ox CD} ; cost char arr2[ ] at tri butte ((section(“.my s eke”))) = {Oxen, Ox FE }; arl の直後に arr2 を置くべきでした。
セクション開始アドレスの指定 (XCS-2650) -Wal, –section-start オプションは、指定された開始アドレスにセクションを配置するのに黙って失敗していました。 この問題は、カスタム名のセクションで修正されました。 ただし、 などの標準セクションでは機能しません。 テキストまたは . -Wl、-T オプションを使用して配置する必要がある bss。
リラックス時にリンカーがクラッシュする (XCS-2647) -relax 最適化が有効で、使用可能なメモリに収まらないコードまたはデータ セクションがある場合、リンカがクラッシュしました。 現在、このような状況では、代わりにエラー メッセージが発行されます。
不正な EEPROM アクセス (XCS-2629) -monist-data-in-proem オプションが有効 (デフォルト状態) の場合、leproma _read_ block ルーチンが Mega デバイスで正しく動作せず、EEPROM メモリが正しく読み取られませんでした。
無効なメモリ割り当て (XCS-2593、XCS-2651) -Text または -Tata リンカー オプション (例:amp-Wl ドライバー オプションを使用して渡されたファイル) が指定されている場合、対応するテキスト/データ領域の起点が更新されました。 ただし、終了アドレスはそれに応じて調整されていないため、領域がターゲット デバイスのメモリ範囲を超える可能性がありました。
無効な ATtiny 割り込みコード (XCS-2465) Tatin デバイス用にビルドし、最適化を無効 (-00) にすると、割り込み関数がオペランドが範囲外のアセンブラー メッセージをトリガーした可能性があります。
オプションが渡されない (XCS-2452) カンマで区切られた複数のリンカー オプションで -Wl オプションを使用すると、すべてのリンカー オプションがリンカーに渡されませんでした。
プログラム メモリの間接読み取りエラー (XCS-2450) プログラム メモリへのポインタから XNUMX バイト値を読み取るときに、コンパイラが内部エラー (認識できない insn) を生成する場合がありました。
バージョン 2.32
ライブラリの 2381 回目のアクセスが失敗する (XCS-XNUMX) xc8-ar の Windows バージョンを起動します。 既存のライブラリ アーカイブに exe ライブラリ アーカイバを XNUMX 回アクセスすると、名前を変更できないというエラー メッセージが表示されて失敗する場合があります。
バージョン 2.31
原因不明のコンパイラ障害 (XCS-2367) システムの一時ディレクトリがドット「.」を含むパスに設定されている Windows プラットフォームで実行している場合。 コンパイラが実行に失敗した可能性があります。
バージョン 2.30
アウトライン化後にグローバル ラベルが正しく配置されない (XCS-2299) 手続き型抽象化によって取り除かれたアセンブリ シーケンス内にグローバル ラベルを配置する手書きのアセンブリ コードは、正しく再配置されていない可能性があります。
リラックスしたクラッシュ (XCS-2287) -merlad オプションを使用すると、テール ジャンプ緩和の最適化がセクションの最後にない ret 命令を削除しようとしたときに、リンカがクラッシュする可能性がありました。
ラベルを値として最適化するとクラッシュする (XCS-2282) 「Labels as values」GNU C 言語拡張機能を使用するコードにより、手続き型抽象化の最適化がクラッシュし、アウトライン化された VMA 範囲スパン修正エラーが発生する可能性がありました。
それほど定数ではない (XCS-2271) からのstarts()およびその他の関数のプロトタイプ-monist-data inprogmem 機能が無効になっている場合、返された文字列ポインターに非標準のコスト修飾子を指定しなくなりました。 avrxmega3 および avertin デバイスでは、この機能が永続的に有効になっていることに注意してください。
イニシャライザの消失 (XCS-2269) 翻訳単位内の複数の変数が (セクションまたは属性 ((セクション)) を使用して) セクションに配置され、最初のそのような変数がゼロで初期化されたか、初期化子を持たなかった場合、同じ翻訳単位内の他の変数の初期化子同じセクションに配置されていたものは失われました。
バージョン 2.29 (機能安全リリース)
なし。
バージョン 2.20
長いコマンドのエラー (XCS-1983) AVR ターゲットを使用している場合、コンパイラが停止した可能性があります。 file コマンドラインが非常に大きく、引用符やバックスラッシュなどの特殊文字が含まれている場合、エラーが見つかりませんでした。
割り当てられていないrodataセクション (XCS-1920) AVR リンカは、avrxmega3 および avrtiny アーキテクチャ用にビルドする際に、カスタム rodata セクションにメモリを割り当てることができず、メモリ オーバーラップ エラーが発生する可能性があります。
バージョン 2.19 (機能安全リリース)
なし。
バージョン 2.10
再配置の失敗 (XCS-1891) 最適なアロケータは、リンカーの緩和後にセクション間にメモリの「穴」を残していました。 メモリの断片化は別として、これにより、pc 相対ジャンプまたは呼び出しが範囲外になることに関連するリンカの再配置エラーが発生する可能性が高くなりました。
緩和によって変換されない命令 (XCS-1889) リンカの緩和は、緩和するとターゲットが到達可能になるジャンプまたは呼び出し命令に対して発生しませんでした。
ない機能 (XCSE-388) からのいくつかの定義clock_div_t や clock_prescale_set() などの .
マクロがありません プリプロセッサ マクロ xcs _MODE_、_xcs VERSION、_xc、および xcs は、コンパイラによって自動的に定義されませんでした。 これらが利用可能になりました。
バージョン 2.05
内部コンパイラ エラー (XCS-1822) Windows でビルドすると、コードの最適化時に内部コンパイラ エラーが発生する場合がありました。
RAM オーバーフローが検出されない (XCS-1800、XCS-1796) 使用可能な RAM を超えたプログラムは、状況によってはコンパイラによって検出されず、ランタイム コード エラーが発生していました。
省略フラッシュメモリ(XCS-1792) avrxmega3 および avrtiny デバイスの場合、フラッシュ メモリの一部が MPLAB X IDE によってプログラムされないままになっている可能性があります。
メインの実行に失敗しました (XCS-1788) プログラムにグローバル変数が定義されていない状況では、ランタイム スタートアップ コードが終了せず、main () 関数に到達しませんでした。
誤ったメモリ情報 (XCS-1787) avrxmega3 および avrtiny デバイスの場合、avr-size プログラムは、読み取り専用データがプログラム メモリではなく RAM を消費していると報告していました。
不正なプログラム メモリの読み取り (XCS-1783) プログラム メモリがデータ アドレス空間にマップされ、PROGMEM マクロ/属性を使用してオブジェクトを定義するデバイス用にコンパイルされたプロジェクトは、これらのオブジェクトを間違ったアドレスから読み取った可能性があります。
属性の内部エラー (XCS-1773) でポインター オブジェクトを定義すると、内部エラーが発生しました。
_at () または attribute() トークンは、ポインター名と参照解除された型の間にあります。たとえば、ampル、チャー*
_at ( 0x80015 0) cp; そのようなコードが検出された場合、警告が発行されるようになりました。
main の実行に失敗しました (XCS-1780、XCS-1767、XCS-1754) EEPROM 変数を使用したり、config プラグマを使用してヒューズを定義したりすると、 main () に到達する前に、ランタイム スタートアップ コードで不正なデータ初期化やプログラム実行のロックアップが発生する可能性がありました。
小型デバイスでのヒューズ エラー (XCS-1778、XCS-1742) attiny4/5/9/10/20/40 デバイスのヘッダーで指定されたヒューズの長さが正しくありませんでした fileヒューズを定義したコードをビルドしようとすると、リンカー エラーが発生します。
セグメンテーション違反 (XCS-1777) 断続的なセグメンテーション違反が修正されました。
アセンブラーのクラッシュ (XCS-1761) Ubuntu 18 でコンパイラを実行すると、avr-as アセンブラがクラッシュした可能性があります。
オブジェクトがクリアされない (XCS-1752) 初期化されていない静的ストレージ期間オブジェクトが、ランタイム スタートアップ コードによってクリアされていない可能性があります。
競合するデバイス仕様は無視されました (XCS-1749) 複数のデバイス指定オプションが使用され、異なるデバイスを示した場合、コンパイラはエラーを生成しませんでした。
ヒープによるメモリ破損 (XCS-1748) heap_start シンボルが正しく設定されていなかったため、通常の変数がヒープによって破損する可能性がありました。
リンカー再配置エラー (XCS-1739) コードにターゲットがちょうど 4k バイト離れた rjmp または rcall が含まれている場合、リンカの再配置エラーが発生する可能性がありました。
バージョン 2.00
なし。
既知の問題
コンパイラの動作上の制限事項を次に示します。 これらは、一般的なコーディングの制限、または
ユーザーズマニュアルに含まれる情報からの逸脱。 タイトルの角かっこで囲まれたラベルは、追跡データベースでのその問題の識別です。 これは、サポートに連絡する必要がある場合に役立ちます。 ラベルのない項目は、モード オペランドを説明する制限であり、永続的に有効である可能性があります。
MPLAB X IDE 統合
MPLAB IDE の統合 Compiler を MPLAB IDE から使用する場合は、Compiler をインストールする前に MPLAB IDE をインストールする必要があります。
コード生成
PA メモリ割り当ての失敗 (XCS-2881) 手続き型抽象化オプティマイザーを使用する場合、プログラムが使用可能なスペースに収まる必要がある場合でも、コード サイズがデバイスで使用可能なプログラム メモリの量に近い場合、リンカはメモリ割り当てエラーを報告することがあります。
それほどスマートではない Smart-IO (XCS-2872) コンパイラの smart-io 機能は、coast-data-in-proem 機能が無効になっている場合、またはデバイスのすべてのフラッシュがデータ メモリにマップされている場合、スプリント機能に対して有効ではあるが最適ではないコードを生成します。
さらにスマートではない Smart-IO (XCS-2869) -floe オプションと -fno-buil tin オプションの両方が使用されている場合、コンパイラの smart-io 機能は、有効ではあるが最適ではないコードを生成します。
最適でない読み取り専用データ配置 (XCS-2849) リンカは現在、APPCODE および APPDATA メモリ セクションも、メモリ マップ内の [No-]Read-While-Write 分割も認識していません。 その結果、リンカがメモリの不適切な領域に読み取り専用データを割り当てる可能性がわずかにあります。 coast-data-in-pragma 機能が有効になっている場合、特に coast-data-in-config-mapped-proem 機能も有効になっている場合、データが誤って配置される可能性が高くなります。 これらの機能は、必要に応じて無効にすることができます。
物体 file 処理順序 (XCS-2863) オブジェクトの順序 fileリンカーによって処理される s は、手続き型抽象化の最適化 (-mpa オプション) の使用に基づいて異なる場合があります。 これは、複数のモジュールにわたって弱い関数を定義するコードにのみ影響します。
絶対でのリンカ エラー (XCS-2777) RAM の先頭アドレスでオブジェクトが絶対化されており、初期化されていないオブジェクトも定義されている場合、リンカ エラーが発生する場合があります。
短いウェイクアップ ID (XCS-2775) ATA5700/2 デバイスの場合、PHID0/1 レジスタは 16 ビット幅ではなく、32 ビット幅としてのみ定義されます。
シンボルを呼び出すときにリンカがクラッシュする (XCS-2758) -Wl、–defsym リンカー オプションを使用して定義されたシンボルをソース コードが呼び出すときに、-merlad ドライバー オプションを使用すると、リンカーがクラッシュする可能性があります。
不適切な初期化 (XCS-2679) 一部のグローバル/静的バイト サイズ オブジェクトの初期値がデータ メモリに配置される場所と、変数が実行時にアクセスされる場所との間に矛盾があります。
started が誤って空に設定する (XCS-2652) 示された () による変換対象の文字列に、指数形式の浮動小数点数のように見えるものが含まれており、e 文字の後に予期しない文字がある場合、空のアドレスが指定されている場合は、その後の文字を指します。 e そのものではなく、e そのものです。 例えばample: 述べた(「やったー」、空); x 文字を指す空になります。
不適切な間接関数呼び出し (XCS-2628) 場合によっては、構造体の一部として格納された関数ポインターを介して行われた関数呼び出しが失敗することがあります。
strtof は、2626 進浮動小数点数に対してゼロを返します (XCS-XNUMX) ライブラリ関数 strtof () などと scanf () などは、指数を指定しない XNUMX 進浮動小数点数を常に次のように変換します。
ゼロ。 例えばample: ステーター(“フクロウ”, &empty); 0 ではなく、値 1 を返します。
不正確な Stack Advisor メッセージ (XCS-2542、XCS-2541) 場合によっては、(おそらく alloca() の使用による) 再帰または不確定スタックの使用に関するスタック アドバイザーの警告が発行されません。
重複した割り込みコードによる障害 (XCS-2421) 複数の割り込み関数が同じ本体を持っている場合、コンパイラーは、XNUMX つの割り込み関数の出力を別の割り込み関数呼び出しにする場合があります。 これにより、呼び出しが無効になったすべてのレジスタが不必要に保存され、現在の割り込みハンドラーのエピローグが実行される前でも割り込みが有効になり、コード エラーが発生する可能性があります。
const オブジェクトがプログラム メモリにない (XCS-2408) avrxmega3 および avertins プロジェクトでは、理想化されていない const オブジェクトがデータ メモリに配置されますが、警告によってそれらがプログラム メモリに配置されていることが示されます。 これは、プログラム メモリがデータ メモリ空間にマップされていないデバイスや、初期化されたオブジェクトには影響しません。
無効な DFP パスによる不正な出力 (XCS-2376) コンパイラが無効な DFP パスと「仕様」で呼び出された場合 file が存在する場合、コンパイラは欠落しているデバイス ファミリ パックを報告せず、代わりに「スペック」を選択します。 fileとなり、無効な出力につながる可能性があります。 「スペック」 files は配布された DFP では最新ではない可能性があり、内部コンパイラ テストでのみ使用することを目的としていました。
メモリーオーバーラップが検出されない (XCS-1966) コンパイラは、(at () を介して) アドレスで絶対化されたオブジェクトと、セクション () 指定子を使用して同じアドレスにリンクされている他のオブジェクトのメモリ オーバーラップを検出しません。
ライブラリ関数と _meme の失敗 (XCS-1763) _memo アドレス空間で引数を指定して呼び出した辺縁浮動小数点関数は、失敗する可能性があります。 ライブラリ ルーチンは一部の C 演算子から呼び出されることに注意してください。ample では、次のコードが影響を受けます: return regFloatVar > memxFloatVar;
辺縁系の実装が制限されている (AVRTC-731) ATTiny4/5/9/10/20/40 製品では、limbic での標準 C / Math ライブラリの実装は非常に限られているか、存在しません。
プログラムメモリの制限 (AVRTC-732) 128 kb を超えるプログラム メモリ イメージは、ツールチェーンでサポートされています。 ただし、-relax オプションを使用すると、必要な関数スタブが生成されず、緩和もエラー メッセージも表示されずにリンカーが異常終了することが知られています。
名前空間の制限 (AVRTC-733) 名前付きアドレス空間はツールチェーンでサポートされていますが、ユーザー ガイドの「特殊な型修飾子」セクションに記載されている制限に従います。
タイムゾーン のライブラリ関数は GMT を想定しており、ローカル タイム ゾーンをサポートしていません。したがって、ローカル タイム () は、gummite () と同じ時刻を返します。たとえば、ampル。
カスタマーサポート
file:///アプリケーション/microehipA VR の /xc8/v 2 .40/docs/Read me_X C 8_。 htm
ドキュメント / リソース
![]() |
MICROCHIP MPLAB XC8 C コンパイラ ソフトウェア [pdf] 取扱説明書 MPLAB XC8 C、MPLAB XC8 C コンパイラ ソフトウェア、コンパイラ ソフトウェア、ソフトウェア |