マイクロチップ - ロゴAVR MCU 向け MPLAB XC8 C コンパイラ バージョン 2.39 リリース ノート
ユーザーガイド

このドキュメントには、MICROCHIP AVR デバイスを対象とする場合の MPLAB XC8 C コンパイラに関する重要な情報が含まれています。 このソフトウェアを実行する前に、必ずお読みください。
8 ビット PIC デバイス用のコンパイラを使用している場合は、MPLAB XC8 C コンパイラ リリース ノートの PIC ドキュメントを参照してください。

以上view

1.1. はじめに
Microchip MPLAB® XC8 C コンパイラのこのリリースは、このコンパイラの v2.36 リリースに基づく機能安全コンパイラであり、ネットワーク サーバー ライセンスをサポートするようになりました。
1.2. リリース日
このコンパイラ バージョンの公式リリース日は 27 年 2022 月 XNUMX 日です。
1.3。 前のバージョン
以前の MPLAB XC8 C コンパイラ バージョンは 2.36 で、25 年 2022 月 XNUMX 日にリリースされました。
1.4。 機能安全マニュアル
MPLAB XC コンパイラの機能安全マニュアルは、機能安全ライセンスを購入するとドキュメント パッケージに含まれています。
1.5。 コンポーネント ライセンスとバージョン® he MPLAB
XC8 C Compiler for AVR MCU ツールは、GNU General Public License (GPL) の下で作成および配布されます。これは、そのソース コードが自由に配布され、一般に公開されることを意味します。
GNU GPL に基づくツールのソース コードは、Microchip の Web サイトから個別にダウンロードできます。 webサイト。 install license.txt avr/doc ディレクトリのサブディレクトリにある という名前のファイルで、GNU GPL を読むことができます。 GPL の根底にある原則の一般的な議論は、ここで見つけることができます。
ヘッダー ファイル、リンカー スクリプト、およびランタイム ライブラリに提供されるサポート コードは独自のコードであり、GPL の対象外です。
このコンパイラは、GCC バージョン 5.4.0、binutils バージョン 2.26 の実装であり、avr-libc バージョン 2.0.0 を使用します。
1.6. システム要件
MPLAB XC8 C コンパイラとそれが使用するライセンス ソフトウェアは、以下の 64 ビット バージョンを含むさまざまなオペレーティング システムで利用できます。 Microsoft Windows 10 の Professional エディション。 Ubuntu 18.04; macOS 10.15.5. Windows 用のバイナリはコード署名されています。 macOS のバイナリはコード署名され、公証されています。
ネットワーク ライセンス サーバーを実行している場合、ライセンス サーバーをホストするために使用できるのは、コンパイラでサポートされているオペレーティング システムを搭載したコンピュータのみです。 xclm バージョン 2.0 では、ネットワーク ライセンス サーバーを Microsoft Windows Server プラットフォームにインストールできますが、オペレーティング システムのサーバー バージョンでライセンス サーバーを実行する必要はありません。
1.7。 サポートされているデバイス
このコンパイラは、リリース時に知られているすべての 8 ビット AVR MCU デバイスをサポートします。 (コンパイラの avr_chipinfo.html ディレクトリ) を参照して、サポートされているすべてのデバイスのリストを確認してください。 これらのファイルには、各デバイスの構成ビット doc 設定もリストされています。
1.8。 エディションとライセンスのアップグレード
MPLAB XC8 コンパイラは、ライセンス (PRO) またはライセンスなし (無料) の製品としてアクティベートできます。 コンパイラのライセンスを取得するには、アクティベーション キーを購入する必要があります。 ライセンスにより、無料製品と比較してより高いレベルの最適化が可能になります。 ライセンスのないコンパイラは、ライセンスなしで無制限に操作できます。
MPLAB XC8 機能安全コンパイラは、Microchip から購入した機能安全ライセンスで有効にする必要があります。 このライセンスがないと、コンパイラは動作しません。 有効にすると、任意の最適化レベルを選択して、すべてのコンパイラ機能を使用できます。 MPLAB XC 機能安全のこのリリース
コンパイラは、ネットワーク サーバー ライセンスをサポートしています。
ライセンスの種類とライセンスを使用したコンパイラのインストールについては、MPLAB XC C コンパイラのインストールとライセンス (DS50002059) ドキュメントを参照してください。
1.9.インストールとアクティベーション
このコンパイラに含まれる最新のライセンス マネージャーに関する重要な情報については、移行の問題と制限のセクションも参照してください。
MPLAB IDE を使用している場合は、このツールをインストールする前に、最新の MPLAB X IDE バージョン 5.0 以降をインストールしてください。 コンパイラをインストールする前に IDE を終了します。 (Windows)、(Linux)、または (macOS) .exe .run .app コンパイラ インストーラー アプリケーションを実行し、画面の指示に従います。
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 には、ローミングを視覚的に管理するためのライセンス ウィンドウ ([ツール] > [ライセンス]) が含まれています。

1.9.1. インストールの問題の解決
Windows オペレーティング システムのいずれかにコンパイラをインストールする際に問題が発生した場合は、次の提案を試してください。

  • 管理者としてインストールを実行します。
  • インストーラー アプリケーションのアクセス許可を「フル コントロール」に設定します。 (ファイルを右クリックし、[プロパティ]、[セキュリティ] タブを選択し、[ユーザー] を選択して、編集します。)
  • 一時フォルダーのアクセス許可を「フル コントロール!」に設定します。
  • temp フォルダーの場所を特定するには、[ファイル名を指定して実行] コマンド (Windows ロゴ キー + R) を入力します。 %temp% これにより、そのディレクトリを示すファイル エクスプローラ ダイアログが開き、そのフォルダのパスを特定できます。

1.10。 コンパイラのドキュメント

MICROCHIP MPLAB XC8 C コンパイラ バージョン 2.39 AVR MCU 向けリリース ノート - ドキュメントコンパイラのユーザー ガイドは、スクリーンショットに示されているように、MPLAB X IDE ダッシュボードの青いヘルプ ボタンをクリックするとブラウザで開く HTML ページから開くことができます。
8 ビット AVR ターゲット用にビルドする場合は、MPLAB® XC8 C Compiler User's® Guide for AVR
MCU には、このアーキテクチャに適用可能なコンパイラ オプションと機能に関する情報が含まれています。

