MICROCHIP-標誌

AVR MCU 的 MICROCHIP XC8 C 編譯器版本 2.45 發行說明

MICROCHIP-XC8-C-AVR-MCU-PRO 編譯器版本 2-45-發行說明

產品資訊

MPLAB XC8 C 編譯器是一款用於針對 Microchip AVR 裝置的軟體工具。它旨在編譯C程式碼並產生可執行文件 files 用於這些設備。本使用手冊中提到的編譯器版本為2.45,正式建置日期為18 年2023 月2.41 日。資訊以及將 MPLAB XC 編譯器與功能安全應用程式結合使用時的指南。當您購買功能安全許可證時,本手冊包含在文件包中。 MPLAB XC8 C 編譯器支援發佈時所有可用的 2023 位元 AVR MCU 裝置。可以參考avr_chipinfo.html file 在編譯器的 doc 目錄中取得所有支援的裝置及其配置位元設定的清單。 MPLAB XC8 編譯器有不同版本可用。與免費版本相比,授權(PRO)版本提供了更高等級的最佳化。要將編譯器啟動為許可產品,您需要購買啟動金鑰。然而,非授權版本無需許可證即可無限期使用。對於功能安全應用,可以使用 MPLAB XC8 功能安全編譯器。它需要從 Microchip 購買的功能安全許可證才能啟動。一旦激活,所有最佳化等級和編譯器功能都可以使用。 MPLAB XC 功能安全編譯器也支援網頁伺服器授權。有關安裝、啟動、許可證類型和遷移問題的詳細信息,請參閱安裝和授權 MPLAB XC C 編譯器 (DS50002059) 文件。

產品使用說明

  1. 在執行 MPLAB XC8 C 編譯器軟體之前,請先閱讀使用手冊,以了解針對 Microchip AVR 裝置的重要資訊和說明。
  2. 如果您使用的是 8 位元 PIC 元件的編譯器,請參閱 PIC 文件的 MPLAB XC8 C 編譯器發行說明。
  3. 確保您的作業系統符合運行編譯器的系統要求。 macOS 的二進位檔案已經過程式碼簽署和公證。 MPLAB XC 網路授權伺服器適用於 Microsoft Windows 10 及更高版本、Ubuntu 18.04 及更高版本以及 macOS 10.15 及更高版本。請注意,MPLAB XC 網路授權伺服器未在這些作業系統上進行測試。
  4. MPLAB XC 網路許可證伺服器可以使用網路授權虛擬機器許可證 (SW006021-VM) 在支援的作業系統的虛擬機器上執行。從版本 32 開始,所有 3.00 位元版本的 MPLAB XC 網路伺服器均已停產。
  5. 若要將 MPLAB XC8 C 編譯器啟動為授權 (PRO) 產品,請購買啟動金鑰。與免費版本相比,這將提供更高級別的優化。然而,非授權編譯器可以在沒有許可證的情況下無限期地運行。
  6. 如果您將 MPLAB XC8 功能安全編譯器用於功能安全應用,則必須使用從 Microchip 購買的功能安全性授權來啟動它。如果沒有此許可證,編譯器將無法運作。啟動後,您可以選擇任何最佳化等級並使用所有編譯器功能。此版本的 MPLAB XC 功能安全編譯器支援網頁伺服器授權。
  7. 有關 MPLAB XC8 C 編譯器的安裝、啟用和授權的詳細說明,請參閱安裝和授權 MPLAB XC C 編譯器 (DS50002059) 文件。
  8. 如果您在評估許可證下執行編譯器,則在評估期結束後 14 天內,您將在編譯期間收到警告。如果您在 HPA 訂閱結束後 14 天內,也會發出相同的警告。

超過view

介紹
此版本的 Microchip MPLAB® XC8 C 編譯器包含多項新功能、錯誤修復以及對新裝置的支援。

建置日期
該編譯器版本的官方建置日期是 18 年 2023 月 XNUMX 日。

以前的版本
先前的 MPLAB XC8 C 編譯器版本為 2.41,建置於 8 年 2023 月 XNUMX 日。

功能安全手冊
當您購買功能安全許可證時,文檔包中提供了 MPLAB XC 編譯器的功能安全手冊。

組件許可證和版本
用於 AVR MCU 的 MPLAB XC8 C 編譯器工具是根據 GNU 通用公共授權 (GPL) 編寫和分發的,這意味著其原始程式碼是免費分發並向公眾開放的。 GNU GPL 下的工具原始碼可以從 Microchip 單獨下載 web地點。 您可以閱讀 GNU GPL 中的 file named 位於安裝目錄的子目錄中。 可以在此處找到對 GPL 基礎原則的一般性討論。 為標頭提供的支持代碼 files、連結器腳本和運行時庫是專有程式碼,不受 GPL 保護。此編譯器是 GCC 版本 5.4.0、binutils 版本 2.26 的實現,並使用 avr-libc 版本 2.0.0。

系統需求
MPLAB XC8 C 編譯器及其使用的授權軟體適用於各種作業系統,包括以下 64 位元版本: Microsoft® Windows® 10 專業版、Ubuntu® 18.04、macOS® 13.2 (Ventura) 和Fedora 34。已經過代碼簽名。 macOS 的二進位檔案已經過程式碼簽署和公證。 MPLAB XC 網路授權伺服器適用於多種 64 位元作業系統,包括 Microsoft Windows 10 及更高版本; Ubuntu 18.04 以上版本;或 macOS 10.15 及更高版本。伺服器也可以在各種其他作業系統上執行,包括 Windows Server、Linux 發行版(例如 Oracle® Enterprise Linux® 和 Red Hat® Enterprise Linux)以及支援作業系統的舊版本。但是,MPLAB XC 網路授權伺服器未在這些作業系統上進行測試。 MPLAB XC 網路許可證伺服器可以使用網路授權虛擬機器許可證 (SW006021-VM) 在支援的作業系統的虛擬機器上執行。從版本 32 開始,MPLAB XC 網路伺服器的所有 3.00 位元版本已停產。

