MICROCHIPのロゴMPLAB® XC8 C コンパイラ バージョン 2.41 AVR® MCU 用リリース ノート
取扱説明書

MPLAB XC8 C コンパイラ開発ソフトウェア

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

以上view

1.1. はじめに
Microchip MPLAB® XC8 C コンパイラのこのリリースには、いくつかの新機能とバグ修正が含まれています。
1.2. ビルド日
このコンパイラ バージョンの公式ビルド日は 8 年 2023 月 XNUMX 日です。
1.3。 前のバージョン
以前の MPLAB XC8 C コンパイラのバージョンは、2.40 年 3 月 2022 日にビルドされた XNUMX でした。
1.4。 機能安全マニュアル
MPLAB XC コンパイラの機能安全マニュアルは、機能安全ライセンスを購入するとドキュメント パッケージに含まれています。
1.5. コンポーネントのライセンスとバージョン
AVR MCU ツール用の MPLAB XC8 C コンパイラは、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 コンパイラとそれが使用するライセンス ソフトウェアは、Microsoft® Windows® 64 の Professional エディション、Ubuntu® 10、macOS® 18.04 の 10.15.5 ビット バージョンを含むさまざまなオペレーティング システムで使用できます。Windows のバイナリはコード署名されています。macOS のバイナリはコード署名され、公証されています。MPLAB XC ネットワーク ライセンス サーバーは、Microsoft Windows 64 以上、Ubuntu 10 以上、macOS 18.04 以上を含むさまざまな 10.15 ビット オペレーティング システムで使用できます。サーバーは、Windows Server、Oracle® Enterprise Linux® や Red Hate Enterprise Linux などの Linux ディストリビューション、およびサポートされているオペレーティング システムの旧バージョンを含むさまざまなオペレーティング システムでも実行できます。ただし、MPLAB XC ネットワーク ライセンス サーバーはこれらのオペレーティング システムではテストされていません。 MPLAB XC ネットワーク ライセンス サーバーは、ネットワーク ライセンス用の仮想マシン ライセンス (SW006021-VM) を使用して、サポートされている OS の仮想マシン上で実行できます。MPLAB XC ネットワーク サーバーの 32 ビット バージョンはすべて、バージョン 3.00 以降で廃止されます。
サポートされるデバイス
このコンパイラは、リリース時点で利用可能なすべての8ビットAVR MCUデバイスをサポートしています。サポートされているすべてのデバイスのリストについては、(コンパイラのディレクトリ内)を参照してください。これらのファイルには、
avr_chipinfo.html doc 各デバイスの構成ビット設定。

1.7。 エディションとライセンスのアップグレード
MPLAB XC8 コンパイラは、ライセンス (PRO) またはライセンスなし (無料) 製品としてアクティブ化できます。コンパイラのライセンスを取得するには、アクティベーション キーを購入する必要があります。ライセンスにより、無料製品と比較して、より高いレベルの最適化が可能になります。ライセンスなしのコンパイラは、ライセンスなしで無期限に操作できます。MPLAB XC8 機能安全コンパイラは、Microchip から購入した機能安全ライセンスを使用してアクティブ化する必要があります。このライセンスがないと、コンパイラは動作しません。アクティブ化されると、任意の最適化レベルを選択して、すべてのコンパイラ機能を使用できます。このリリースの MPLAB XC 機能安全コンパイラは、ネットワーク サーバー ライセンスをサポートしています。
ライセンスの種類とライセンスを使用したコンパイラのインストールについては、MPLAB XC C コンパイラのインストールとライセンス (DS50002059) ドキュメントを参照してください。

1.8.インストールとアクティベーション
このコンパイラに含まれる最新のライセンス マネージャーに関する重要な情報については、移行の問題と制限のセクションも参照してください。
MPLAB IDE を使用する場合は、このツールをインストールする前に、最新の MPLAB X IDE バージョン 5.0 以降をインストールしてください。コンパイラをインストールする前に IDE を終了してください。(Windows)、(Linux)、または (macOS) .exe .run .app コンパイラ インストーラ アプリケーションを実行し、画面の指示に従います。XC8-1.00.11403-windows.exe デフォルトのインストール ディレクトリが推奨されます。Linux を使用している場合は、ターミナルを使用してルート アカウントからコンパイラをインストールする必要があります。管理者権限を持つ macOS アカウントを使用してインストールします。
アクティベーションは、インストールとは別に実行されるようになりました。 詳細については、MPLAB® XC C コンパイラのライセンス マネージャー (DS52059) を参照してください。
評価ライセンスでコンパイラを実行することを選択した場合、評価期間の終了から 14 日以内にコンパイル中に警告が表示されるようになりました。 HPA サブスクリプションの終了から 14 日以内の場合、同じ警告が発行されます。
XC Network License Server は個別のインストーラーであり、シングルユーザー コンパイラー インストーラーには含まれていません。
XC License Manager は、フローティング ネットワーク ライセンスのローミングをサポートするようになりました。 モバイル ユーザーを対象としたこの機能により、フローティング ライセンスを短時間ネットワークから切り離すことができます。 この機能を使用すると、ネットワークから切断しても MPLAB XC コンパイラを使用できます。 この機能の詳細については、XCLM インストールの doc フォルダーを参照してください。
MPLAB X IDE には、ローミングを視覚的に管理するためのライセンス ウィンドウ ([ツール] > [ライセンス]) が含まれています。