1.11. カスタマーサポート
Microchip 社は、このコンパイラ バージョンに関するバグ レポート、提案、またはコメントを歓迎します。 バグ レポートや機能のリクエストは、サポート システム経由で送信してください。

ドキュメントの更新

MPLAB XC8 ドキュメントのオンラインおよび最新バージョンについては、Microchip のオンライン サイトにアクセスしてください。
技術文書 webサイト。
このリリースの新規または更新された AVR ドキュメント:
MPLAB® XC C コンパイラ (DS50002059) リビジョン L のインストールとライセンス
Microchip 統一標準ライブラリ リファレンス ガイドでは、Microchip 統一標準ライブラリで定義された関数の動作とインターフェイス、およびライブラリ タイプとマクロの使用目的について説明しています。 この情報の一部は、AVR 用の MPLA® XC8 C Compiler User!s Guide® に以前含まれていたものです。
MCU。 デバイス固有のライブラリ情報は、このコンパイラ ガイドに引き続き含まれています。
Hexmate ユーザー ガイドは、このリリースのディレクトリに含まれています。 このガイドは、スタンドアロン アプリケーションとして Hexmate を実行しているドキュメントを対象としています。
以下のセクションでは、コンパイラに同梱されているユーザーズ ガイドに記載されている内容に対する修正と追加情報を提供します。

2.1. smart-io-format オプション
-msmart-io-format=fmt fmt オプション ( は書式設定された IO 変換仕様を含む文字列) は、リストされた仕様がスマート IO 関数によって使用されることをコンパイラに通知します。
コード サイズを削減するために、コンパイラは、スマート IO 関数の印刷およびスキャン ファミリに関連付けられたライブラリ コードを、これらの関数へのすべての呼び出しで照合された書式文字列に存在する変換仕様に基づいてカスタマイズします。 この機能は完全に自動化されており、無効にすることはできません。
状況によっては、コンパイラーがフォーマットされた IO 関数呼び出しから使用情報を判別できないことがあります。 このオプションが使用されている場合、これらの関数に必要な変換仕様は文字列から取得されます。 それ以外の場合、コンパイラは -msmart-io-format=fmt fmt 関数がどのように使用されるかについて想定せず、完全に機能するフォーマットされた IO 関数が最終的なプログラム イメージにリンクされるようにします。
例えばamp次のスマート IO 関数の呼び出しを検討してください。

vscanf(“%d:%li”, va_​​list1);
vprintf(“%-s%d”, va_​​list2);
vprintf(fmt1, va_​​list3);// あいまいな使い方
vscanf(fmt2, va_​​list4);// あいまいな使い方

最後の 0 つの呼び出しを処理するとき、コンパイラは書式文字列と引数のどちらからも使用情報を推測できません。 このような場合、-msmart-io-format オプションを使用すると、より最適な形式の IXNUMX 関数を生成できる可能性があり、プログラムのコード サイズが削減されます。 例えばampfmtl と fmt2 が指すフォーマット文字列が「%d」、「%i」、および「%s」変換指定子のみを集合的に使用する場合、-msmart-io-format=fmt=”%d%i%s 」オプションを発行する必要があります。

色合いの文字列には、フラグや修飾子 (例:ampル「%-13. 91s」)、使用法があいまいな関数によって使用されるものを正確に反映する必要があります。 に仕様が含まれていない 少し フォーマットされた I0 関数で使用されている引数を使用すると、コード エラーが発生する可能性があります。
fmt が空の文字列であるか、識別可能な変換仕様が含まれていない場合、警告が発行され、完全に機能する形式の I0 関数が最終的なプログラム イメージにリンクされます。
このオプションは、コマンド ラインで複数回使用できます。 各オプションで使用する変換仕様を蓄積しています。

2.2. omit-frame-pointer オプション
–f omit-frame-pointer オプションは、スタック ポインターを直接使用してスタック上のオブジェクトにアクセスし、可能であれば、フレーム レジスターを保存、初期化、および復元するコードを省略するようにコンパイラーに指示します。 ゼロ以外のすべての最適化レベルで自動的に有効になります。
-fno-omit-frame-pointer を使用してオプションを無効にすると、最適化されたコードのデバッグに役立つ場合があります。 ただし、このオプションは、フレーム ポインターが常に使用されることを保証するものではありません。