支持的設備
此編譯器支援發佈時所有可用的 8 位元 AVR MCU 設備。有關所有受支援設備的列表,請參閱 avr_chipinfo.html(在編譯器的文檔目錄中)。這些文件還列出了每個設備的配置位元設定。

版本和許可證升級
MPLAB XC8 編譯器可以作為授權(PRO)或非授權(免費)產品啟動。您需要購買啟動金鑰來授權您的編譯器。與免費產品相比,許可證允許更高級別的優化。未經許可的編譯器可以在沒有許可證的情況下無限期地運行。 MPLAB XC8 功能安全編譯器必須使用從 Microchip 購買的功能安全性授權來啟動。如果沒有此許可證,編譯器將無法運作。啟動後,您可以選擇任何最佳化等級並使用所有編譯器功能。此版本的 MPLAB XC 功能安全編譯器支援網頁伺服器授權。有關許可證類型和使用許可證安裝編譯器的信息,請參見《安裝和許可 MPLAB XC C 編譯器》(DS50002059) 文件。

安裝和激活
另請參閱遷移問題和限制部分,以了解有關此編譯器附帶的最新許可證管理器的重要資訊。如果使用 MPLAB IDE,請確保在安裝此工具之前安裝最新的 MPLAB X IDE 版本 5.0 或更高版本。安裝編譯器前退出 IDE。執行 .run (Linux) 或 .app (macOS) 編譯器安裝程式應用程序,例如 XC8-1.00.11403-windows.exe,然後按照螢幕上的指示進行操作。建議使用預設安裝目錄。如果您使用的是 Linux,則必須使用終端機並從 root 帳戶安裝編譯器。使用具有管理員權限的 macOS 帳戶進行安裝。現在啟動與安裝分開進行。有關更多信息,請參見文檔 MPLAB® XC C 編譯器的許可證管理器 (DS52059)。如果您選擇在評估許可證下執行編譯器,那麼當評估期結束後 14 天內,您將在編譯過程中收到警告。如果您在 HPA 訂閱結束後 14 天內,也會發出相同的警告。 XC 網路許可證伺服器是一個單獨的安裝程序,不包含在單一使用者編譯器安裝程序中。 XC License Manager 現在支援浮動網路授權的漫遊。針對行動用戶,此功能允許浮動許可證在短時間內脫離網路。使用此功能,您可以中斷網路連線並仍使用 MPLAB XC 編譯器。有關此功能的更多信息,請參閱 XCLM 安裝的 doc 資料夾。 MPLAB X IDE 包含一個許可證視窗(工具 > 許可證),用於直覺地管理漫遊。

解決安裝問題
如果您在任何 Windows 操作系統下安裝編譯器時遇到困難,請嘗試以下建議。

  • 以管理員身份運行安裝。
  • 將安裝程序應用程序的權限設置為“完全控制”。 (右鍵單擊文件,選擇屬性,安全選項卡,選擇用戶,編輯。)
  • 將臨時文件夾的權限設置為“完全控制”。

若要確定暫存資料夾的位置,請在執行指令中鍵入 %temp%(Windows 標誌鍵 + R)。這將開啟一個顯示該目錄的檔案總管對話框,並允許您確定該資料夾的路徑。

編譯器文檔
單擊 MPLAB X IDE 儀表板中的藍色幫助按鈕時,可以從瀏覽器中打開的 HTML 頁面打開編譯器的用戶指南,如屏幕截圖所示。MICROCHIP-XC8-C-AVR-MCU-2 編譯器版本 45-1-發行說明

如果您正在為 8 位 AVR 目標構建,用於 AVR® MCU 的 MPLAB® XC8 C 編譯器用戶指南包含有關適用於該架構的編譯器選項和功能的信息。

客戶支援
您可以在XC8論壇中向該產品的其他使用者提問。 Microchip 歡迎有關此編譯器版本的錯誤回報、建議或意見。請透過支援系統提出任何錯誤報告或功能請求。

文檔更新

如需在線和最新版本的 MPLAB XC8 文檔,請訪問 Microchip 的在線技術文檔 web地點。
此版本中新的或更新的 AVR 文檔:

沒有任何

  • 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 目標功能。 副標題中的版本號表示支持以下功能的第一個編譯器版本。

2.45版
通用許可證管理器(XC8-3175、XCLM-224)與編譯器一起使用的 macOS 版本許可證管理器現已通用,為基於 Intel 和 M1 的電腦提供本機支援。 Linux 版本的授權管理器現在至少需要 2.25 版的 glibc。 Mac 通用二進位檔案(XC8-3168、XC8-2951)macOS 的編譯器二進位檔案現已通用,為基於 Intel 和 M1 的機器提供本機支援。減少浮點庫大小(XC8-3112、XC8-3071) 對浮點庫函數進行了改進,包括 sinf()、pow()、sqrt()、expf()、log1fp() 和 nextafterf() ,這些例程的程式碼大小有所減少。新設備支援 現在可支援以下 AVR 裝置:AVR16EA28、AVR16EA32、AVR16EA48、AVR32EA28、AVR32EA32、AVR32EA48、AVR16EB14、AVR16EB20、AVR16EB28 和 AVR16EB32。