1.8.1. インストールの問題の解決
Windows オペレーティング システムのいずれかにコンパイラをインストールする際に問題が発生した場合は、次の提案を試してください。
管理者としてインストールを実行します。
インストーラー アプリケーションのアクセス許可を「フル コントロール」に設定します。 (ファイルを右クリックし、[プロパティ]、[セキュリティ] タブを選択し、[ユーザー] を選択して、編集します。)
一時フォルダーの権限を「フルコントロール」に設定します。
一時フォルダーの場所を確認するには、[実行] コマンド (Windows ロゴ キー + R) に %temp% と入力します。
これにより、そのディレクトリを表示するファイル エクスプローラー ダイアログが開き、そのフォルダーのパスを決定できるようになります。
1.9。 コンパイラのドキュメント
コンパイラのユーザー ガイドは、スクリーンショットに示されているように、MPLAB X IDE ダッシュボードの青いヘルプ ボタンをクリックするとブラウザで開く HTML ページから開くことができます。

8 ビット AVR ターゲット用にビルドする場合、MPLAB® XC8 C Compiler User's Guide for AVR® MCU には、このアーキテクチャに適用可能なコンパイラ オプションと機能に関する情報が含まれています。

MICROCHIP MPLAB XC8 C コンパイラ開発ソフトウェア -

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

ドキュメントの更新

MPLAB XC8 ドキュメントのオンラインおよび最新バージョンについては、Microchip のオンライン テクニカル ドキュメントにアクセスしてください。 webサイト。このリリースで新しく追加された、または更新された AVR ドキュメント:

  • MPLAB® XC8 C コンパイラ AVR® MCU 用ユーザーズ ガイド (リビジョン G)
  • AVR® GNU ツールチェーンから MPLAB® XC8 への移行ガイド (リビジョン A)
  • Hexmate ユーザーズ ガイド (リビジョン B)

AVR® GNU ツールチェーンから MPLAB® XC8 への移行ガイドでは、C ベースのプロジェクトを AVR 8 ビット GNU ツールチェーンから Microchip MPLAB XC8 C コンパイラに移行する場合に必要となる可能性のあるソース コードとビルド オプションの変更について説明します。Microchip 統合標準ライブラリ リファレンス ガイドでは、Microchip 統合標準ライブラリで定義された関数の動作とインターフェイス、およびライブラリ タイプとマクロの使用目的について説明します。この情報の一部は、以前は AVR® MCU 用 MPLAB® XC8 C コンパイラ ユーザー ガイドに含まれていました。デバイス固有のライブラリ情報は、このコンパイラ ガイドに引き続き含まれています。
8 ビット デバイスと MPLAB XC8 C コンパイラを使い始めたばかりの場合は、『MPLAB® XC8 ユーザーズ ガイド (組み込みエンジニア向け) - AVR® MCU (DS50003108)』に、MPLAB X IDE でのプロジェクトのセットアップ方法と、最初の MPLAB XC8 C プロジェクトのコード作成方法が記載されています。このガイドは現在、コンパイラとともに配布されています。
Hexmate ユーザー ガイドは、Hexmate をスタンドアロン アプリケーションとして実行するユーザーを対象としています。

新着情報

以下は、コンパイラが現在サポートしている新しい AVR ターゲット機能です。サブ見出しのバージョン番号は、以下の機能をサポートする最初のコンパイラ バージョンを示します。
3.1. バージョン 2.41
Bootrow サポート (XC8-3053) コンパイラは、プレフィックス at.bootrow アドレス 0x860000 を持つセクションの内容を HEX ファイルに配置します。これらのセクションは、ブートローダのみがアクセスできるキーやその他のセキュリティ情報の保存用に設計された BOOTROW メモリに使用されます。

冗長な戻り値の削除 (XC8-3048) コンパイラは、カスタム リンカー スクリプトが使用されている場合、末尾ジャンプのある ret 関数内の冗長な命令を削除するようになりました。これは、以前に実行されたものと同様の最適化ですが、カスタム リンカー スクリプトが使用され、最適な割り当てスキームが実行されていない場合でも、すべての孤立したセクションで実行されるようになりました。時間型の変更 (XC8-2982、2932) C99 標準ライブラリ型が、time_t から型に変更されました。これにより、unsigned long mktime() などの時間関連の long long 関数のコード サイズが改善されます。
新しいnop (XC8-2946, 2945) マクロが追加されました。このマクロはno-NOP()を挿入します。出力に nop 操作命令を追加します。
XCLM の更新 (XC8-2944) コンパイラで使用されるライセンス マネージャーが更新され、コンパイラのライセンスの詳細を確認する際の応答性が向上しました。
Tramp相対呼び出し (XC8-2760) コンパイラは、命令の相対形式が通常その宛先の範囲外になる場合、長い形式の呼び出し命令を短い相対呼び出しに置き換えることができるようになりました。この状況では、コンパイラは rcall を呼び出す命令に置き換えようとします。amp必要なアドレスへの「オンライン実行」、例:ample: jmp
rcall tramp_foo ;はfooと呼ばれていました

rcall tramp_foo

tramp_foo:
jmp フー

この最適化は、同様のプログラム フローの最適化とともに、-mrelax オプションによって制御されます。