2.3. unroll-loops オプション
– funrol I-loops および -(unroll-all-loops オプションは、ループ内の分岐遅延を除去しようとする速度重視の最適化を制御します。通常、展開されたループは、生成されたコードの実行速度を向上させますが、コード サイズが大きくなります。
–funrol I-loops オプションは、コンパイル時またはコードがループに入るときに反復回数を決定できるループを展開します。 -funroll-all-loops オプションはより積極的で、反復回数が不明な場合でもすべてのループを展開します。 通常、-funroll 1-loops オプションよりも実行速度を向上させる効果は低くなります。

2.4. 太い糸オブジェクト オプション
–f fat-1 to-objects オプションは、コンパイラが脂肪オブジェクトを生成するように要求します。 file両方を含む
オブジェクト コードと GIMPLE (GCC の内部表現の XNUMX つ) であり、一意の ELF セクションに書き込まれます。 そのようなオブジェクト files は、-flto オプションで制御される標準のリンク時オプティマイザーを使用するプロジェクトと使用しないプロジェクトにリンクできるライブラリ コードに役立ちます。
このオプションの – fno-fat-lto-objects 形式 (オプションが指定されていない場合のデフォルト) は、オブジェクト コードの object への組み込みを抑制します。 files により、ビルドが高速化されます。 しかし、そのようなオブジェクト files は常に、標準のリンク時オプティマイザを使用してリンクする必要があります。

2.5。 イトパーティションオプション
– flto-partiti オン=a いごり オプションは、オブジェクトの分割に使用されるアルゴリズムを制御します file■ リンク時オプティマイザの実行時。 引数 none は、パーティショニングを完全に無効にし、プログラム全体の分析 (WPA) フェーズからリンク時の最適化ステップを直接実行します。 この操作モードでは、最適な結果が得られますが、コンパイラのメモリ要件が大きくなり、ビルド時間が長くなりますが、小さなプログラムでは問題になることはほとんどありません。 オブジェクトの分割 fileビルドのパフォーマンスを向上させることができます。 引数 one は、正確に 1 つのパーティションを使用する必要があることを指定し、引数 ltoXNUMX は、元のソースによって指示されたものをミラーリングするパーティション分割を指定します file秒。 デフォルトの引数はbalancedで、可能な場合、同じサイズのチャンクに分割することを指定します。

2.6. セクション 3.6.11 マップされたリンカー オプションへの追加
-wl、 –セクション開始 =秒 ション=アドレス -wl コンパイラー・ドライバー・オプションを使用してアクセスできる、一般的に使用されるリンカー・オプションの表にはありません。 このオプションを使用すると、指定したアドレスにカスタム名のセクションを配置できます。 ( . data, などの標準セクションの配置には使用できません。 . BS、 . text)、-wl、-'r オプションを使用して配置する必要があります。

2.7. セクション 4.14.2 の変更と割り当てられたセクションのリンクの修正
ユーザー ガイドのこのセクションに記載されている情報とは異なり、このリリースでコンパイラに加えられた変更により、カスタム セクションは -w1, -宗派 イオン- 開始=セクション=acicir オプションで、リンカー スクリプトを変更する必要はありません。

新着情報

以下は、コンパイラが現在サポートしている新しい AVR ターゲット機能です。 サブヘッダーのバージョン番号は、後続の機能をサポートする最初のコンパイラ バージョンを示します。

3.1. バージョン 2.39 (機能安全リリース)
ネットワーク サーバー ライセンス MPLAB XC8 機能安全コンパイラのこのリリースは、ネットワーク サーバー ライセンスをサポートしています。

3.2. バージョン 2.36 
なし。
3.3. バージョン 2.35 
新しいデバイス サポート サポートは、次の AVR 部品で利用できます: ATTINY3224、ATTINY3226、ATTINY3227、AVR64DD14、AVR64DD20、AVR64DD28、および AVR64DD32。
コンテキスト切り替えの改善 新しい -mcall-isr-prologues オプションは、割り込み関数がエントリ時にレジスタを保存する方法と、割り込みルーチンが終了したときにそれらのレジスタを復元する方法を変更します。 -mcall-prologues オプションと同様に機能しますが、割り込み関数 (ISR) にのみ影響します。
さらに改善されたコンテキスト切り替え 新しい -mgas-isr-プロローグ オプションは、小さな割り込みサービス ルーチン用に生成されるコンテキスト スイッチ コードを制御します。 この機能を有効にすると、アセンブラは ISR をスキャンしてレジスタの使用状況を確認し、必要な場合にのみこれらの使用済みレジスタを保存します。
構成可能なフラッシュ マッピング AVR DA および AVR DB ファミリの一部のデバイスは、プログラム メモリのどの 32k セクションをデータ メモリにマップするかを指定する SFR (FLMAP など) を備えています。 新しい – mconst-data-in-config-mapped-progmem オプションを使用すると、リンカが const 修飾されたすべてのデータを 32 つの XNUMXk セクションに配置し、関連する SFR レジスタを自動的に初期化して、このデータがデータにマップされるようにすることができます。より効果的にアクセスできるメモリ空間。

Microchip 統合標準ライブラリ すべて MPLAB XC コンパイラは、MPLAB XC8 のこのリリースで利用できる Microchip Unified Standard Library を共有します。 の MPLAB® XC8 C コンパイラ
AVR のユーザーズ ガイド® マイレージ これらの標準関数のドキュメントは含まれなくなりました。 この情報は、 マイクロチップ統合標準ライブラリ リファレンス ガイド。 avr-libc によって以前に定義された一部の機能は使用できなくなったことに注意してください。 (見る ライブラリ機能。)
スマート I0 新しい統合ライブラリの一部として、printf および scanf ファミリの JO 関数は、これらの関数がプログラムでどのように使用されているかに基づいて、ビルドごとにカスタム生成されるようになりました。 これにより、プログラムが使用するリソースを大幅に削減できます。
スマート I0 支援オプション スマート I0 関数 (printf () や scanf () など) の呼び出しを分析する場合、コンパイラは、呼び出しに必要な変換指定子を常に書式文字列から判断したり、引数から推測したりできるとは限りません。 以前は、コンパイラは常に仮定を行わず、完全に機能する 10 個の関数が最終的なプログラム イメージにリンクされていることを確認していました。 新しい – msma rt-io- format=fmt オプションが追加されました。これにより、代わりに、使用法があいまいなスマート I0 関数で使用される変換指定子をユーザーがコンパイラに通知できるようになり、過度に長い 10 ルーチンがリンクされるのを防ぐことができます。 (見る スマート-io-フォーマット 詳細についてはオプションをご覧ください。)
カスタム セクションの配置 以前は、-W1, –section-start オプションは、リンカー スクリプトが同じ名前の出力セクションを定義したときに、指定されたセクションのみを要求されたアドレスに配置していました。 そうでない場合、セクションはリンカーによって選択されたアドレスに配置され、オプションは基本的に無視されました。 これで、リンカー スクリプトでセクションが定義されていなくても、すべてのカスタム セクションでオプションが有効になります。 ただし、標準セクションの場合は . 文章、 。 bss または 。 データ、 ベスト フィット アロケータは配置を完全に制御でき、オプションは効果がありません。 -wl を使用します。 -セクション=アドレス オプションについては、ユーザーズ ガイドに記載されています。

3.4. バージョン 2.32
スタック ガイダンス PRO コンパイラ ライセンスで利用できるコンパイラのスタック ガイダンス機能を使用して、プログラムで使用されるスタックの最大深度を推定できます。 プログラムの呼び出しグラフを構築および分析し、各関数のスタック使用量を決定し、レポートを生成します。このレポートから、プログラムが使用するスタックの深さを推測できます。
この機能は、-mchp-stack-usage コマンドライン オプションによって有効になります。 実行後にスタック使用量の概要が出力されます。 詳細なスタック レポートはマップで利用できます file、通常の方法でリクエストできます。
新しいデバイス サポート サポートは、次の AVR パーツで利用できます: ATTINY427、ATTINY424、ATTINY426、ATTINY827、ATTNY824、ATTINY826、AVR32DB32、AVR64DB48、AVR64DB64、AVR64DB28、AVR32DB28、AVR64DB32、および AVR32DB48。
撤回されたデバイスのサポート 次の AVR パーツのサポートは利用できなくなりました: AVR 16DA28、AVR16DA32、および AVR16DA48。

3.5。 バージョン 2.31 なし。
3.6. バージョン 2.30
データの初期化を防止する新しいオプション 新しい -mno-data-init ドライバー オプションは、データの初期化と bss セクションのクリアを防止します。 アセンブリ内の do_copy_data および do_clear_bss シンボルの出力を抑制することで機能します fileこれにより、リンカーがこれらのルーチンを含めることができなくなります。
強化された最適化 冗長な return 命令の削除、skip-if-bit-is 命令に続く一部のジャンプの削除、手続き型抽象化の改善、およびこのプロセスを反復する機能など、多くの最適化の改善が行われました。
これらの最適化の一部を制御する追加オプション、特に -fsection-anchors を使用できるようになりました。これにより、静的オブジェクトへのアクセスを XNUMX つのシンボルに対して実行できます。 -mpa-反復 =n、 これにより、手続き型抽象化の反復回数をデフォルトの 2 から変更できます。 -mpa-callcost-shortcal 1 は、リンカーが長い呼び出しを緩和できることを期待して、より積極的な手続き型の抽​​象化を実行します。 この最後のオプションは、基礎となる仮定が実現されていない場合、コード サイズを増加させる可能性があります。
新しい デバイスのサポート 次の AVR パーツに対応しています: AVR16DA28、AVR16DA32、AVR16DA48、AVR32DA28、AVR32DA32、AVR32DA48、AVR64DA28、AVR64DA32、AVR64DA48、AVR64DA64、AVR128DB28、AVR 128DB 32、AVR128DB48、および AVR128DB64。
格納されたデバイスのサポート ATA5272、ATA5790、ATA5790N、ATA5791、ATA5795、ATA6285、ATA6286、ATA6612C、ATA6613C、ATA6614Q、ATA6616C、ATA6617C、および ATA664251 の AVR パーツのサポートは終了しました。

3.7. バージョン 2.29 (機能安全リリース)
ヘッダ file コンパイラ バントイン用 コンパイラが MISRA などの言語仕様に確実に準拠できるようにするために、 ヘッダ fileによって自動的に含まれます。 、更新されました。 このヘッダーには、組み込みの in_avr_nop ( ) や _builtin_avr_delay_cycles () など、すべての組み込み関数のプロトタイプが含まれています。 一部のビルトインは MISRA に準拠していない場合があります。 これらは、define XC_STRICT MISRA をコンパイラ コマンド ラインに追加することで省略できます。 ビルトインとその宣言は、固定幅型を使用するように更新されました。

3.8. バージョン 2.20
新しい デバイスのサポート ATTINY 1624、ATTINY1626、および ATTINY 1 627 の AVR パーツがサポートされています。
最適な割り当ての改善 コンパイラのベスト フィット アロケータ (BFA) が改善され、より最適化できる順序でセクションが割り当てられるようになりました。 BFA は、名前付きアドレス空間をサポートし、データの初期化をより適切に処理できるようになりました。
手続き型抽象化の改善 手続き型の抽​​象化の最適化は、より多くのコード シーケンスで実行されるようになりました。 この最適化によってコード サイズが増加する可能性がある以前の状況は、最適化コードがリンカーのガベージ コレクション プロセスを認識できるようにすることで解決されました。
AVRアセンブラの不在 AVR Assembler は、このディストリビューションには含まれなくなりました。 3.9。 バージョン 2.19 (機能安全 リリース)
なし。
3.10. バージョン 2.10
コードカバレッジ このリリースには、プロジェクトのソース コードが実行された範囲の分析を容易にするコード カバレッジ機能が含まれています。 オプション -mcodecov=ram を使用して有効にします。 ハードウェアでプログラムを実行すると、コード カバレッジ情報がデバイスで照合され、コード カバレッジ プラグインを介して MPLAB X IDE に転送されて表示されます。 このプラグインの入手方法については、IDE のドキュメントを参照してください。
#pragma nocodecov を使用して、後続の関数をカバレッジ分析から除外できます。 理想的には、プラグマは file その全体を除外する file カバレッジ分析から。 または、_attribute_ ( (nocodecov)) を使用して、カバレッジ分析から特定の関数を除外することもできます。
デバイスの説明 files 新しいデバイス file avr_chipinfo.html という名前のファイルは、の docs ディレクトリにあります。

コンパイラの配布。 これ file コンパイラがサポートするすべてのデバイスを一覧表示します。 デバイス名をクリックすると、そのデバイスで許可されているすべての構成ビット設定/値のペアを示すページが開きます。ampレ。

手続き型の抽​​象化 アセンブリ コードの共通ブロックをそのブロックの抽出されたコピーへの呼び出しに置き換える、手続き型の抽​​象化の最適化がコンパイラに追加されました。 これらは別のアプリケーションによって実行され、レベル 2、3、または s 最適化。 これらの最適化によりコード サイズは縮小されますが、実行速度とコードのデバッグ性が低下する可能性があります。
手続き型抽象化は、オプション -mno-pa を使用して高い最適化レベルで無効にするか、-mpa を使用して低い最適化レベル (ライセンスに応じて) で有効にすることができます。 オブジェクトに対して無効にすることができます file -mno-pa-on-f ile= の使用file名前、または -mno-pa-onfunotion=f を使用して機能を無効にする 機能。
ソース コード内で、関数の定義で attribute_ ( (nopa) ) を使用するか、_attribute_ ( (nopa, noinline) ) に展開される nopa を使用して、関数の手続き型抽象化を無効にすることができ、関数のインライン化が行われなくなります。インラインコードの抽象化があります。
プラグマでのロック ビットのサポート #pragma config を使用して、AVR ロック ビットとその他の構成ビットを指定できるようになりました。 avr_chipinfo.html を確認してください file (上記) このプラグマで使用する設定/値のペア。
新しい デバイスのサポート AVR28DAl28、AVR64DAl28、AVR32DAl28、および AVR48DAl28 の部品がサポートされています。

3.11. バージョン 2.05
あなたのお金のためのより多くのビット このコンパイラとライセンス マネージャーの macOS バージョンは、64 ビット アプリケーションになりました。 これにより、最新バージョンの macOS で警告なしにコンパイラがインストールされ、実行されることが保証されます。
プログラム メモリ内の const オブジェクト コンパイラは、const 修飾されたオブジェクトを RAM に配置するのではなく、プログラム フラッシュ メモリに配置できるようになりました。 cons t 修飾されたグローバル データがプログラム フラッシュ メモリに格納され、適切なプログラム メモリ命令を使用してこのデータに直接および間接的にアクセスできるように、コンパイラが変更されました。 この新機能はデフォルトで有効になっていますが、-mno-const-data-in-progmem オプションを使用して無効にすることができます。 avrxmega3 および avrtiny アーキテクチャでは、プログラム メモリがこれらのデバイスのデータ アドレス空間にマップされるため、この機能は必要なく、常に無効になっています。
標準で無料 このコンパイラのライセンスのない (無料の) バージョンでは、レベル 2 までの最適化が可能になりました。
ようこそAVRSM2 2 ビット デバイス用の AVRASM8 アセンブラーが XC8 コンパイラー インストーラーに含まれるようになりました。 このアセンブラは XC8 コンパイラでは使用されませんが、手書きのアセンブリ ソースに基づくプロジェクトで使用できます。
新しい デバイスのサポート ATMEGA1608、ATMEGA 1609、ATMEGA808、および ATMEGA809 のパーツがサポートされています。

3.12. バージョン 2.00
トップレベルのドライバー xc8 -cc と呼ばれる新しいドライバーは、以前の avr-gcc ドライバーと xc8 ドライバーの上にあり、ターゲット デバイスの選択に基づいて適切なコンパイラを呼び出すことができます。 このドライバーは、GCC スタイルのオプションを受け入れます。これらのオプションは、実行中のコンパイラーに変換されるか、パススルーされます。 このドライバは、同様のセマンティクスを持つ同様のオプション セットを任意の AVR または PIC ターゲットで使用できるようにするため、コンパイラを呼び出す方法として推奨されます。 必要に応じて、以前のバージョンのコンパイラで受け入れられた古いスタイルのオプションを使用して、古い avr-gcc ドライバーを直接呼び出すことができます。
共通 C インターフェイス このコンパイラは MPLAB 共通 C インターフェイスに準拠できるようになり、ソース コードをすべての MPLAB XC コンパイラに簡単に移植できるようになりました。 -mext=cci オプションはこの機能を要求し、多くの言語拡張の代替構文を有効にします。
新司書ドライバーA 新しいライブラリアン ドライバは、以前の PIC ライブラリアン ライブラリアンと AVR avr-ar ライブラリアンの上に配置されます。 このドライバーは、GCC アーカイバー スタイルのオプションを受け入れます。これらのオプションは、実行中のライブラリアンに変換されるか、渡されます。 新しいドライバーにより、同様のセマンティクスを持つ同様のオプション セットを使用して、PIC または AVR ライブラリを作成または操作できます。 file したがって、ライブラリアンを呼び出す推奨される方法です。 レガシー プロジェクトで必要な場合は、以前のバージョンのコンパイラで受け入れられていた古いスタイルのオプションを使用して、以前のライブラリアンを直接呼び出すことができます。

移行の問題

以下は、コンパイラによって異なる方法で処理されるようになった機能です。 これらの変更により、コードをこのコンパイラ バージョンに移植する場合、ソース コードの変更が必要になる場合があります。 サブヘッダーのバージョン番号は、その後の変更をサポートする最初のコンパイラ バージョンを示します。

4.1. バージョン 2.39 (機能安全リリース)
なし。
4.2. バージョン 2.36 なし。
4.3.バージョン 2.35
string-to ベースの処理 (XC8-2420) 他の XC コンパイラとの一貫性を確保するために、XC8 の string-to strtol() などの関数は、指定された基数が 36 より大きい場合、入力文字列を変換しようとしなくなり、代わりに errno を EINVAL に設定します。 C 標準では、次の動作は指定されていません。 この基準値を超えたときの機能。
不適切な速度の最適化 レベル 3 の最適化 (-03) を選択すると、手続き型の抽​​象化の最適化が有効になっていました。 これらの最適化は、コード速度を犠牲にしてコード サイズを縮小するため、実行すべきではありませんでした。 この最適化レベルを使用するプロジェクトは、このリリースでビルドすると、コード サイズと実行速度に違いが見られる場合があります。
ライブラリ機能 多くの標準 C ライブラリ関数のコードは、現在、Microchip の統合標準ライブラリから取得されています。これは、以前の avr-libc ライブラリによって提供されたものと比較して、状況によっては異なる動作を示す可能性があります。 例えばampファイルでは、1printf flt ライブラリ (-1printf_flt オプション) をリンクして、float 形式指定子の書式付き I0 サポートを有効にする必要がなくなりました。 Microchip Unified Standard Library の smart 10 機能により、このオプションは不要になります。 さらに、フラッシュ内の const 文字列を操作する文字列およびメモリ関数 (例: strcpy_P ( ) など) に _P サフィックス付きルーチンを使用する必要はなくなりました。 const-data-in-program-memory 機能が有効になっている場合、標準 C ルーチン (例: strcpy 0 ) はそのようなデータで正しく動作します。

4.4. バージョン 2.32
なし。
4.5. バージョン 2.31
なし。
4.6. バージョン 2.30
なし。
4.1. バージョン 2.29 (機能安全リリース)
なし。
4.2. バージョン 2.20
変更された DFP レイアウト コンパイラは、DFP (デバイス ファミリ パック) で使用される別のレイアウトを想定するようになりました。 これは、古い DFP がこのリリースで動作しない可能性があり、古いコンパイラが最新の DFP を使用できないことを意味します。

4.3. バージョン 2.19 (機能安全リリース)
なし。
4.4. バージョン 2.10 なし
4.5. バージョン 2.05
プログラム メモリ内の const オブジェクト デフォルトでは、const 修飾されたオブジェクトはプログラム メモリ内に配置され、アクセスされることに注意してください (前述のとおり)。 これはプロジェクトのサイズと実行速度に影響しますが、RAM の使用量を減らす必要があります。 この機能は、必要に応じて -mnocons t-data-in-progmem オプションを使用して無効にすることができます。

4.6. バージョン 2.00
構成ヒューズ デバイス構成ヒューズは、config プラグマの後にヒューズの状態を指定するための設定値のペアを使用してプログラムできるようになりました。例: #pragma config WDTON = SET #pragma config BODLEVEL = BODLEVEL_4V3
絶対オブジェクトと関数 CCI _ を使用して、オブジェクトと関数をメモリ内の特定のアドレスに配置できるようになりました。at (住所) 指定子、例amp上:
ifinclude
(0)0300100) の int foobar;
char at(0x250) getID(int offset) ( この指定子の引数は、最初のバイトまたは命令が配置されるアドレスを表す定数でなければなりません。RAM アドレスは、800000xXNUMX のオフセットを使用して示されます。CCI を有効にしてこの機能を使用します。
新しい割り込み関数の構文 コンパイラ CCI _interrupt を受け入れるようになりました (番号) C 関数が割り込みハンドラであることを示す指定子。 指定子は割り込み番号を取ります。amp上:

修正された問題

以下は、コンパイラに加えられた修正です。 これらは、生成されたコードのバグを修正したり、コンパイラの動作をユーザー ガイドで意図または指定されたものに変更したりする可能性があります。 サブヘッダーのバージョン番号は、後続の問題に対する修正が含まれる最初のコンパイラ バージョンを示します。 タイトルの角かっこで囲まれたラベルは、追跡データベースでのその問題の識別です。 これらは、サポートに連絡する必要がある場合に役立ちます。
一部のデバイス固有の問題は、Device Family Pack (DR) で修正されていることに注意してください。)) デバイスに関連付けられています。 DFP に加えられた変更に関する情報と最新のパックのダウンロードについては、MPLAB Pack Manager を参照してください。