2.41版

  • Bootrow 支援 (XC8-3053) 編譯器會將帶有 .bootrow 前綴的任何節的內容放置在 HEX 檔案中的位址 0x860000 處。這些部分用於 BOOTROW 內存,該內存旨在存儲只能由引導程式存取的密鑰和其他安全資訊。
  • 冗餘返回消除 (XC8-3048) 當使用自訂連結器腳本時,編譯器現在將消除具有尾部跳躍的函數中的冗餘 ret 指令。這與先前執行的最佳化類似,但現在對所有孤立部分執行,即使使用自訂連結器腳本並且最佳分配方案未發揮作用也是如此。
  • 時間類型變更(XC8-2982、2932) C99 標準函式庫類型 time_t 已從 long long 變更為 unsigned long 類型,這使得一些與時間相關的函數(例如 mktime())的程式碼大小得到改進。
  • 新 nop (XC8-2946, 2945) 巨集 NOP() 已加入。此巨集將 nop 無操作指令插入輸出中。
  • XCLM 更新 (XC8-2944) 與編譯器一起使用的許可證管理器已更新,現在在檢查編譯器的許可證詳細信息時響應更快。
  • Tramp線性呼叫 (XC8-2760) 當指令的相對形式通常超出其目標範圍時,編譯器現在可以用較短的相對呼叫來取代長形式呼叫指令。在這種情況下,編譯器將嘗試用 rcall 指令替換為 jmp 呼叫指令,該指令將 'tramp在線'執行到所需的地址,例如amp樂:

2.40版

  • 新設備支持 現在支持以下 AVR 部件:AT90PWM3、AVR16DD14、AVR16DD20、AVR16DD28、AVR16DD32、AVR32DD14、AVR32DD20、AVR32DD28、AVR32DD32、AVR64EA28、AVR64EA32 和 AVR64EA48。
  • 改進的流程抽象 流程抽象 (PA) 最佳化工具已改進,以便可以概述包含函數呼叫指令 (call/rcall) 的程式碼。僅當堆疊不用於向函數傳遞參數或從函數獲取返回值時才會發生這種情況。當呼叫具有可變參數列表的函數或呼叫參數多於為此目的指定的暫存器的函數時,將使用堆疊。可以使用 –mno-pa-outline-calls 選項來停用此功能,或者可以使用 -mno-pa-on- 完全停用目標檔案和/或函數的過程抽象file -mno-pa-on-function,或透過選擇性地使用 nopa 屬性(__nopa 說明符)與函數。
  • 程式碼覆蓋率巨集 如果指定了有效的 -mcodecov 選項,編譯器現在定義巨集 __CODECOV。
  • 記憶體預留選項 xc8-cc 驅動程式現在在建立 AVR 目標時接受 -mreserve=space@start:end 選項。此選項保留資料或程式記憶體空間中的指定記憶體範圍,防止連結器在該區域填入程式碼或物件。
  • 更聰明的智慧IO 對智慧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 系列中的某些裝置具有 SFR(例如 FLMAP),用於指定程式記憶體的哪 32k 部分將對應到資料記憶體。新的 – mconst-data-in-config-mapped-progmem 選項可用於讓連結器將所有符合條件的資料放置在一個 32k 段中,並自動初始化相關的 SFR 暫存器,以確保該資料對應到資料儲存空間,在那裡可以更有效地訪問它。
  • Microchip 統一標準函式庫 所有 MPLAB XC 編譯器都將共用一個 Microchip 統一標準函式庫,現已隨本版本的 MPLAB XC8 提供。 AVR® MCU 的 MPLAB® XC8 C 編譯器使用者指南不再包含這些標準函數的文件。現在可以在 Microchip 統一標準庫參考指南中找到此資訊。請注意,先前由 avr-libc 定義的某些功能不再可用。 (請參閱庫功能。)
  • 智慧 IO 作為新統一庫的一部分,printf 和 scanf 系列中的 IO 函數現在是根據這些函數在程式中的使用方式在每次建置時自訂產生的。這可以大大減少程式使用的資源。
  • 智慧IO 輔助選項在分析對智慧IO 函數(例如printf() 或scanf())的呼叫時,編譯器無法始終從格式字串確定或從參數推斷呼叫所需的轉換說明符。是會執行以下操作:沒有假設並確保功能齊全的 IO 函數連結到最終程式映像中 新增了新的 -msmart-io-format=fmt 選項,以便使用者可以通知編譯器智慧 IO 使用的轉換說明符。用法不明確的函數,防止連結過長的IO 例程(有關更多詳細信息,請參閱smart-io-format 選項。)
  • 放置自訂節 以前,當連結器腳本定義同名的輸出節時,-Wl,–section-start 選項僅將指定節放置在請求的位址處。如果情況並非如此,則該節被放置在連結器選擇的位址處,並且該選項基本上被忽略。現在,即使連結器腳本未定義該部分​​,所有自訂部分都將遵循該選項。但請注意,對於標準節,例如 .text、.bss 或 .data ,最適合的分配器仍然可以完全控制它們的位置,並且該選項將不起作用。使用 -Wl,-Tsection=addr 選項,如使用者指南中所述。

2.32版

  • 堆疊指導 取得 PRO 編譯器授權後,編譯器的堆疊指導功能可用於估計程式使用的任何堆疊的最大深度。它建構並分析程式的呼叫圖,確定每個函數的堆疊使用情況,並產生報告,從中可以推斷程式使用的堆疊深度。此功能透過 -mchp-stack-usage 命令列選項啟用。執行後會列印堆疊使用情況的摘要。在映射文件中提供了詳細的堆疊報告,可以透過通常的方式請求該報告。
  • 新設備支援 支援以下 AVR 零件:ATTINY427、ATTINY424、ATTINY426、ATTINY827、ATTINY824、ATTINY826、AVR32DB32、AVR64DB48、AVR64DB64、AVR64DB28、DB32DB28DB64。
  • 收回的設備支援 不再對以下 AVR 零件提供支援:AVR16DA28、AVR16DA32 和 AVR16DA48。