3.2. バージョン 2.40
新しいデバイス サポート 次の AVR 部品のサポートが利用可能になりました: AT90PWM3、AVR16DD14、AVR16DD20、AVR16DD28、AVR16DD32、AVR32DD14、AVR32DD20、AVR32DD28、AVR32DD32、AVR64EA28、AVR64EA32、および AVR64EA48。
手続き型抽象化の改善 手続き型抽象化 (PA) 最適化ツールが改善され、関数呼び出し命令 (/) を含むコードを使用できるようになっています。これは、関数に引数を渡したり関数から戻り値を取得したりするためにスタックが使用されていない場合にのみ、call rcall で発生します。スタックは、可変引数リストを持つ関数を呼び出す場合、またはこの目的のために指定されたレジスタの数よりも多くの引数を取る関数を呼び出す場合に使用されます。この機能は、 オプションを使用して無効にできます。また、- と をそれぞれ使用するか、属性 (指定子) を関数で選択的に使用して、オブジェクト ファイルまたは関数に対して手続き型抽象化を完全に無効にすることもできます。
mno-pa-アウトラインコール -mno-pa-on-file -mno-pa-on-function nopa コード カバレッジ マクロ 有効なオプションが指定されている場合、コンパイラーはマクロを定義するようになりました __nopa __CODECOV -mcodecov 。
メモリ予約オプション ドライバは、AVR ターゲット用にビルドするときに、xc8-cc -mreserve=space@start:end オプションを受け入れるようになりました。このオプションは、データまたはプログラム メモリ空間のいずれかで指定されたメモリ範囲を予約し、リンカーがこの領域にコードまたはオブジェクトを配置しないようにします。 よりスマートなスマート IO スマート IO 関数には、printf コア コードの一般的な調整、%n 変換指定子を独立したバリアントとして扱うこと、オンデマンドの vararg pop ルーチンへのリンク、IO 関数の引数を処理するために可能な場合はより短いデータ型を使用すること、フィールド幅と精度の処理で共通コードを考慮に入れることなど、いくつかの改善が加えられました。これにより、コードとデータが大幅に節約され、IO の実行速度が向上します。

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