5.1. バージョン 2.39 (機能安全リリース)
なし。
5.2. バージョン 2.36
遅延時のエラー (XCS2774) デフォルトのフリー モード最適化でのマイナーな変更により、オペランド式が遅延ビルトイン関数に定数フォールドされなくなり、それらが非定数として扱われ、エラーがトリガーされました。 built in_avr_delay_cycles は、コンパイル時の整数定数を想定しています。

5.3. バージョン 2.35
連続した 割り当て _at を使用 (XCS2653) _at () を使用して、同じ名前のセクションに複数のオブジェクトを連続して割り当てると、正しく機能しませんでした。 例えばamp上:
const char arl[ ] 属性 (section(“.mysec”) at (0x500) = (OxAB, OxCD);
const char arr2[ ] 属性 (sectionr.mysec”)= (OxEF, OxFE);
arri の直後に arr2 を配置する必要がありました。
セクション開始アドレスの指定 (XCS2650) -wl、–section-start オプションは、指定された開始アドレスにセクションを配置するのに暗黙のうちに失敗していました。 この問題は、カスタム名のセクションで修正されました。 ただし、 などの標準セクションでは機能しません。 テキストまたは . bss を使用して配置する必要があります。 -wl、 -T オプション。
リラックス時にリンカーがクラッシュする (XCS2647) いつ -mrelax 最適化が有効になっていて、それらが使用可能なメモリに収まらないコードまたはデータ セクションであった場合、リンカがクラッシュしました。 現在、このような状況では、代わりにエラー メッセージが発行されます。
いやいや落ちるバック(XCS2646) –nofallback オプションが正しく実装されておらず、文書化されていませんでした。 これを選択して、コンパイラがライセンスされていない場合にコンパイラがより低い最適化設定にフォールバックせず、代わりにエラーを発行するようにできるようになりました。
不適切な速度の最適化 (XCS2637) レベル 3 の最適化 (-03) を選択すると、手続き型の抽​​象化の最適化が有効になっていました。 これらの最適化は、コード速度を犠牲にしてコード サイズを縮小するため、実行すべきではありませんでした。
不正な EEPROM アクセス (XCS2629) -mconst-data-in-progmem オプションが有効 (デフォルト状態) の場合、eeprom_read_block ルーチンは Xmega デバイスで正しく動作せず、EEPROM メモリが正しく読み取られませんでした。
無効なメモリ割り当て (X03-2593、XC8-2651) の場合 -Ttext または -Tdata リンカー オプション (examp-wl ドライバ オプションを使用して渡されたファイル) が指定されている場合、対応するテキスト/データ領域の起点が更新されました。 ただし、終了アドレスはそれに応じて調整されていないため、領域がターゲット デバイスのメモリ範囲を超える可能性がありました。
属性が過剰な関数でクラッシュする (XC8-2580) _attribute_ ( ( signal , interrupt ) など) のように、割り込み、シグナル、または nmi 属性を複数使用して関数を宣言すると、コンパイラがクラッシュしました。
無効な ATtiny 割り込みコード (XC8-2465) ATtiny デバイス用にビルドし、最適化を無効 (-00) にすると、割り込み関数がオペランドが範囲外のアセンブラー メッセージをトリガーした可能性があります。
オプションが渡されない (XC8-2452) -wl カンマで区切られた複数のリンカー オプションを使用した場合、すべてのリンカー オプションがリンカーに渡されるわけではありません。
プログラム メモリを間接的に読み取る際のエラー (X03-2450) 場合によっては、コンパイラが プログラム メモリへのポインタから XNUMX バイト値を読み取る際の内部エラー (認識できない insn)

5.4. バージョン 2.32
ライブラリの 03 回目のアクセスが失敗する (X2381-XNUMX) 既存のライブラリ アーカイブにアクセスするために Windows バージョンの xc8-ar.exe ライブラリ アーカイバを再度起動すると、名前を変更できないというエラー メッセージが表示されて失敗する場合があります。

5.5. バージョン 2.31
説明できない コンパイラの障害 (XC8-2367) で実行しているとき ウィンドウズ システムの一時ディレクトリがドット「.」を含むパスに設定されているプラ​​ットフォームコンパイラが実行に失敗した可能性があります。

5.6. バージョン 2.30
アウトライン化後にグローバル ラベルが誤って配置される (XC8-2299) グローバルを配置する手書きのアセンブリ コード 手続き型抽象化によって除外されたアセンブリ シーケンス内のラベルは、正しく再配置されていない可能性があります。
リラックスしたクラッシュ (XC8-2287) -mリラックス オプションが原因で、リンカーがクラッシュした可能性があります。 テール ジャンプ緩和の最適化により、末尾にない ret 命令を削除しようとしました。 セクション。
ラベルを値として最適化するとクラッシュする (XC8-2282) 「ラベルを値として」GNU C を使用するコード 言語拡張により、手続き型の抽​​象化の最適化がクラッシュし、アウトライン化された VMA 範囲スパンの修正エラーが発生した可能性があります。
それほど const ではない (XC8-2271) のプロトタイプ strstr () およびその他の関数-mconst-data-inprogmem 機能が無効になっている場合、返された文字列ポインターに非標準の const 修飾子を指定しなくなりました。 avrxmega3 および avrtiny デバイスでは、この機能が永続的に有効になっていることに注意してください。
イニシャライザが失われる (XC8-2269) 変換に複数の変数がある場合 ユニットがセクションに配置されました (使用して セクション or 属性 ( (セクション) ))、および最初のそのような変数がゼロで初期化されたか、初期化子を持っていなかった場合、同じセクションに配置された同じ翻訳単位内の他の変数の初期化子が失われました。

5.1. バージョン 2.2 9 (機能安全リリース) なし。 
5.2. バージョン 2.20
長いコマンドでのエラー (XC8-1983) AVR ターゲットを使用している場合、コマンド ラインが非常に大きく、引用符やバックスラッシュなどの特殊文字が含まれていると、コンパイラが lilt not found エラーで停止することがあります。
割り当てられていないrodataセクション (XC8-1920) avrxmega3およびavrtinyアーキテクチャ用にビルドする際、AVRリンカがカスタムrodataセクションにメモリを割り当てることができず、メモリ オーバーラップ エラーが発生する可能性があります

5.3. バージョン 2.19 (機能安全リリース)
なし。
5.4. バージョン 2.10
再配置の失敗 (XC8-1891) 最適なアロケータは、リンカーの緩和後にセクション間にメモリの「穴」を残していました。 メモリの断片化は別として、これにより、pc 相対ジャンプまたは呼び出しが範囲外になることに関連するリンカの再配置エラーが発生する可能性が高くなりました。
緩和によって変換されない命令 (XC8-1889) 緩和するとターゲットが到達可能になるジャンプまたは呼び出し命令に対して、リンカの緩和が発生しませんでした。
ない機能 (XC8E-3 ) からのいくつかの定義clock_div_t や clock_prescale_s et () などの は、ATmega324PB、ATmega328PB、ATtiny441、および ATtiny841 を含むデバイスに対して定義されていません。
不足しているマクロ プリプロセッサ マクロ _XC 8_MODE_、XC 8 VERS ION、XC、および xc8 は、コンパイラによって自動的に定義されませんでした。 これらが利用可能になりました。

5.5. バージョン 2.05
内部コンパイラ エラー (XC8-1822) Windows でビルドする場合、コードの最適化時に内部コンパイラ エラーが発生する場合がありました。
RAM オーバーフローが検出されない (XC8-1800、XC8-1796) 状況によっては、使用可能な RAM を超えたプログラムがコンパイラによって検出されず、ランタイム コード エラーが発生していました。
省略されたフラッシュ メモリ (XC8-1792) avrxmega3 および avrtiny デバイスでは、フラッシュ メモリの一部が MPLAB X IDE によってプログラムされないままになっている可能性があります。
main の実行に失敗する (XC8-1788) プログラムにグローバル変数が定義されていない状況では、ランタイム スタートアップ コードが終了せず、main () 関数に到達しませんでした。
誤ったメモリ情報 (XC8-1787) avrxmega3 および avrtiny デバイスの場合、avr-size プログラムは、mad-only データがプログラム メモリではなく RAM を消費していると報告していました。
不正なプログラム メモリ読み取り (XC8-1783) プログラム メモリがデータ アドレス空間にマップされ、PROGMEM マクロ/属性を使用してオブジェクトを定義するデバイス用にコンパイルされたプロジェクトは、これらのオブジェクトを間違ったアドレスから読み取った可能性があります。
属性の内部エラー (XC8-1773) _at 0 または attribute() トークンを使用してポインター名と逆参照型の間にポインター オブジェクトを定義すると、内部エラーが発生しました。ample, char * _at (0x800150) cp; そのようなコードが検出された場合、警告が発行されるようになりました。

main の実行に失敗しました (XC8-1780、XC8-1767、XC8-1754) EEPROM 変数を使用したり、config プラグマを使用してヒューズを定義したりすると、 main 0 に到達する前に、ランタイム スタートアップ コードで不正なデータ初期化やプログラム実行のロックアップが発生する可能性がありました。

小型デバイスでのヒューズ エラー (XC8-1778、XC8-1742) attiny4/5/9/10120140 デバイスのヘッダーで指定されたヒューズの長さが正しくありませんでした fileヒューズを定義したコードをビルドしようとすると、リンカー エラーが発生します。

セグメンテーション違反 (XC8-1777) 断続的なセグメンテーション違反が修正されました。

アセンブラーのクラッシュ (XC8-1761) avr -as アセンブラーは、コンパイラーが Ubuntu 18 で実行されたときにクラッシュした可能性があります。

オブジェクトがクリアされない (XC8-1752) 初期化されていない静的ストレージ期間オブジェクトが、ランタイム スタートアップ コードによってクリアされていない可能性があります。

競合するデバイス指定は無視されました (XC8-1749) 複数のデバイス指定オプションが使用され、異なるデバイスが示されている場合、コンパイラはエラーを生成しませんでした。

ヒープによるメモリ破損 (XC8-1748) _heap_start シンボルが正しく設定されていなかったため、通常の変数がヒープによって破損する可能性がありました。

リンカー再配置エラー (XC8-1739) コードにターゲットがちょうど 4k バイト離れた rjmn または rcall が含まれている場合、リンカの再配置エラーが発生する可能性がありました。

5.6。 バージョン 2.00 なし。

既知の問題

コンパイラの動作上の制限事項を次に示します。 これらは、一般的なコーディングの制限、またはユーザーズ マニュアルに含まれる情報からの逸脱である可能性があります。 タイド内の括弧で囲まれたラベルは、追跡データベースでのその問題の識別です。 これは、サポートに連絡する必要がある場合に役立ちます。 ラベルのない項目は、運用方法を説明する制限であり、永続的に有効である可能性があります。
6.1. MPLAB X IDE 統合
MPLAB IDE統合 Compiler を MPLAB IDE から使用する場合は、Compiler をインストールする前に MPLAB IDE をインストールする必要があります。
6.2. コード生成
正しくない 初期化 (XC8-2679) 一部のグローバル/静的バイト サイズ オブジェクトの初期値がデータ メモリに配置される場所と、変数が実行時にアクセスされる場所との間に矛盾があります。
strtod が endptr を誤って設定する (XC8-2652) strtod () による変換対象の文字列に指数形式の浮動小数点数のように見えるものが含まれていて、e 文字の後に予期しない文字がある場合、endptr アドレスが指定されている場合は、その後の文字を指します。 e そのものではなく、e そのものです。 例えばample: strtod (“100exy”, endptr) ;

x 文字を指す endptr になります。

不適切な間接関数呼び出し (X03-2628) 場合によっては、構造体の一部として格納された関数ポインターを介して行われた関数呼び出しが失敗することがあります。

strtof は、8 進浮動小数点数に対してゼロを返します (XC2626-XNUMX) ライブラリ関数 strtof () などと scanf () などは、指数を指定しない XNUMX 進浮動小数点数を常にゼロに変換します。 例えばample: strtof (“Oxl”, &endptr) ; 0 ではなく、値 1 を返します。
不正確な Stack Advisor メッセージ (XC8-2542、XC8-2541) 場合によっては、(おそらく alloca() の使用による) 再帰または不確定スタックの使用に関するスタック アドバイザーの警告が発行されません。
重複した割り込みコードによる障害 (XC8-2421) 複数の割り込み関数が同じ本体を持っている場合、コンパイラーは、XNUMX つの割り込み関数の出力を別の割り込み関数呼び出しにする場合があります。 これにより、呼び出しが無効になったすべてのレジスタが不必要に保存され、現在の割り込みハンドラーのエピローグが実行される前でも割り込みが有効になり、コード エラーが発生する可能性があります。
CONST オブジェクトがプログラム メモリにない (XC8-2408) avrxmega3 および avrtiny プロジェクトでは、ユニット化された const オブジェクトがデータ メモリに配置されますが、警告によってそれらがプログラム メモリに配置されていることが示されます。 これは、プログラム メモリがデータ メモリ空間にマップされていないデバイスや、初期化されたオブジェクトには影響しません。
無効な DFP パスによる不正な出力 (XCS-2376) コンパイラが無効な DFP パスと「仕様」で呼び出された場合 file が存在する場合、コンパイラは欠落しているデバイス ファミリ パックを報告せず、代わりに「スペック」を選択します。 fileとなり、無効な出力につながる可能性があります。 「スペック」 files は配布された DFP では最新ではない可能性があり、内部コンパイラ テストでのみ使用することを目的としていました。
メモリーオーバーラップが検出されない (XC8-1966) コンパイラは、あるアドレス ( _at 0 を介して) で絶対化されたオブジェクトと、_ を使用する他のオブジェクトのメモリ オーバーラップを検出しません。宗派ion() 指定子と同じアドレスにリンクされています。
ライブラリ関数と _memx での失敗 (XC8-1763) _memx アドレス空間で引数を指定して libgcc float 関数を呼び出すと、失敗する場合があります。 ライブラリ ルーチンは一部の C 演算子から呼び出されることに注意してください。ample では、次のコードが影響を受けます: return regFloatVar > memxFloatVar;
libgcc の限定的な実装 (AVRTC-731) ATTiny4/5/9/10/20/40 製品では、libgcc の標準 C/Math ライブラリの実装は非常に限られているか、存在しません。
プログラムメモリの制限 (AVRTC-732) 128 kb を超えるプログラム メモリ イメージは、ツールチェーンでサポートされています。 ただし、-mrelax オプションを使用すると、必要な関数スタブが生成されず、緩和もエラー メッセージも表示されずにリンカーが異常終了することが知られています。
名前空間の制限 (AVRTC-733) 名前付きアドレス空間はツールチェーンでサポートされていますが、ユーザー ガイドの「特殊な型修飾子」セクションに記載されている制限に従います。
タイムゾーンライブラリ関数は GMT を想定しており、ローカル タイム ゾーンをサポートしていないため、 loca It ime 0 は gmtime ( ) と同じ時刻を返します。ampル。

ドキュメント / リソース

MICROCHIP MPLAB XC8 C コンパイラ バージョン 2.39 AVR MCU のリリース ノート [pdf] ユーザーガイド
AVR MCU 向け MPLAB XC8 C コンパイラ バージョン 2.39 リリース ノート、AVR MCU 向け MPLAB XC8 C、コンパイラ バージョン 2.39 リリース ノート、AVR MCU 向けリリース ノート
MICROCHIP MPLAB XC8 C コンパイラ バージョン 2.39 AVR MCU のリリース ノート [pdf] ユーザーガイド
MPLAB XC8 C コンパイラ バージョン 2.39 リリース ノート (AVR MCU 用)、MPLAB XC8 C、コンパイラ バージョン 2.39 リリース ノート (AVR MCU 用)、ノート (AVR MCU 用)
MICROCHIP MPLAB XC8 C コンパイラ [pdf] ユーザーガイド
MPLAB XC8 C コンパイラ、MPLAB XC8 C、コンパイラ

参考文献

コメントを残す

あなたのメールアドレスは公開されません。 必須項目はマークされています *