2.31版
沒有任何。

2.30版

  • 防止資料初始化的新選項 新的 -mno-data-init 驅動程式選項可防止資料初始化和 bss 部分的清除。它的工作原理是抑制彙編檔案中 do_clear_bss 符號的輸出,這反過來又會阻止連結器包含這些例程。
  • 增強優化 已進行多項優化改進,包括刪除冗餘返回指令、刪除 skip-if-bit-is 指令後的一些跳轉,以及改進過程抽象和迭代此過程的能力。
    現在可以使用其他選項來控制其中一些最佳化,特別是 -fsection-anchors,它允許相對於一個符號執行靜態物件的存取; -mpa- iterations=n ,允許將程式抽象迭代的數量從預設值 2 更改; -mpa-callcost-shortcall,執行更積極的過程抽象,希望連結器可以放鬆長調用。如果未實現基本假設,最後一個選項可能會增加程式碼大小。
  • 新設備支援 支援以下 AVR 零件:AVR16DA28、AVR16DA32、AVR16DA48、AVR32DA28、AVR32DA32、AVR32DA48、AVR64DA28、AVR64DA32、AVR64DA48、AVR64、AVR64 128。
  • 縮回裝置支援 以下 AVR 元件不再提供支援:ATA5272、ATA5790、ATA5790N、ATA5791、ATA5795、ATA6285、ATA6286、ATA6612C、ATA6613C、ATA6614Q、ATA6616C、ATA6617C 和 664251C 和 XNUMXC。

版本 2.29(功能安全發布)

  • 內建編譯器的頭檔 為了確保編譯器能夠符合 MISRA 等語言規範, , 已經升級。此標頭包含所有內建函數的原型,例如 __builtin_avr_nop() 和 __builtin_avr_delay_cycles() 。某些內建程式可能不符合 MISRA 標準;透過將定義 __XC_STRICT_MISRA 新增至編譯器命令列可以省略這些。內建函數及其聲明已更新為使用固定寬度類型。

2.20版

  • 新設備支持 支持以下 AVR 部件:ATTINY1624、ATTINY1626 和 ATTINY1627。
  • 更好的最佳匹配分配 編譯器中的最佳匹配分配器 (BFA) 已得到改進,因此段的分配順序允許更好的優化。 BFA 現在支持命名地址空間並更好地處理數據初始化。
  • 改進的過程抽象現在對更多代碼序列執行過程抽象優化。 以前這種優化可能會增加代碼大小的情況已通過使優化代碼了解鏈接器的垃圾收集過程得到解決。
  • 缺少 AVR 彙編器 AVR 彙編器不再包含在該發行版中。

版本 2.19(功能安全發布)
沒有任何。