3.5. バージョン 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-progmem オプションを使用すると、リンカーがすべての const 修飾データを 32 つの XNUMXk セクションに配置し、関連する SFR レジスタを自動的に初期化して、このデータがデータ メモリ空間にマップされ、より効率的にアクセスされるようにすることができます。
Microchip 統合標準ライブラリ すべての MPLAB XC コンパイラは、このリリースの MPLAB XC8 で利用できる Microchip 統合標準ライブラリを共有します。AVO MCU 用の MPLA# XC8 C コンパイラ ユーザー ガイドには、これらの標準関数のドキュメントは含まれなくなりました。この情報は、Microchip 統合標準ライブラリ リファレンス ガイドに記載されています。以前 avr-libc で定義されていた一部の機能は利用できなくなっていることに注意してください (Lila の機能を参照してください)。
スマート I0 新しい統合ライブラリの一部として、printf および scanf ファミリの I0 関数は、プログラム内でのこれらの関数の使用方法に基づいて、ビルドごとにカスタム生成されるようになりました。これにより、プログラムで使用されるリソースを大幅に削減できます。
スマート ICI アシスタンス オプション スマート I0 関数 (print f () や scanf () など) の呼び出しを分析する場合、コンパイラは、呼び出しに必要な変換指定子を書式文字列から判断したり、引数から推測したりできないことがあります。以前は、コンパイラは常に何も仮定せず、完全に機能する 10 関数が最終プログラム イメージにリンクされるようにしていました。新しい – msmart-io-format=fmt オプションが追加され、使用方法があいまいなスマート I0 関数で使用される変換指定子をユーザーがコンパイラに通知できるようになり、長すぎる 10 ルーチンがリンクされるのを防止できます (詳細については、smart-io-format オプションを参照してください)。
カスタム セクションの配置 以前は、-W1、-section-start オプションは、リンカー スクリプトが同じ名前の出力セクションを定義した場合にのみ、指定されたセクションを要求されたアドレスに配置しました。そうでない場合、セクションはリンカーによって選択されたアドレスに配置され、オプションは基本的に無視されました。現在、リンカー スクリプトがセクションを定義していなくても、このオプションはすべてのカスタム セクションに適用されます。ただし、. text、. bss、. data などの標準セクションの場合、最適なアロケータが配置を完全に制御するため、オプションは効果がありません。ユーザー ガイドで説明されているように、-ton、-Tsection=addr オプションを使用してください。
3.6. バージョン 2.32
スタック ガイダンス PRO コンパイラ ライセンスで利用可能なコンパイラのスタック ガイダンス機能を使用すると、プログラムで使用されるスタックの最大深度を推定できます。プログラムの呼び出しグラフを構築して分析し、各関数のスタック使用量を決定してレポートを作成し、そこからプログラムで使用されるスタックの深度を推測できます。この機能は、-mchp-stack-usage コマンドライン オプションで有効になります。実行後にスタック使用量の概要が印刷されます。詳細なスタック レポートは、マップで利用できます。 file、通常の方法でリクエストできます。
新しいデバイス サポート 次の AVR 部品のサポートが利用可能です: ATTINY427、ATTINY424、ATTINY426、ATTINY827、ATTINY824、ATTINY826、AVR32DB32、AVR64DB48、AVR64DB64、AVR64DB28、AVR32DB28、AVR64DB32、および AVR32DB48。 撤回されたデバイス サポート 次の AVR 部品のサポートは利用できなくなりました: AVR16DA28、AVR16DA32、および AVR16DA48。
3.7. バージョン 2.31
なし。
3.8. バージョン 2.30
データの初期化を防ぐための新しいオプション -mno-data-init ドライバオプションは、データの初期化と bss セクションのクリアを防ぎます。これは、アセンブリ内の do copy data および do clear bss シンボルの出力を抑制することによって機能します。 fileこれにより、リンカーがこれらのルーチンを含めることができなくなります。
強化された最適化 冗長な return 命令の削除、skip-if-bit-is 命令に続くジャンプの一部の削除、手続き型抽象化の改善とこのプロセスを反復する機能など、多数の最適化の改善が行われました。 これらの最適化の一部を制御する追加オプションが利用できるようになりました。具体的には、静的オブジェクトへのアクセスを 2 つのシンボルに対して実行できるようにする -f section-anchors、手続き型抽象化の反復回数をデフォルトの XNUMX から変更できるようにする -mpa-iterations=n、およびリンカーが長い呼び出しを緩和できるように、より積極的な手続き型抽象化を実行する -mpa-callcost-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。
3.9. バージョン 2.29 (機能安全リリース)
ヘッダ file コンパイラ組み込み関数コンパイラがMISRAなどの言語仕様に準拠できるようにするために、ヘッダ file、これは自動的に含まれますが更新されました。このヘッダーには、builtin_avr_nop() やbuiltin avr delay_cycles() などのすべての組み込み関数のプロトタイプが含まれています。一部の組み込み関数は MISRA に準拠していない可能性がありますが、コンパイラのコマンドラインに defineXCSTRICT_MISRA を追加することでこれらを省略できます。組み込み関数とその宣言は、固定幅の型を使用するように更新されました。
3.10. バージョン 2.20
新しいデバイスのサポート 次の AVR 部品がサポートされています: ATTINY1624、ATTINY1626、および ATTINY1627。
より優れた最適割り当て コンパイラーの最適アロケーター (BFA) が改良され、セクションはより優れた最適化を可能にする順序で割り当てられるようになりました。BFA は名前付きアドレス空間をサポートし、データ初期化をより適切に処理するようになりました。
手続き型抽象化の改善 手続き型抽象化の最適化が、より多くのコード シーケンスに対して実行されるようになりました。この最適化によってコード サイズが増加する可能性があった以前の状況は、最適化コードにリンカーのガベージ コレクション プロセスを認識させることで解決されました。
AVR アセンブラの欠如 AVR アセンブラはこのディストリビューションには含まれなくなりました。
3.11. バージョン 2.19 (機能安全リリース)
なし。
3.12. バージョン 2.10
コード カバレッジ このリリースには、プロジェクトのソース コードがどの程度実行されたかの分析を容易にするコード カバレッジ機能が含まれています。このオプションを有効にするには、オプション -mcodecov=ram を使用します。ハードウェア上でプログラムを実行すると、コード カバレッジ情報がデバイス内で照合され、コード カバレッジ プラグインを介して MPLAB X IDE に転送して表示することができます。このプラグインの入手方法については、IDE のドキュメントを参照してください。#pragma nocodecov を使用すると、後続の関数をカバレッジ分析から除外することができます。理想的には、プラグマは、 file その全体を除外する file カバレッジ分析から除外します。あるいは、_attribute_ ( (nocodecov) ) を使用して、特定の関数をカバレッジ分析から除外することもできます。
デバイスの説明 file新しいデバイス file avr_chipinfo.htmlと呼ばれるファイルは、コンパイラ配布物のdocsディレクトリにあります。これは file コンパイラがサポートするすべてのデバイスをリストします。デバイス名をクリックすると、そのデバイスで許容されるすべての構成ビット設定/値ペインを表示するページが開きます。例:amp手続き的抽象化
アセンブリ コードの共通ブロックを、そのブロックの抽出されたコピーへの呼び出しに置き換える手続き型抽象化最適化がコンパイラに追加されました。これらは別のアプリケーションによって実行され、レベル 2、3、または s の最適化を選択すると、コンパイラによって自動的に呼び出されます。これらの最適化によりコード サイズは縮小されますが、実行速度とコードのデバッグ可能性が低下する可能性があります。手続き型抽象化は、オプション -mno-pa を使用して、より高い最適化レベルで無効にするか、-mpa を使用して (ライセンスに応じて) より低い最適化レベルで有効にすることができます。オブジェクトに対して無効にすることができます。 file -mno-pa-on-を使用してfile=file名前、または -mno-pa-on-function=function を使用して関数に対して無効にすることができます。ソース コード内では、関数の定義で属性 ( (nopa) ) を使用するか、属性 ( (nopa, noinline) ) に展開される nopa を使用して、関数の手続き型抽象化を無効にすることができます。これにより、関数のインライン化が行われず、インライン コードの抽象化が行われなくなります。
プラグマのロックビットサポート #pragma config を使用して、AVR ロックビットとその他の構成ビットを指定できるようになりました。avr_chipinfo を確認してください。html file (上記参照) このプラグマで使用する設定/値のペア。 新しいデバイスのサポート 次の部品がサポートされています: AVR28DAl28、AVR64DAl28、AVR32DA 128、および AVR48DA 128。
3.13. バージョン 2.05
より多くのビットをお得に このコンパイラとライセンス マネージャーの macOS バージョンは、64 ビット アプリケーションになりました。これにより、コンパイラは最新バージョンの macOS に警告なしでインストールされ、実行されるようになります。
プログラム メモリ内の const オブジェクト コンパイラは、const 修飾オブジェクトを RAM に配置するのではなく、プログラム フラッシュ メモリに配置できるようになりました。コンパイラは、const 修飾グローバル データがプログラム フラッシュ メモリに格納され、適切なプログラム メモリ命令を使用してこのデータに直接的または間接的にアクセスできるように変更されました。この新しい機能はデフォルトで有効になっていますが、-mno-const-data-in-progmem オプションを使用して無効にすることができます。avrxmega3 および avrtiny アーキテクチャの場合、プログラム メモリはこれらのデバイスのデータ アドレス空間にマップされるため、この機能は不要であり、常に無効になっています。
無料の標準 このコンパイラのライセンスなし (無料) バージョンでは、レベル 2 までの最適化が可能になりました。これにより、標準ライセンスを使用して以前に可能だったものと同じではありませんが、同様の出力が可能になります。
AVRASM2 へようこそ 2 ビット デバイス用の AVRASM8 アセンブラが、XC8 コンパイラ インストーラに含まれるようになりました。このアセンブラは XC8 コンパイラでは使用されませんが、手書きのアセンブリ ソースに基づくプロジェクトで使用できます。
新しいデバイスのサポート 次の部品がサポートされています: ATMEGA1608、ATMEGA1609、ATMEGA808、および ATMEGA809。

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

移行の問題

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

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

4.6. バージョン 2.32
なし。
4.7. バージョン 2.31
なし。
4.8. バージョン 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 の使用量は削減されます。この機能は、必要に応じて -mnoconst-data-in-progmem オプションを使用して無効にできます。
4.6. バージョン 2.00
構成ヒューズ デバイス構成ヒューズは、configプラグマに続いて設定値ペアを使用してヒューズの状態を指定することでプログラムできるようになりました。例:
#pragma config WDTON = SET
#プラグマconfig BODLEVEL = BODLEVEL_4V3
絶対オブジェクトと関数 オブジェクトと関数は、CCI(アドレス)指定子を使用してメモリ内の特定のアドレスに配置できるようになりました。例:amp上:
#含む
整数 foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
この指定子の引数は 最初のバイトまたは命令が配置されるアドレスを表す定数。RAM アドレスは、オフセット 0x800000 を使用して示されます。この機能を使用するには、CCI を有効にします。
新しい割り込み関数の構文 コンパイラはCCI _interrupt (num)指定子を受け入れ、C関数が割り込みハンドラであることを示すようになりました。指定子は割り込み番号を取ります。例:amp上:
#含む
void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }

修正された問題

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

5.1. バージョン 2.41
Ventura (XC8-3088) ドングルに関する問題 コンパイラのライセンスに使用されるライセンスが macOS Ventura ホストで適切に読み取られず、ライセンス エラーが発生する場合があります。XCLM ライセンス マネージャーを変更すると、この問題は修正されます。
メモリ割り当ての誤った表示 (XC8-2925) 標準ライブラリのメモリ管理関数 (malloc() など) を使用して SIZE_MAX バイト (またはこれに近い値) のメモリを割り当てようとしましたが、誤って成功しました。単純な動的メモリ割り当て実装を使用する場合、要求されたブロックに加えて追加のバイトが必要であることが考慮されていませんでした。このような状況では、NULL ポインタが返され、errno が ENOMEM に設定されるようになりました。
不正確な fma 関数が削除されました (XC8-2913) C99標準ライブラリfma()ファミリー関数( ) は、単一の丸めに対して無限の精度で乗算加算を計算せず、代わりに各操作で丸め誤差を累積していました。これらの関数は、提供されているライブラリから削除されました。
文字列変換の処理が不適切 (XC8-2921、XC8-2652) strtod Cr による変換の「対象シーケンス」に指数形式の浮動小数点数と思われるものが含まれており、e/E 文字の後に予期しない文字があった場合、endptr が指定されていた場所に、e/E 文字自体を指すはずだったアドレスが e/E 文字の後の文字を指すように割り当てられました。これは変換されていないためです。たとえば、ample、strtod (“100exx”, &ep) は 100.00 を返し、ep を文字列の “exx” 部分を指すように設定するはずですが、関数は正しい値を返して、ep を文字列の “xx” 部分を指すよう設定していました。

5.2. バージョン 2.40
リラックスしすぎ (XCS-2876) -mrelax オプションを使用すると、コンパイラはいくつかのセクションをまとめて割り当てず、最適なコード サイズが得られませんでした。 これは、新しい MUSL ライブラリを使用したコードまたは弱いシンボルで発生した可能性があります。
警告に記載されているとおりにマッピング機能が無効化されていない (XC8-2875) const-data-in-config-mappedprogmem 機能は、const-data-in-progmem 機能が有効になっていることを前提としています。オプションを使用して const-data-inconfig-mapped-progmem 機能が明示的に有効になっていて、const-data-inprogmem 機能が無効になっている場合、const-data-in-config-mapped-progmem 機能が自動的に無効になっていることを示す警告メッセージが表示されても、リンク ステップは失敗します。これは完全に正しいわけではありません。この状況では、const-data-in-config-mapped-progmem 機能が完全に無効になりました。
DFP が NVMCTRL に正しくアクセスするように変更されました (XC8-2848) AVR64EA デバイスで使用されるランタイム スタートアップ コードは、NVMCTRL レジスタが構成変更保護 (CCP) の下にあることを考慮せず、const-data-in-configmapped-progmem コンパイラ機能で使用されるページに I0 SFR を設定できませんでした。AVR-Ex_DFP バージョン 2.2.55 で行われた変更により、ランタイム スタートアップ コードがこのレジスタに正しく書き込むことができるようになります。
DFPの変更を避ける フラッシュ マッピング (XC8-2847) AVR128DA28/32/48/64 シリコン エラッタ (D580000882) で報告されたフラッシュ マッピング デバイス機能の問題に対する回避策が実装されました。影響を受けるデバイスでは、const-data-in-config-mapped-progmem コンパイラ機能はデフォルトでは適用されません。この変更は、AVR-Dx_DFP バージョン 2.2.160 で反映されます。
sinhf または coshf でのビルド エラー (XC8-2834) sinhf () または coshf () ライブラリ関数を使用しようとすると、未定義の参照を示すリンク エラーが発生しました。 参照されている不足している関数は、コンパイラの配布に含まれるようになりました。
nopa でのビルド エラー (XC,8-2833) asm() を使用してアセンブラ名が指定された関数で nopa 属性を使用すると、アセンブラからエラー メッセージがトリガーされます。この組み合わせは不可能です。
ポインタ引数による可変長関数の失敗 (XC8-2755、XC8-2731) 可変数の引数を持つ関数は、const-data-in-progmem 機能が有効な場合、可変引数リストで 24 ビット ( memx 型) ポインターが渡されることを想定しています。データ メモリへのポインターである引数は 16 ビット オブジェクトとして渡されていたため、最終的に読み取られたときにコード エラーが発生していました。constdata-in-progmem 機能が有効な場合、すべての 16 ビット ポインター引数が 24 ビット ポインターに変換されるようになりました。
strtoxxx ライブラリ関数が失敗する (XC8-2620) const-data-in-progmem 機能が有効になっている場合、プログラム メモリ内にないソース文字列引数に対して、strtoxxx ライブラリ関数の endptr パラメーターが適切に更新されませんでした。
無効なキャストのアラート (XC8-2612) const-in-progmem機能が有効になっていて、文字列リテラルのアドレスが明示的にデータアドレス空間にキャストされている場合(const修飾子を削除した場合)、コンパイラはエラーを発行するようになりました。例:ample、(uint 8_t *)「Hello World!」。const データ ポインターがデータ アドレス空間に明示的にキャストされるときにアドレスが無効になる可能性がある場合は、警告が発行されます。
初期化されていない const オブジェクトの配置 (XC8-2408) プログラム メモリの全部または一部をデータ アドレス空間にマップするデバイスでは、初期化されていない const および const volatile オブジェクトがプログラム メモリに配置されていませんでした。これらのデバイスでは、このようなオブジェクトはプログラム メモリに配置され、他のデバイスと操作が一致するようになりました。