2.10版

  • 程式碼覆蓋率 此版本包含程式碼覆蓋率功能,有助於分析專案原始程式碼的執行程度。使用選項 -mcodecov=ram 啟用它。在硬體上執行程式後,程式碼覆蓋率資訊將在裝置中進行整理,並且可以透過程式碼覆蓋率插件將其傳輸到 MPLAB X IDE 並由 MPLAB X IDE 顯示。有關此插件的資訊請參閱 IDE 文件可以獲得。
    #pragma nocodecov 可用於從覆蓋率分析中排除後續函數。理想情況下,應在檔案開頭新增編譯指示,以從覆蓋率分析中排除整個檔案。或者,可以使用 __attribute__((nocodecov)) 從覆蓋率分析中排除特定函數。
  • 裝置描述檔 名為 avr_chipinfo.html 的新裝置檔案位於編譯器發行版的 docs 目錄中。該文件列出了編譯器支援的所有設備。點擊設備名稱,將開啟一個頁面,顯示該設備所有允許的配置位元設定/值對,其中包括amp萊斯。
  • 程式抽象 程式抽象最佳化已新增到編譯器中,它透過呼叫該區塊的提取副本來取代公共彙編程式碼區塊。這些由單獨的應用程式執行,該應用程式在選擇 2、3 或 s 級最佳化時由編譯器自動呼叫。這些優化減少了程式碼大小,但可能會降低執行速度和程式碼可偵錯性。可以使用選項 -mno-pa 在較高的最佳化層級停用程式抽象,也可以使用 -mpa 在較低的最佳化層級啟用(取決於您的授權)。可以使用 -mno-pa-on- 對目標檔案停用它file=filename ,或透過使用 -mno-pa-on- function=function 來停用函數。在原始程式碼中,可以透過將__attribute__((nopa)) 與函數的定義一起使用,或使用__nopa(它擴展為__attribute__((nopa,noinline)) 來停用函數的過程抽象,從而防止函數內聯並且存在內聯程式碼的抽象。
  • pragma 中的鎖定位元支援 #pragma config 現在可用於指定 AVR 鎖定位元以及其他配置位元。檢查 avr_chipinfo.html 檔案(如上所述)以取得與該編譯指示一起使用的設定/值對。
  • 新裝置支援 支援下列裝置:AVR28DA128、AVR64DA128、AVR32DA128 和 AVR48DA128。

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。

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 庫文件,因此是呼叫庫管理器的建議方法。如果遺留專案需要,可以使用早期編譯器版本中接受的舊式選項直接呼叫先前的庫管理員。

遷移問題

以下是編譯器現在以不同方式處理的功能。 如果將代碼移植到此編譯器版本,這些更改可能需要修改您的源代碼。 副標題中的版本號表示支持後續更改的第一個編譯器版本。

2.45版
沒有任何。

2.41版
刪除了不準確的 fma 函數 (XC8-2913) C99 標準函式庫 ( )並沒有以無限精度計算乘加到單次舍入,而是累積每次運算的捨入誤差。這些函數已從提供的庫中刪除。

2.40版
沒有任何。

版本 2.39(功能安全發布)
沒有任何。

2.36版
沒有任何。

2.35版

  • 字串轉基數的處理 (XC8-2420) 為了確保與其他 XC 編譯器的一致性,如果指定的基數大於 8,XC36 字串轉函數(如 strtol() 等)將不再嘗試轉換輸入字串並將設定 . C 標準沒有指定超過此基底值時函數的行為。
  • 不適當的速度最佳化 選擇 3 級最佳化 (-O3) 時啟用程式抽象最佳化。這些優化以犧牲程式碼速度為代價來減少程式碼大小,因此不應該執行。使用此最佳化等級的項目在使用此版本建置時可能會發現程式碼大小和執行速度方面的差異。
  • 函式庫功能 許多標準 C 函式庫函數的程式碼現在都來自 Microchip 的統一標準函式庫,在某些情況下,與先前的 avr-libc 函式庫提供的行為相比,該函式庫可能會表現出不同的行為。對於前amp檔案中,不再需要連結 lprintf_flt 函式庫(-lprintf_flt 選項)來開啟浮點格式說明符的格式化 IO 支援。 Microchip 統一標準函式庫的智慧型 IO 功能使該選項變得多餘。此外,不再需要使用 _P 後綴例程來操作快閃記憶體中的 const 字串的字串和記憶體函數(例如 strcpy_P() 等)。當啟用程式記憶體中的常數資料功能時,標準 C 例程(例如 strcpy())將正確處理此類資料。

2.32版
沒有任何。

2.31版
沒有任何。

2.30版
沒有任何。

版本 2.29(功能安全發布)
沒有任何。

2.2版
更改的 DFP 佈局 編譯器現在採用 DFP(設備系列包)使用的不同佈局。 這意味著較舊的 DFP 可能不適用於此版本,並且較舊的編譯器將無法使用最新的 DFP。

版本 2.19(功能安全發布)
沒有任何。

2.10版
沒有任何

2.05版
程式記憶體中的常數物件 請注意,預設情況下,const 限定的物件將在程式記憶體中放置和存取(如此處所述)。這會影響專案的大小和執行速度,但會減少 RAM 使用量。如果需要,可以使用 -mno-const-data-in-progmem 選項停用此功能。

2.00版

  • 配置熔絲 裝置配置熔絲現在可以使用 config pragma 進行編程,後面接著設定值對來指定熔絲狀態,例如 #pragma config WDTON = SET #pragma config BODLEVEL = BODLEVEL_4V3
  • 絕對物件和函數現在可以使用 CCI __at(address) 說明符將物件和函數放置在記憶體中的特定位址,例如amp樂:
    • #包括
      int foobar __at(0x800100);
      char __at(0x250) getID(int 偏移量) { … }
      此說明符的參數必須是一個常數,表示第一個位元組或指令將放置的位址。 RAM 位址使用偏移量 0x800000 來表示。啟用 CCI 以使用此功能。
  • 新的中斷函數語法 編譯器現在接受 CCI __interrupt(num) 說明符來指示 C 函數是中斷處理程序。說明符採用中斷號,例如amp樂:#include void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }

已解決的問題

以下是對編譯器所做的更正。這些可能會修復生成程式碼中的錯誤或將編譯器的操作變更為使用者指南預期或指定的操作。子標題中的版本號表示包含後續問題修復的第一個編譯器版本。標題中的括號標籤是該問題在追蹤資料庫中的標識。如果您需要聯繫支援人員,這些可能會很有用。
請注意,某些特定於設備的問題已在與設備關聯的設備系列包 (DFP) 中得到糾正。 有關對 DFP 所做更改的信息以及下載最新包的信息,請參見 MPLAB 包管理器。

2.45版

  • 漫遊許可證失敗 (XCLM-235) 漫遊許可證無法在使用 glibc 版本高於 2.28 的 Linux 平台上正常運作。
  • 結構數組的內部錯誤 (XC8-3069) 處理結構的多維數組成員時,地址空間限定符未正確傳播到數組。這導致位址空間限定資訊不符和內部編譯器錯誤。這種情況已得到糾正。
  • 對未初始化流的錯誤寫入(ML-353、XC8-3100) 如果未使用 FDEV_SETUP_STREAM 或 _init_stdout/_init_stderr 明確設定標準輸出/錯誤流,則嘗試寫入它們會導致未定義的行為。這也影響了 stdlib 函數的寫入,例如 perror()。現在,在初始化這些流之前對這些流的任何寫入都將被忽略。
  • 不支援的修飾符 (XC8-2505) avr-libc 函式庫不支援 printf 樣式轉換說明符中的 * 修飾符,例如ample“%.*f”。現在,透過 Microchip 統一標準函式庫的引入,這一點得到了支持。
  • 多個未初始化的警告 (XC8-2409) 當遇到未初始化的 const 陣列時,編譯器發出多個相同的警告訊息。訊息本來應該只發出一次,而現在出現這種情況時就是這樣。

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() 轉換的「主題序列」包含指數格式的浮點數,並且 e/E 後有意外字符時字符,然後在提供了endptr 的地方,它被分配了一個地址,使其指向後面的字符,而它應該指向e//E 字符本身,因為它還沒有被轉換。對於前ample, strtod(“100exx”, &ep) 應傳回 100.00 並將 ep 設定為指向字串的「exx」部分,而該函數傳回正確的值,但設定字串的「xx」部分。

2.40版

  • 過於寬鬆 (XC8-2876) 使用 -mrelax 選項時,編譯器不會將某些部分分配在一起,導致程式碼大小不太理想。使用新 MUSL 函式庫或使用弱符號的程式碼可能會發生這種情況。
  • 如警告 (XC8-2875) 所述,映射功能未停用 const-data-in-config-mapped-progmem 功能依賴於啟用的 const-data-in-progmem 功能。如果使用該選項明確啟用 const-data-in-config-mapped-progmem 功能,並且停用 const-data-in-progmem 功能,則連結步驟會失敗,儘管有警告訊息指出 const-data-in -config -mapped-progmem 功能已自動停用,這並不完全正確。在這種情況下,const-data-in-config-mapped-progmem 功能現已完全停用。
  • DFP 進行變更以正確存取 NVMCTRL (XC8-2848) AVR64EA 裝置所使用的執行時間啟動程式碼未考慮 NVMCTRL 暫存器處於設定變更保護 (CCP) 下,且無法將 IO SFR 設定為所使用的頁面透過const-data-in -config-mapped-progmem 編譯器功能。 AVR-Ex_DFP 版本 2.2.55 中所做的變更將允許執行時間啟動程式碼正確寫入該暫存器。
  • DFP 進行變更以避免快閃記憶體映射 (XC8-2847) AVR128DA28/32/48/64 晶片勘誤表 (DS80000882) 中報告的快閃記憶體映射元件功能問題的解決方法已實施。預設情況下,受影響的裝置不會套用 const-data-in-config-mapped-progmem 編譯器功能,此變更將出現在 AVR-Dx_DFP 版本 2.2.160 中。
  • sinhf 或 coshf 的建置錯誤 (XC8-2834) 嘗試使用 sinhf() 或 coshf() 函式庫函數會導致連結錯誤,描述未定義的參考。所引用的缺失函數現已包含在編譯器發行版中。
  • 使用 nopa 建置錯誤 (XC8-2833) 將 nopa 屬性與使用 __asm__() 指定組譯器名稱的函數一起使用會觸發來自組譯器的錯誤訊息。這種組合是不可能的。
  • 帶指標參數的可變參數函數失敗(XC8-2755、XC8-2731) 當const-data-in-progmem 功能啟用時,具有可變數量參數的函數期望在變數參數清單中傳遞24 位元(__memx 類型)指標已啟用。指向資料記憶體的指標參數會作為 16 位元物件傳遞,導致最終讀取時出現程式碼故障。當啟用 const-data-in-progmem 功能時,所有 16 位元指標參數現在都會轉換為 24 位元指標。
  • strtoxxx 函式庫函數失敗 (XC8-2620) 啟用 const-data-in-progmem 功能時,對於不在程式記憶體中的來源字串參數,無法正確更新 strtoxxx 函式庫函數中的 endptr 參數。
  • 無效轉換警報 (XC8-2612) 如果啟用了 const-in-progmem 功能並且字串文字的位址明確轉換為資料位址空間(刪除 const 限定詞),編譯器現在將發出錯誤,例如ample, (uint8_t *)“你好世界!” 。如果將常量資料指標明確轉換為資料位址空間時位址可能無效,則會發出警告。
  • 未初始化 const 物件的放置 (XC8-2408) 未初始化和 const 易失性物件 const
    沒有被放置在將全部或部分程式記憶體對應到資料位址空間的裝置上的程式記憶體中。對於這些設備,此類物件現在被放置在程式記憶體中,使其操作與其他設備一致。

版本 2.39(功能安全發布)
沒有任何。

2.36版
延遲時出錯 (XC8-2774) 預設自由模式最佳化中的微小變更阻止了操作數表達式常數折疊到延遲內建函數,導致它們被視為非常量並觸發錯誤:__builtin_avr_delay_cycles 需要一個編譯時整數持續的。

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) -Wl,–section-start 選項無法將節放置在指定的起始位址。對於任何自訂命名的部分,此問題已修復;但是,它不適用於任何標準節,例如 .text 或 .bss,必須使用 -Wl、-T 選項放置這些節。連結器在放鬆時崩潰 (XC8-2647) 當啟用 -mrelax 優化並且存在不適合可用記憶體的程式碼或資料部分時,連結器崩潰。現在,在這種情況下,會發出錯誤訊息。
  • 無 no-falling-back (XC8-2646) –nofallback 選項未正確實施,也未記錄。現在可以選擇此選項,以確保如果編譯器未獲得許可,編譯器不會回退到較低的最佳化設置,而是會發出錯誤。
  • 不適當的速度最佳化 (XC8-2637) 選擇 3 級最佳化 (-O3) 時啟用程式抽象最佳化。這些優化以犧牲程式碼速度為代價來減少程式碼大小,因此不應該執行。
  • 錯誤的 EEPROM 存取 (XC8-2629) 當啟用 – mconst-data-in-progmem 選項(這是預設狀態)時,eeprom_read_block 程式在 Xmega 裝置上無法正常運作,導致 EEPROM 記憶體無法正確讀取。
  • 記憶體分配無效(XC8-2593、XC8-2651) 當 -Ttext 或 -Tdata 連結器選項(例如amp指定使用 -Wl 驅動程式選項傳遞的檔案),對應的文字/資料區域原點已更新;然而,結束位址沒有相應調整,這可能導致該區域超出目標裝置的記憶體範圍。
  • 過度屬性函數導致崩潰 (XC8-2580) 如果使用多個中斷、訊號或 nmi 屬性(例如 __attribute__((__signal__, __interrupt__)) 宣告函數,編譯器會崩潰。
  • 無效的 ATtiny 中斷程式碼 (XC8-2465) 為 ATtiny 裝置建置且停用最佳化 (-O0) 時,中斷函數可能觸發操作數超出範圍
  • 未傳遞選項 (XC8-2452) 將 -Wl 選項與多個逗號分隔的連結器選項一起使用時,並非所有連結器選項都會傳遞給連結器。
  • 間接讀取程式記憶體時發生錯誤 (XC8-2450) 在某些情況下,從指向程式記憶體的指標讀取兩位元組值時,編譯器會產生內部錯誤(無法辨識的 insn )

2.32版
第二次存取程式庫失敗 (XC8-2381) 再次呼叫 Windows 版本的 xc8-ar.exe 庫存檔程式來存取現有庫存檔可能會失敗,並顯示無法重新命名錯誤訊息。

2.31版
無法解釋的編譯器故障 (XC8-2367) 在將系統暫存目錄設定為包含點「.」的路徑的 Windows 平台上執行時字符,編譯器可能無法執行。

2.30版

  • 概述後全域標籤放錯位置 (XC8-2299) 將全域標籤放置在透過流程抽象分解的組譯序列中的手寫彙編程式碼可能未正確重新定位。
  • 鬆弛崩潰 (XC8-2287) 當尾部跳躍鬆弛優化嘗​​試刪除不在節末的 ret 指令時,使用 -mrelax 選項可能會導致連結器崩潰。
  • 將標籤最佳化為值時崩潰 (XC8-2282) 使用「標籤作為值」GNU C 語言擴充的程式碼可能會導致流程抽象最佳化崩潰,並出現範圍跨度修復錯誤。
  • 不那麼 const (XC8-2271) strstr() 和其他函數的原型來自當停用 const -mconst-data-in-progmem 功能時,不再在傳回的字串指標上指定非標準限定符。請注意,對於 avrxmega3 和 avrtiny 設備,此功能將永久啟用。
  • 遺失初始化程序(XC8-2269) 當翻譯單元中的多個變數被放置在一個節中(使用__section 或__attribute__((section)) ),並且第一個此類變數被零初始化或沒有初始化程序時,初始化程序同一翻譯單元中放置在同一部分的其他變數遺失。

版本 2.29(功能安全發布)
沒有任何。

2.20版

  • 長命令錯誤 (XC8-1983) 當使用 AVR 目標時,如果命令列非常大且包含特殊字元(例如引號、反斜線等),編譯器可能會因找不到檔案錯誤而停止。
  • 未分配的 rodata 部分 (XC8-1920) AVR 鏈接器在為 avrxmega3 和 avrtiny 架構構建時無法為自定義 rodata 部分分配內存,可能會產生內存重疊錯誤

版本 2.19(功能安全發布)
沒有任何。

2.10版

  • 重定位失敗 (XC8-1891) 最適合的分配器是在連結器鬆弛後在各部分之間留下記憶體「孔」。除了記憶體碎片之外,這還增加了與 PC 相對跳轉或呼叫超出範圍相關的連結器重定位失敗的可能性。
  • Instructions not transformed by relaxation (XC8-1889) 鏈接器鬆弛不會發生在跳轉或調用指令中,如果鬆弛,其目標將變得可達。
  • 遺失的功能 (XC8E-388) 的幾個定義,例如clock_div_t和clock_prescale_set(),沒有為設備定義,包括ATmega324PB、ATmega328PB、ATtiny441和ATtiny841。
  • 缺少巨集 編譯器自動定義的預處理器巨集 _XC8_MODE_、__XC8_VERSION、__XC 和 __XC8。這些現已可用。

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() 標記定義指針對象,則會發生內部錯誤,例如ample, char * __at(0x800150) cp;如果遇到此類代碼,現在會發出警告。
  • 無法執行 main(XC8-1780、XC8-1767、XC8-1754) 在到達 main( )。
  • 小型設備的熔絲錯誤(XC8-1778、XC8-1742) attiny4/5/9/10/20/40 設備在其頭檔中指定了不正確的熔絲長度,這會在嘗試建造定義熔絲的程式碼時導致連結器錯誤。
  • 分段錯誤 (XC8-1777) 間歇性分段錯誤已修正。
  • 彙編器當機 (XC8-1761) 當編譯器在 Ubuntu 18 下運作時,avr-as 組譯器可能會崩潰。
  • 未清除物件 (XC8-1752) 運行時啟動程式碼可能未清除未初始化的靜態儲存持續時間物件。
  • 忽略衝突的裝置規格 (XC8-1749) 當使用多個裝置規格選項並指示不同的裝置時,編譯器不會產生錯誤。
  • 堆造成的記憶體損壞 (XC8-1748) __heap_start 符號設定不正確,導致普通變數可能被堆損壞。
  • 連結器重定位錯誤 (XC8-1739) 當程式碼包含目標正好 4k 位元組的 rjmp 或 rcall 時,可能會發出連結器重定位錯誤。

2.00版
沒有任何。

已知問題

以下是編譯器操作的限制。這些可能是一般編碼限制,或與使用者手冊中包含的資訊的偏差。標題中的括號標籤是該問題在追蹤資料庫中的標識。如果您需要聯繫支援人員,這可能會有幫助。那些沒有標籤的項目是描述操作方式的限制,並且可能永久有效。

MPLAB X IDE 集成

  • MPLAB IDE 整合 如果您想要從 MPLAB IDE 使用編譯器,則必須在安裝編譯器之前安裝 MPLAB IDE。
  • 陣列偵錯資訊 (XC8-3157) 編譯器產生的偵錯資訊無法準確傳達 __memx 位址空間中陣列的物件類型。這將阻止在 IDE 中觀察物件。

程式碼生成

  • 帶有節錨選項的段錯誤 (XC8-3045) 使用變數參數清單定義函數並使用 -fsection-anchors 選項的程式可能會觸發內部編譯器錯誤: 分段錯誤
  • 偵錯資訊不同步 (XC8-2948) 當連結器鬆弛最佳化縮小指令時(例如amp(例如,對 rcall 指令的呼叫),當某一節中發生多個收縮操作時,來源行到位址對應可能不會保持同步。在下面的例子中ample,有兩個對 foo 的調用最終放寬到相對調用。
  • PA 記憶體分配失敗 (XC8-2881) 當使用過程抽象優化器時,當程式碼大小接近裝置上的可用程式記憶體量時,連結器可能會報告記憶體分配錯誤,即使程式應該能夠適應可用的記憶體空間。 。
  • 不太智慧Smart-IO (XC8-2872) 如果const-data-in-progmem 功能已停用,或裝置具有其所有功能,則編譯器的smart-io 功能將為snprintf 函數產生有效但次優的程式碼。
  • 甚至不太聰明的 Smart-IO (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 功能,則資料放錯位置的可能性會增加。如果需要,可以停用這些功能。
  • 目標檔案處理順序 (XC8-2863) 連結器處理目標檔案的順序可能會因流程抽象最佳化(-mpa 選項)的使用而異。這只會影響跨多個模組定義弱函數的程式碼。
  • 絕對連結器錯誤 (XC8-2777) 當在 RAM 起始位址處將物件設為絕對物件並且也定義了未初始化的物件時,可能會觸發連結器錯誤。
  • 短喚醒 ID (XC8-2775) 對於 ATA5700/2 裝置,PHID0/1 暫存器僅定義為 16 位元寬,而非 32 位元寬。
  • 呼叫符號時連結器崩潰 (XC8-2758) 如果在原始程式碼呼叫使用 –Wl,–defsym 連結器選項定義的符號時使用 -mrelax 驅動程式選項,則連結器可能會崩潰。
  • 初始化不正確 (XC8-2679) 某些全域/靜態位元組大小物件的初始值在資料記憶體中的放置位置與執行時間存取變數的位置之間存在差異。
  • 錯誤的間接函數呼叫 (XC8-2628) 在某些情況下,透過作為結構的一部分儲存的函數指標進行的函數呼叫可能會失敗。
  • strtof 對於十六進位浮點數傳回零 (XC8-2626) 函式庫函數 strtof() 等和 scanf() 等將始終將未指定指數的十六進位浮點數轉換為零。對於前ample: strtof(“0x1”, &endptr);將傳回值 0,而不是 1。
  • 堆疊顧問訊息傳遞不準確(XC8-2542、XC8-2541) 在某些情況下,不會發出有關遞歸或使用不確定堆疊(可能透過使用 alloca())的堆疊顧問警告。
  • 重複中斷程式碼失敗 (XC8-2421) 如果多個中斷函數具有相同的主體,則編譯器可能會產生一個中斷函數呼叫另一個中斷函數的輸出。這將導致所有被呼叫破壞的暫存器被不必要地保存,並且即使在當前中斷處理程序的尾聲運行之前中斷也會被啟用,這可能導致程式碼失敗。
  • 無效 DFP 路徑的錯誤輸出 (XC8-2376) 如果使用無效的 DFP 路徑呼叫編譯器,且所選裝置存在「spec」文件,則編譯器不會報告遺失的裝置系列包,而是選擇「spec」文件,這可能會導致無效的輸出。 「spec」文件可能不是分散式 DFP 的最新文件,並且僅用於內部編譯器測試。
  • 未偵測到記憶體重疊(XC8-1966) 編譯器未偵測到在某個位址(透過__at())實現絕對化的物件以及使用__section() 說明符且連結到同一位址的其他物件的記憶體重疊。
  • 函式庫函數和 __memx 失敗 (XC8-1763) 使用 __memx 位址空間中的參數呼叫的 libgcc float 函數可能會失敗。請注意,函式庫例程是從某些 C 運算子呼叫的,因此,例如ample,以下代碼受到影響:return regFloatVar > memxFloatVar;
  • 有限的 libgcc 實作 (AVRTC-731) 對於 ATTiny4/5/9/10/20/40 產品,libgcc 中的標準 C/數學函式庫實作非常有限或不存在。
  • 程式記憶體限制 (AVRTC-732) 工具鏈支援超過 128 kb 的程式記憶體映像;然而,在某些已知的實例中,當使用 -mrelax 選項時,連結器會在沒有鬆弛的情況下中止,並且沒有有用的錯誤訊息,而不是產生所需的函數存根。
  • 命名空間限制 (AVRTC-733) 工具鏈支援命名位址空間,但須遵守使用者指南特殊類型限定符部分中提到的限制。
  • 時區函式庫函數假定 GMT 且不支援本機時區,因此 localtime() 將傳回與 gmtime() 相同的時間,例如amp勒。

文件/資源

AVR MCU 的 MICROCHIP XC8 C 編譯器版本 2.45 發行說明 [pdf] 指示
AVR MCU、XC8 C、XC8 C 編譯器版本 2.45 AVR MCU 發行說明、AVR MCU 編譯器版本 2.45 發行說明、AVR MCU 版本 2.45 發行說明、AVR MCU 發行說明、AVR MCU 說明、AVR MCU

參考

發表評論

您的電子郵件地址不會被公開。 必填欄位已標記 *