5.3. バージョン 2.39 (機能安全リリース)
なし。
5.4. バージョン 2.36
遅延時のエラー (XC8-2774) デフォルトのフリー モードの最適化における小さな変更により、遅延組み込み関数へのオペランド式の定数畳み込みが妨げられ、非定数として扱われ、「builtin avr delay_cycles expects a compile time integer constant」というエラーが発生していました。
5.5. バージョン 2.35
_at を使用した連続割り当て (XC8-2653) 同じ名前のセクションに複数のオブジェクトを配置し、_at() を使用すると、連続して割り当てる処理が正しく実行されませんでした。例:amp上:
const char arr1[] __attribute__((section(“.mysec”))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __attribute__((section(“.mysec”))) = {0xEF, 0xFE};
arr2 を arr1 の直後に配置する必要があります。
セクション開始アドレスの指定(XC8-2650) -W1、–section-start オプションは、指定された開始アドレスにセクションを配置するのに暗黙的に失敗していました。この問題は、カスタム名が付けられたセクションでは修正されましたが、-W1、-T オプションを使用して配置する必要がある . text や . bss などの標準セクションでは機能しません。
リンカーがリラックス時にクラッシュする (XC8-2647) -mrelax 最適化が有効になっていて、使用可能なメモリに収まらないコードまたはデータ セクションがある場合、リンカーがクラッシュしました。現在、このような状況では、代わりにエラー メッセージが発行されます。

ノーフォールバック(XC8-2646) –nofallback オプションが正しく実装されておらず、文書化されていませんでした。 これを選択して、コンパイラがライセンスされていない場合にコンパイラがより低い最適化設定にフォールバックせず、代わりにエラーを発行するようにできるようになりました。

不適切な速度最適化 (X03-2637) レベル 3 の最適化 (-03) を選択すると、手続き型の抽​​象化の最適化が有効になっていました。 これらの最適化は、コード速度を犠牲にしてコード サイズを縮小するため、実行すべきではありませんでした。
EEPROM 不良 アクセス (XC8-2629) -mconst-data-in-progmem オプションが有効になっている場合 (デフォルトの状態)、eeprom_read_block ルーチンは Xmega デバイス上で正しく動作せず、EEPROM メモリが正しく読み取られませんでした。
無効なメモリ割り当て(XC8-2593、XC8-2651) -Ttext または -Tdata リンカーオプション(例:amp指定されたファイル(-vl ドライバー オプションを使用して渡されたファイル)に対応するテキスト/データ領域の起点は更新されましたが、終了アドレスはそれに応じて調整されなかったため、領域がターゲット デバイスのメモリ範囲を超える可能性があります。
属性が過剰な関数でクラッシュする (XC8-2580) 関数が、attribute ( ( signal , interrupt ) ) のように、interrupt、signal、または nmi 属性のうち 1 つ以上を使用して宣言されている場合、コンパイラがクラッシュしました。
無効な ATtiny 割り込みコード (XC8-2465) ATtiny デバイス用にビルドし、最適化を無効 (-00) にすると、割り込み関数がオペランドが範囲外のアセンブラー メッセージをトリガーした可能性があります。
オプションが渡されない (XC8-2452) 複数のコンマ区切りのリンカー オプションでオプションを使用すると、すべてのリンカー オプションがリンカーに渡されませんでした。
プログラムメモリの間接読み取りエラー (X03-2450) いくつかのケースでは、プログラムメモリへのポインタから2バイトの値を読み取るときに、コンパイラが内部エラー(認識できないinsn)を生成しました。
5.6. バージョン 2.32
2回目のアクセス ライブラリが失敗する (XC8-2381) 既存のライブラリ アーカイブにアクセスするために、Windows バージョンの xc8-ar. .exe ライブラリ アーカイバを XNUMX 回目に呼び出すと、名前を変更できないというエラー メッセージが表示されて失敗する場合があります。
5.7. バージョン 2.31
説明されていないコンパイラ 失敗 (XC8-2367) システムの一時ディレクトリがドット「.」文字を含むパスに設定されている Windows プラットフォームで実行する場合、コンパイラの実行に失敗する可能性があります。
5.8. バージョン 2.30
アウトライン後にグローバル ラベルが間違った位置に置かれる (XC8-2299) 手続き型抽象化によって取り除かれたアセンブリ シーケンス内にグローバル ラベルを配置する手書きのアセンブリ コードは、正しく再配置されていない可能性があります。
リラックスしたクラッシュ(XC8-2287) -mrelax オプションを使用すると、テール ジャンプ緩和最適化によってセクションの最後にない ret 命令を削除しようとしたときに、リンカーがクラッシュする可能性があります。
ラベルを値として最適化するとクラッシュする (XC8-2282) 「Labels as values」GNU C 言語拡張機能を使用するコードにより、手続き型抽象化の最適化がクラッシュし、アウトライン化された VMA 範囲スパン修正エラーが発生する可能性がありました。
それほどconstではない (XC8-2271) st rstr() やその他の関数のプロトタイプは、 -mconst-data-inprogmem 機能が無効になっている場合、返される文字列ポインターに非標準の const 修飾子を指定しなくなりました。avrxmega3 および avrtiny デバイスでは、この機能は永続的に有効になっていることに注意してください。
初期化子の消失 (XC8-2269) 翻訳単位内の 1 つの変数がセクション内に配置され (_section または _attribute_ ( (section) ) を使用)、最初のそのような変数がゼロで初期化されていたか初期化子がなかった場合、同じセクション内に配置された同じ翻訳単位内の他の変数の初期化子は失われます。
5.1. バージョン 2.29 (機能安全リリース)
なし。
5.2. バージョン 2.20
長いコマンドのエラー (XC8-1983) AVRターゲットを使用する場合、コンパイラが file コマンドラインが非常に大きく、引用符やバックスラッシュなどの特殊文字が含まれている場合、エラーが見つかりませんでした。
未割り当てのロデータセクション (XC8-1920) AVR リンカーは、avrxmega3 および avrtiny アーキテクチャ用にビルドするときにカスタム rodata セクションにメモリを割り当てることができず、メモリ重複エラーが発生する可能性があります。
5.3. バージョン 2.19 (機能安全リリース)
なし。
5.4. バージョン 2.10
移転の失敗 (XC8-1891) 最適アロケータは、リンカーの緩和後にセクション間にメモリの「穴」を残していました。メモリの断片化とは別に、これにより、PC 相対ジャンプまたは範囲外の呼び出しに関連するリンカーの再配置エラーが発生する可能性が高まりました。
緩和によって変換されない命令 (XC8-1889) 緩和するとターゲットが到達可能になるジャンプまたは呼び出し命令に対して、リンカの緩和が発生しませんでした。
ない機能性 (XC8E-388) いくつかの定義clock_div_t や clock_prescale set () などの関数は、ATmega324PB、ATmega328PB、ATtiny441、ATtiny841 などのデバイスでは定義されていませんでした。
マクロがありません プリプロセッサ マクロ _XC8_MODE_、_XC8_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 プログラムは、読み取り専用データがプログラム メモリではなく RAM を消費していると報告していました。
プログラムメモリの読み取りが不正です (XC8-1783) プログラム メモリがデータ アドレス空間にマップされ、PROGMEM マクロ/属性を使用してオブジェクトを定義するデバイス用にコンパイルされたプロジェクトは、これらのオブジェクトを間違ったアドレスから読み取った可能性があります。
属性に関する内部エラー (XC8-1773) でポインター オブジェクトを定義すると、内部エラーが発生しました。
_at () または attribute() トークンは、ポインター名と参照解除された型の間にあります。たとえば、ampル、チャー*
_at (0x800150) cp; このようなコードに遭遇すると警告が発行されるようになりました。
main の実行に失敗しました (XC8-1780、XC8-1767、XC8-1754) EEPROM 変数を使用したり、config プラグマを使用してヒューズを定義したりすると、 main() に到達する前に、ランタイム起動コードで不正なデータ初期化やプログラム実行のロックが発生する可能性があります。
小型デバイスでのヒューズ エラー (XC8-1778、XC8-1742) attiny4/5/9/10/20/40デバイスのヘッダーに誤ったヒューズ長が指定されていました。 fileヒューズを定義したコードをビルドしようとすると、リンカー エラーが発生します。
セグメンテーション 障害 (XC8-1777) 断続的なセグメンテーション障害が修正されました。
アセンブラーのクラッシュ (XC8-1761) Ubuntu 18 でコンパイラを実行すると、avr-as アセンブラがクラッシュした可能性があります。
オブジェクトがクリアされない (XC8-1752) 初期化されていない静的ストレージ期間オブジェクトが、ランタイム スタートアップ コードによってクリアされていない可能性があります。
競合するデバイス仕様は無視されます (XC8-1749) 複数のデバイス指定オプションが使用され、異なるデバイスを示した場合、コンパイラはエラーを生成しませんでした。
ヒープによるメモリ破損 (XC8-1748) _heap_start シンボルが正しく設定されていなかったため、通常の変数がヒープによって破損する可能性がありました。
リンカー再配置エラー (XC8-1739) コードにターゲットがちょうど 4k バイト離れた rjmp または rcall が含まれている場合、リンカの再配置エラーが発生する可能性がありました。
5.6. バージョン 2.00
なし。

既知の問題

以下は、コンパイラの操作に関する制限です。これらは、一般的なコーディング制限、またはユーザー マニュアルに記載されている情報からの逸脱である可能性があります。タイトル内の括弧で囲まれたラベルは、追跡データベースにおける問題の ID です。サポートに問い合わせる必要がある場合に役立ちます。ラベルのない項目は、操作方法を説明する制限であり、永続的に有効である可能性があります。
6.1. MPLAB X IDE 統合
MPLAB IDE 統合 コンパイラを MPLAB IDE から使用する場合は、コンパイラをインストールする前に MPLAB IDE をインストールする必要があります。
6.2. コード生成
section-anchors オプションによるセグメント エラー (XC8-3045) 可変引数リストを持つ関数を定義し、-fsection-anchors オプションを使用するプログラムで、内部コンパイラ エラー (セグメント エラー) が発生した可能性があります。
デバッグ情報が同期されていません (XC8-2948) リンカー緩和最適化により命令が縮小されると(例:ample 呼び出しから rcall 命令まで)、セクションで複数の縮小操作が発生すると、ソース行とアドレスのマッピングが同期されない可能性があります。
以下の例ではampつまり、相対呼び出しに緩和される foo への呼び出しが 2 つあります。
PA メモリ割り当てエラー (XC8-2881) 手続き型抽象化オプティマイザーを使用する場合、プログラムが使用可能なスペースに収まる必要がある場合でも、コード サイズがデバイスで使用可能なプログラム メモリの量に近い場合、リンカはメモリ割り当てエラーを報告することがあります。
あまり賢くない Smart-I0 (XC8-2872) const-data-in-progmem 機能が無効になっている場合、またはデバイスのフラッシュがすべてデータ メモリにマップされている場合、コンパイラの smart-io 機能は snprint f 関数に対して有効だが最適ではないコードを生成します。
さらにスマートでない Smart-I0 (XC8-2869) -flto オプションと -fno-builtin オプションの両方が使用されている場合、コンパイラの smart-io 機能は有効だが最適ではないコードを生成します。
最適ではない読み取り専用データの配置 (XC8-2849) リンカーは現在、APPCODE および APPDATA メモリ セクション、およびメモリ マップ内の [No-Read-While-Write 区分を認識しません。その結果、リンカーが読み取り専用データを不適切なメモリ領域に割り当てる可能性がわずかにあります。const-data-in-progmem 機能が有効になっている場合、特に const-data-in-config-mapped-progmem 機能も有効になっている場合は、データが誤って配置される可能性が高くなります。これらの機能は、必要に応じて無効にできます。
物体 file 処理命令(XC8-2863) オブジェクトの順序 fileリンカーによって処理される s は、手続き型抽象化の最適化 (-mpa オプション) の使用に基づいて異なる場合があります。 これは、複数のモジュールにわたって弱い関数を定義するコードにのみ影響します。
絶対リンクエラー (XC8-2777) RAM の先頭アドレスでオブジェクトが絶対化されており、初期化されていないオブジェクトも定義されている場合、リンカ エラーが発生する場合があります。
短いウェイクアップ ID (XC8-2775) ATA5700/2 デバイスの場合、PHIDO/1 レジスタは 16 ビット幅ではなく 32 ビット幅としてのみ定義されます。
シンボルの呼び出し時にリンカーがクラッシュする (XC8-2758) ソース コードが -cc.、–de f sym リンカー オプションを使用して定義されたシンボルを呼び出すときに -mrelax ドライバー オプションを使用すると、リンカーがクラッシュする可能性があります。
初期化が正しくありません(XC8-2679) 一部のグローバル/静的バイトサイズ オブジェクトの初期値がデータ メモリに配置される場所と、実行時に変数がアクセスされる場所との間に不一致があります。
不正な間接関数呼び出し (XC8-2628) 場合によっては、構造体の一部として格納された関数ポインターを介して行われた関数呼び出しが失敗することがあります。
strtof は、8 進浮動小数点数に対してゼロを返します (XC2626-XNUMX) ライブラリ関数strtofなどやscanf()などは、指数を指定しない16進浮動小数点数を常にゼロに変換します。例えば、amp上:
strtof (“Oxl”, &endptr) ;
I ではなく値 0 を返します。
不正確な Stack Advisor メッセージ (XC8-2542、XC8-2541) 場合によっては、(おそらく alloca() の使用による) 再帰または不確定スタックの使用に関するスタック アドバイザーの警告が発行されません。
重複した割り込みコードによる障害 (XC8-2421) 複数の割り込み関数が同じ本体を持っている場合、コンパイラーは、XNUMX つの割り込み関数の出力を別の割り込み関数呼び出しにする場合があります。 これにより、呼び出しが無効になったすべてのレジスタが不必要に保存され、現在の割り込みハンドラーのエピローグが実行される前でも割り込みが有効になり、コード エラーが発生する可能性があります。
無効な DFP パスによる不正な出力 (XC8-2376) コンパイラが無効な DFP パスと「仕様」で呼び出された場合 file が存在する場合、コンパイラは欠落しているデバイス ファミリ パックを報告せず、代わりに「スペック」を選択します。 fileとなり、無効な出力につながる可能性があります。 「スペック」 files は配布された DFP では最新ではない可能性があり、内部コンパイラ テストでのみ使用することを目的としていました。
メモリーオーバーラップが検出されない (XC8-1966) コンパイラは、アドレス (_at() 経由) で絶対化されたオブジェクトと、section() 指定子を使用して同じアドレスにリンクされている他のオブジェクトとのメモリ重複を検出しません。
ライブラリ関数と _memx での失敗 (XC8-1763) memxアドレス空間の引数で呼び出されたlibgcc float関数は失敗する可能性があります。ライブラリルーチンは一部のC演算子から呼び出されるため、例えばample では、次のコードが影響を受けます。
regFloatVar > memxFloatVar を返します。
限定的な libgcc 実装 (AVRTC-731) ATTiny4/5/9/10/20/40 製品の場合、libgcc の標準 C/Math ライブラリの実装は非常に制限されているか、存在しません。
プログラムメモリの制限 (AVRTC-732) ツールチェーンでは 128 KB を超えるプログラム メモリ イメージがサポートされていますが、-mre lax オプションを使用すると、必要な関数スタブが生成されず、緩和されずに、役立つエラー メッセージも表示されずにリンカーが中止される例が知られています。
名前空間の制限 (AVRTC-733) 名前付きアドレス空間はツールチェーンでサポートされていますが、ユーザー ガイドの「特殊な型修飾子」セクションに記載されている制限に従います。
タイムゾーン ライブラリ関数はGMTを前提としており、ローカルタイムゾーンをサポートしていないため、localtime()はgmtime()と同じ時間を返します。例:ampル。

file:///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm

ドキュメント / リソース

MICROCHIP MPLAB XC8 C コンパイラ開発ソフトウェア [pdf] 取扱説明書
MPLAB XC8 C、MPLAB XC8 C コンパイラ開発ソフトウェア、コンパイラ開発ソフトウェア、開発ソフトウェア、ソフトウェア

参考文献

コメントを残す

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