โลโก้ไมโครชิป

MICROCHIP XC8 C Compiler เวอร์ชัน 2.45 บันทึกประจำรุ่นสำหรับ AVR MCU

MICROCHIP-XC8-C-คอมไพเลอร์-Version-2-45-Release-Notes-for-AVR-MCU-PRO

ข้อมูลสินค้า

MPLAB XC8 C Compiler คือเครื่องมือซอฟต์แวร์ที่ใช้สำหรับกำหนดเป้าหมายอุปกรณ์ Microchip AVR ได้รับการออกแบบมาเพื่อรวบรวมโค้ด C และสร้างไฟล์ปฏิบัติการได้ fileสำหรับอุปกรณ์เหล่านี้ เวอร์ชันของคอมไพเลอร์ที่อ้างถึงในคู่มือผู้ใช้นี้คือ 2.45 โดยมีวันที่สร้างอย่างเป็นทางการคือวันที่ 18 สิงหาคม 2023 เวอร์ชันก่อนหน้าคือ 2.41 สร้างขึ้นเมื่อวันที่ 8 กุมภาพันธ์ 2023 คอมไพเลอร์มาพร้อมกับคู่มือความปลอดภัยด้านการทำงาน ซึ่งให้ข้อมูลเพิ่มเติม และแนวทางปฏิบัติเมื่อใช้คอมไพเลอร์ MPLAB XC กับแอปพลิเคชันความปลอดภัยเชิงฟังก์ชัน คู่มือนี้จะรวมอยู่ในชุดเอกสารประกอบเมื่อคุณซื้อใบอนุญาตความปลอดภัยในการทำงาน MPLAB XC8 C Compiler รองรับอุปกรณ์ AVR MCU 8 บิตที่มีอยู่ทั้งหมด ณ เวลาที่เปิดตัว คุณสามารถอ้างถึง avr_chipinfo.html file ในไดเร็กทอรี doc ของคอมไพลเลอร์เพื่อดูรายการอุปกรณ์ที่รองรับทั้งหมดและการตั้งค่าบิตการกำหนดค่า มีคอมไพเลอร์ MPLAB XC8 ให้เลือกหลายรุ่น รุ่นลิขสิทธิ์ (PRO) ให้การเพิ่มประสิทธิภาพในระดับที่สูงกว่าเมื่อเปรียบเทียบกับรุ่นฟรี หากต้องการเปิดใช้งานคอมไพเลอร์เป็นผลิตภัณฑ์ลิขสิทธิ์ คุณต้องซื้อรหัสเปิดใช้งาน อย่างไรก็ตาม เวอร์ชันที่ไม่มีใบอนุญาตสามารถใช้งานได้โดยไม่มีกำหนดโดยไม่มีใบอนุญาต สำหรับการใช้งานด้านความปลอดภัยในการใช้งาน มีคอมไพเลอร์ MPLAB XC8 Functional Safety จำหน่าย ต้องมีใบอนุญาตความปลอดภัยด้านการทำงานที่ซื้อจาก Microchip เพื่อเปิดใช้งาน เมื่อเปิดใช้งานแล้ว คุณจะสามารถใช้ระดับการปรับให้เหมาะสมและคุณสมบัติคอมไพเลอร์ทั้งหมดได้ MPLAB XC Functional Safety Compiler ยังรองรับ Network Server License อีกด้วย ข้อมูลโดยละเอียดเกี่ยวกับการติดตั้ง การเปิดใช้งาน ประเภทใบอนุญาต และปัญหาการย้ายสามารถดูได้ในเอกสารการติดตั้งและการอนุญาตให้ใช้สิทธิ์ MPLAB XC C Compilers (DS50002059)

คำแนะนำการใช้ผลิตภัณฑ์

  1. ก่อนที่จะรันซอฟต์แวร์ MPLAB XC8 C Compiler โปรดอ่านคู่มือผู้ใช้เพื่อดูข้อมูลสำคัญและคำแนะนำเฉพาะสำหรับการกำหนดเป้าหมายอุปกรณ์ Microchip AVR
  2. หากคุณกำลังใช้คอมไพเลอร์สำหรับอุปกรณ์ PIC 8 บิต โปรดดูเอกสารบันทึกประจำรุ่นของคอมไพลเลอร์ MPLAB XC8 C สำหรับ PIC
  3. ตรวจสอบให้แน่ใจว่าระบบปฏิบัติการของคุณตรงตามข้อกำหนดของระบบสำหรับการรันคอมไพลเลอร์ ไบนารีสำหรับ macOS ได้รับการลงนามด้วยรหัสและรับรองแล้ว เซิร์ฟเวอร์สิทธิ์การใช้งานเครือข่าย MPLAB XC ใช้งานได้กับ Microsoft Windows 10 ขึ้นไป, Ubuntu 18.04 ขึ้นไป และ macOS 10.15 ขึ้นไป โปรดทราบว่าเซิร์ฟเวอร์สิทธิ์การใช้งานเครือข่าย MPLAB XC ไม่ได้รับการทดสอบบนระบบปฏิบัติการเหล่านี้
  4. เซิร์ฟเวอร์สิทธิ์การใช้งานเครือข่าย MPLAB XC สามารถทำงานบนเครื่องเสมือนของระบบปฏิบัติการที่รองรับ โดยใช้สิทธิ์การใช้งานเครื่องเสมือนสำหรับสิทธิ์การใช้งานเครือข่าย (SW006021-VM) MPLAB XC Network Server เวอร์ชัน 32 บิตทั้งหมดจะถูกยกเลิกโดยเริ่มตั้งแต่เวอร์ชัน 3.00
  5. หากต้องการเปิดใช้งาน MPLAB XC8 C Compiler เป็นผลิตภัณฑ์ที่ได้รับลิขสิทธิ์ (PRO) ให้ซื้อรหัสเปิดใช้งาน สิ่งนี้จะให้การเพิ่มประสิทธิภาพในระดับที่สูงกว่าเมื่อเปรียบเทียบกับเวอร์ชันฟรี อย่างไรก็ตาม คอมไพเลอร์ที่ไม่มีใบอนุญาตสามารถดำเนินการได้อย่างไม่มีกำหนดโดยไม่มีใบอนุญาต
  6. หากคุณใช้ MPLAB XC8 Functional Safety Compiler สำหรับการใช้งานด้านความปลอดภัยในการใช้งาน จะต้องเปิดใช้งานด้วยใบอนุญาตความปลอดภัยด้านการทำงานที่ซื้อจาก Microchip คอมไพเลอร์จะไม่ทำงานหากไม่มีใบอนุญาตนี้ เมื่อเปิดใช้งานแล้ว คุณสามารถเลือกระดับการปรับให้เหมาะสมและใช้คุณสมบัติคอมไพเลอร์ทั้งหมดได้ สิทธิ์การใช้งานเซิร์ฟเวอร์เครือข่ายได้รับการสนับสนุนโดย MPLAB XC Functional Safety Compiler รุ่นนี้
  7. สำหรับคำแนะนำโดยละเอียดเกี่ยวกับการติดตั้ง การเปิดใช้งาน และการออกใบอนุญาต MPLAB XC8 C Compiler โปรดดูเอกสารการติดตั้งและการอนุญาตให้ใช้สิทธิ์ MPLAB XC C Compilers (DS50002059)
  8. หากคุณใช้งานคอมไพลเลอร์ภายใต้สิทธิ์การใช้งานการประเมิน คุณจะได้รับคำเตือนระหว่างการคอมไพล์เมื่อคุณอยู่ภายใน 14 วันหลังจากสิ้นสุดระยะเวลาการประเมินของคุณ คำเตือนเดียวกันนี้จะเกิดขึ้นหากคุณอยู่ภายใน 14 วันนับจากวันสิ้นสุดการสมัครสมาชิก HPA

เกินview

การแนะนำ
คอมไพเลอร์ Microchip MPLAB® XC8 C รุ่นนี้ประกอบด้วยฟีเจอร์ใหม่ การแก้ไขข้อบกพร่อง และการรองรับอุปกรณ์ใหม่หลายประการ

วันที่สร้าง
วันที่สร้างอย่างเป็นทางการของเวอร์ชันคอมไพเลอร์นี้คือ 18 สิงหาคม 2023

รุ่นก่อนหน้า
คอมไพเลอร์ MPLAB XC8 C เวอร์ชันก่อนหน้าคือ 2.41 สร้างเมื่อวันที่ 8 กุมภาพันธ์ 2023

คู่มือความปลอดภัยในการทำงาน
คู่มือความปลอดภัยในการทำงานสำหรับคอมไพเลอร์ MPLAB XC มีอยู่ในแพ็คเกจเอกสารเมื่อคุณซื้อใบอนุญาตความปลอดภัยในการทำงาน

สิทธิ์การใช้งานส่วนประกอบและเวอร์ชัน
MPLAB XC8 C Compiler สำหรับเครื่องมือ AVR MCU ได้รับการเขียนและเผยแพร่ภายใต้ GNU General Public License (GPL) ซึ่งหมายความว่าซอร์สโค้ดของมันถูกแจกจ่ายอย่างอิสระและเข้าถึงได้สู่สาธารณะ ซอร์สโค้ดสำหรับเครื่องมือภายใต้ GNU GPL สามารถดาวน์โหลดแยกต่างหากจากของ Microchip webเว็บไซต์. คุณสามารถอ่าน GNU GPL ได้ในไฟล์ file ชื่ออยู่ในไดเร็กทอรีย่อยของไดเร็กทอรีการติดตั้งของคุณ การอภิปรายทั่วไปเกี่ยวกับหลักการที่เป็นรากฐานของ 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) รุ่น Professional และ Fedora 34 ไบนารีสำหรับ Windows ได้รับการลงนามด้วยรหัส ไบนารีสำหรับ macOS ได้รับการลงนามด้วยรหัสและรับรองแล้ว เซิร์ฟเวอร์สิทธิ์การใช้งานเครือข่าย MPLAB XC พร้อมใช้งานสำหรับระบบปฏิบัติการ 64 บิตที่หลากหลาย รวมถึง Microsoft Windows 10 ขึ้นไป อูบุนตู 18.04 ขึ้นไป; หรือ macOS 10.15 ขึ้นไป เซิร์ฟเวอร์ยังอาจทำงานบนระบบปฏิบัติการอื่นๆ มากมาย รวมถึง Windows Server, Linux distributions เช่น Oracle® Enterprise Linux® และ Red Hat® Enterprise Linux รวมถึงระบบปฏิบัติการเวอร์ชันเก่าที่รองรับ อย่างไรก็ตาม เซิร์ฟเวอร์สิทธิ์การใช้งานเครือข่าย MPLAB XC ไม่ได้รับการทดสอบบนระบบปฏิบัติการเหล่านี้ เซิร์ฟเวอร์สิทธิ์การใช้งานเครือข่าย MPLAB XC สามารถทำงานบนเครื่องเสมือนของระบบปฏิบัติการที่รองรับ โดยใช้สิทธิ์การใช้งานเครื่องเสมือนสำหรับสิทธิ์การใช้งานเครือข่าย (SW006021-VM) MPLAB XC Network Server เวอร์ชัน 32 บิตทั้งหมดจะถูกยกเลิกโดยเริ่มตั้งแต่เวอร์ชัน 3.00

อุปกรณ์ที่สนับสนุน
คอมไพเลอร์นี้รองรับอุปกรณ์ AVR MCU 8 บิตที่มีอยู่ทั้งหมด ณ เวลาที่วางจำหน่าย ดู avr_chipinfo.html (ในไดเร็กทอรี doc ของคอมไพลเลอร์) สำหรับรายการอุปกรณ์ที่รองรับทั้งหมด ไฟล์เหล่านี้ยังแสดงรายการการตั้งค่าบิตการกำหนดค่าสำหรับแต่ละอุปกรณ์

รุ่นและการอัพเกรดใบอนุญาต
คอมไพเลอร์ MPLAB XC8 สามารถเปิดใช้งานเป็นผลิตภัณฑ์ที่มีลิขสิทธิ์ (PRO) หรือไม่มีลิขสิทธิ์ (ฟรี) คุณต้องซื้อรหัสเปิดใช้งานเพื่อให้สิทธิ์ใช้งานคอมไพเลอร์ของคุณ ใบอนุญาตช่วยให้เพิ่มประสิทธิภาพในระดับที่สูงกว่าเมื่อเปรียบเทียบกับผลิตภัณฑ์ฟรี คอมไพเลอร์ที่ไม่มีใบอนุญาตสามารถดำเนินการได้อย่างไม่มีกำหนดโดยไม่มีใบอนุญาต คอมไพเลอร์ MPLAB XC8 Functional Safety ต้องเปิดใช้งานด้วยใบอนุญาตความปลอดภัยด้านการทำงานที่ซื้อจาก Microchip คอมไพเลอร์จะไม่ทำงานหากไม่มีใบอนุญาตนี้ เมื่อเปิดใช้งานแล้ว คุณสามารถเลือกระดับการปรับให้เหมาะสมและใช้คุณสมบัติคอมไพเลอร์ทั้งหมดได้ MPLAB XC Functional Safety Compiler รุ่นนี้รองรับ Network Server License ดูเอกสารการติดตั้งและการอนุญาตให้ใช้สิทธิ์ MPLAB XC C Compilers (DS50002059) สำหรับข้อมูลเกี่ยวกับประเภทใบอนุญาตและการติดตั้งคอมไพเลอร์พร้อมใบอนุญาต

การติดตั้งและเปิดใช้งาน
ดูเพิ่มเติมที่ส่วนปัญหาและข้อจำกัดในการย้ายข้อมูลสำหรับข้อมูลสำคัญเกี่ยวกับตัวจัดการใบอนุญาตล่าสุดที่มาพร้อมกับคอมไพเลอร์นี้ หากใช้ MPLAB IDE ต้องแน่ใจว่าได้ติดตั้ง MPLAB X IDE เวอร์ชัน 5.0 หรือใหม่กว่าก่อนติดตั้งเครื่องมือนี้ ออกจาก IDE ก่อนที่จะติดตั้งคอมไพเลอร์ เรียกใช้แอปพลิเคชันตัวติดตั้งคอมไพเลอร์ .run (Linux) หรือ .app (macOS) เช่น XC8-1.00.11403-windows.exe และทำตามคำแนะนำบนหน้าจอ แนะนำให้ใช้ไดเร็กทอรีการติดตั้งเริ่มต้น หากคุณใช้ Linux คุณต้องติดตั้งคอมไพลเลอร์โดยใช้เทอร์มินัลและจากบัญชีรูท ติดตั้งโดยใช้บัญชี macOS ที่มีสิทธิ์ของผู้ดูแลระบบ ขณะนี้การเปิดใช้งานดำเนินการแยกจากการติดตั้ง ดูเอกสาร License Manager สำหรับ MPLAB® XC C Compilers (DS52059) สำหรับข้อมูลเพิ่มเติม หากคุณเลือกที่จะรันคอมไพลเลอร์ภายใต้สิทธิ์การใช้งานการประเมิน คุณจะได้รับคำเตือนระหว่างการคอมไพล์เมื่อคุณอยู่ภายใน 14 วันนับจากวันสิ้นสุดระยะเวลาการประเมินของคุณ คำเตือนเดียวกันนี้จะเกิดขึ้นหากคุณอยู่ภายใน 14 วันนับจากวันสิ้นสุดการสมัครสมาชิก HPA XC Network License Server เป็นตัวติดตั้งแยกต่างหาก และไม่รวมอยู่ในตัวติดตั้งคอมไพเลอร์ผู้ใช้คนเดียว ขณะนี้ XC License Manager รองรับการโรมมิ่งใบอนุญาตเครือข่ายแบบลอยตัว ฟีเจอร์นี้มุ่งเป้าไปที่ผู้ใช้มือถือ โดยอนุญาตให้สิทธิ์ใช้งานลอยออกจากเครือข่ายได้ในช่วงเวลาสั้นๆ เมื่อใช้คุณสมบัตินี้ คุณสามารถยกเลิกการเชื่อมต่อจากเครือข่ายและยังคงใช้คอมไพเลอร์ MPLAB XC ของคุณได้ ดูโฟลเดอร์เอกสารของการติดตั้ง XCLM สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคุณสมบัตินี้ MPLAB X IDE มีหน้าต่างใบอนุญาต (เครื่องมือ > ใบอนุญาต) เพื่อจัดการการโรมมิ่งด้วยภาพ

การแก้ไขปัญหาการติดตั้ง
หากคุณประสบปัญหาในการติดตั้งคอมไพเลอร์ภายใต้ระบบปฏิบัติการ Windows ใดๆ ให้ลองทำตามคำแนะนำต่อไปนี้

  • เรียกใช้การติดตั้งในฐานะผู้ดูแลระบบ
  • ตั้งค่าการอนุญาตของแอปพลิเคชันตัวติดตั้งเป็น 'ควบคุมทั้งหมด' (คลิกขวาที่ไฟล์ เลือก Properties แท็บ Security เลือกผู้ใช้ แก้ไข)
  • ตั้งค่าสิทธิ์ของโฟลเดอร์ temp เป็น 'Full Control'

หากต้องการระบุตำแหน่งของโฟลเดอร์ temp ให้พิมพ์ %temp% ลงในคำสั่ง Run (แป้นโลโก้ Windows + R) นี่จะเป็นการเปิดกล่องโต้ตอบ File Explorer ที่แสดงไดเร็กทอรีนั้นและจะช่วยให้คุณสามารถกำหนดเส้นทางของโฟลเดอร์นั้นได้

เอกสารประกอบคอมไพเลอร์
คู่มือผู้ใช้ของคอมไพเลอร์สามารถเปิดได้จากหน้า HTML ที่เปิดขึ้นในเบราว์เซอร์ของคุณเมื่อคลิกปุ่มความช่วยเหลือสีน้ำเงินในแดชบอร์ด MPLAB X IDE ตามที่ระบุไว้ในภาพหน้าจอMICROCHIP-XC8-C-คอมไพเลอร์-เวอร์ชัน-2-45-หมายเหตุเผยแพร่-สำหรับ-AVR-MCU-1

หากคุณกำลังสร้างสำหรับเป้าหมาย AVR 8 บิต คู่มือผู้ใช้คอมไพเลอร์ MPLAB® XC8 C สำหรับ AVR® MCU จะมีข้อมูลเกี่ยวกับตัวเลือกคอมไพเลอร์และคุณสมบัติที่ใช้กับสถาปัตยกรรมนี้

การสนับสนุนลูกค้า
คุณสามารถถามคำถามกับผู้ใช้ผลิตภัณฑ์นี้รายอื่นได้ในฟอรัม XC8 ไมโครชิปยินดีรับรายงานข้อผิดพลาด คำแนะนำ หรือความคิดเห็นเกี่ยวกับเวอร์ชันคอมไพเลอร์นี้ กรุณาส่งรายงานข้อผิดพลาดหรือการร้องขอคุณสมบัติผ่านทางระบบสนับสนุน

เอกสารอัพเดท

สำหรับเอกสาร MPLAB XC8 เวอร์ชันออนไลน์และล่าสุด โปรดไปที่เอกสารทางเทคนิคออนไลน์ของไมโครชิป webเว็บไซต์.
เอกสาร AVR ใหม่หรือที่อัปเดตในรุ่นนี้:

ไม่มี

  • AVR® GNU Toolchain เป็น MPLAB® XC8 Migration Guide อธิบายการเปลี่ยนแปลงในซอร์สโค้ดและตัวเลือกการสร้างที่อาจจำเป็น หากคุณตัดสินใจย้ายโปรเจ็กต์ที่ใช้ C จาก AVR 8-bit GNU Toolchain ไปยัง Microchip MPLAB XC8 C Compiler
  • คู่มืออ้างอิง Microchip Uniified Standard Library อธิบายลักษณะการทำงานและส่วนต่อประสานกับฟังก์ชันที่กำหนดโดย Microchip Uniified Standard Library รวมถึงการใช้งานประเภทไลบรารีและมาโครตามวัตถุประสงค์ ข้อมูลบางส่วนนี้เคยมีอยู่ในคู่มือผู้ใช้คอมไพเลอร์ MPLAB® XC8 C สำหรับ AVR® MCU ข้อมูลไลบรารีเฉพาะอุปกรณ์ยังคงมีอยู่ในคู่มือคอมไพเลอร์นี้
  • หากคุณเพิ่งเริ่มต้นด้วยอุปกรณ์ 8 บิตและ MPLAB XC8 C Compiler ผู้ใช้MPLAB® XC8
  • คำแนะนำสำหรับวิศวกรฝังตัว – AVR® MCU (DS50003108) มีข้อมูลเกี่ยวกับการตั้งค่าโปรเจ็กต์ใน MPLAB X IDE และการเขียนโค้ดสำหรับโปรเจ็กต์ MPLAB XC8 C แรกของคุณ ขณะนี้คู่มือนี้เผยแพร่พร้อมกับคอมไพเลอร์แล้ว
  • คู่มือผู้ใช้ Hexmate มีไว้สำหรับผู้ที่ใช้งาน Hexmate เป็นแอปพลิเคชันแบบสแตนด์อโลน

มีอะไรใหม่

ต่อไปนี้เป็นคุณลักษณะใหม่ของ AVR-target ที่ตอนนี้คอมไพเลอร์รองรับ หมายเลขเวอร์ชันในหัวข้อย่อยระบุเวอร์ชันคอมไพเลอร์แรกที่รองรับคุณสมบัติที่ตามมา

เวอร์ชัน 2.45
ตัวจัดการใบอนุญาตแบบสากล (XC8-3175, XCLM-224) ตัวจัดการใบอนุญาตเวอร์ชัน macOS ที่ใช้กับคอมไพเลอร์นั้นเป็นแบบสากล โดยให้การสนับสนุนแบบเนทิฟสำหรับทั้งเครื่องที่ใช้ Intel และ M1 ขณะนี้ตัวจัดการใบอนุญาตเวอร์ชัน Linux ต้องการ glibc เวอร์ชัน 2.25 เป็นอย่างน้อย ไบนารีสากลของ 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 ที่ที่อยู่ 0x860000 ในไฟล์ HEX ส่วนเหล่านี้ใช้สำหรับหน่วยความจำ BOOTROW ซึ่งออกแบบมาเพื่อจัดเก็บคีย์และข้อมูลความปลอดภัยอื่นๆ ที่บูตโหลดเดอร์ควรสามารถเข้าถึงได้เท่านั้น
  • การกำจัดการส่งคืนที่ซ้ำซ้อน (XC8-3048) คอมไพเลอร์จะกำจัดคำสั่งการทำซ้ำที่ซ้ำซ้อนในฟังก์ชันด้วยการข้ามหางเมื่อใช้สคริปต์ตัวเชื่อมโยงแบบกำหนดเอง นี่คือการปรับให้เหมาะสมที่คล้ายคลึงกับที่ดำเนินการก่อนหน้านี้ แต่ตอนนี้ดำเนินการกับส่วนที่ละเลยทั้งหมด แม้ว่าจะใช้สคริปต์ตัวเชื่อมโยงที่กำหนดเองและรูปแบบการจัดสรรที่เหมาะสมที่สุดไม่ได้ใช้งานอยู่ก็ตาม
  • การเปลี่ยนแปลงประเภทเวลา (XC8-2982, 2932) ประเภทไลบรารีมาตรฐาน C99 time_t ได้ถูกเปลี่ยนจาก long long เป็นประเภทยาวที่ไม่ได้ลงนาม ซึ่งให้การปรับปรุงขนาดโค้ดในฟังก์ชันที่เกี่ยวข้องกับเวลาบางอย่าง เช่น mktime()
  • ใหม่ nop (XC8-2946, 2945) มีการเพิ่มมาโคร NOP() ลงใน - แมโครนี้จะแทรกคำสั่ง nop no-operation ลงในเอาต์พุต
  • อัปเดตเป็น XCLM (XC8-2944) ตัวจัดการสิทธิ์การใช้งานที่ใช้กับคอมไพลเลอร์ได้รับการอัปเดตแล้ว และขณะนี้ตอบสนองได้ดีขึ้นเมื่อตรวจสอบรายละเอียดสิทธิ์การใช้งานของคอมไพเลอร์
  • Trampการเรียกแบบโอลิน (XC8-2760) คอมไพเลอร์สามารถดำเนินการแทนที่คำสั่งการเรียกแบบยาวด้วยการเรียกแบบสัมพัทธ์ที่สั้นกว่า เมื่อรูปแบบแบบสัมพัทธ์ของคำสั่งโดยปกติจะอยู่นอกขอบเขตของปลายทาง ในสถานการณ์นี้ คอมไพลเลอร์จะพยายามแทนที่ด้วยคำสั่ง rcall เป็นคำสั่งการเรียก jmp ที่จะ 'trampการดำเนินการ oline' ไปยังที่อยู่ที่ต้องการ เช่นampเลอ:

เวอร์ชัน 2.40

  • การสนับสนุนอุปกรณ์ใหม่ การสนับสนุนพร้อมใช้งานสำหรับชิ้นส่วน AVR ต่อไปนี้: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32 และ AVR64EA48
  • ปรับปรุงนามธรรมขั้นตอนขั้นตอน เครื่องมือเพิ่มประสิทธิภาพนามธรรมขั้นตอน (PA) ได้รับการปรับปรุงเพื่อให้สามารถร่างโค้ดที่มีคำสั่งการเรียกใช้ฟังก์ชัน (การเรียก/rcall) ได้ สิ่งนี้จะเกิดขึ้นเฉพาะในกรณีที่ไม่ได้ใช้สแต็กเพื่อส่งผ่านอาร์กิวเมนต์หรือรับค่าที่ส่งคืนจากฟังก์ชัน สแต็กถูกใช้เมื่อเรียกใช้ฟังก์ชันด้วยรายการอาร์กิวเมนต์ของตัวแปร หรือเมื่อเรียกใช้ฟังก์ชันที่รับอาร์กิวเมนต์มากกว่ารีจิสเตอร์ที่ถูกกำหนดไว้เพื่อจุดประสงค์นี้ คุณลักษณะนี้สามารถปิดใช้งานได้โดยใช้ตัวเลือก – mno-pa-outline-calls หรือนามธรรมขั้นตอนสามารถปิดใช้งานได้ทั้งหมดสำหรับไฟล์อ็อบเจ็กต์และหรือฟังก์ชันโดยใช้ -mno-pa-on-file -mno-pa-on-function ตามลำดับ หรือโดยใช้แอตทริบิวต์ nopa (__nopa specifer) โดยเลือกพร้อมกับฟังก์ชัน
  • แมโครการครอบคลุมโค้ด คอมไพเลอร์ในขณะนี้กำหนดแมโคร __CODECOV หากมีการระบุตัวเลือก -mcodecov ที่ถูกต้อง
  • ตัวเลือกการสำรองหน่วยความจำ ไดรเวอร์ xc8-cc จะยอมรับตัวเลือก -mreserve=space@start:end เมื่อสร้างสำหรับเป้าหมาย AVR ตัวเลือกนี้จะสงวนช่วงหน่วยความจำที่ระบุในพื้นที่หน่วยความจำข้อมูลหรือโปรแกรม เพื่อป้องกันไม่ให้ตัวเชื่อมโยงเติมโค้ดหรืออ็อบเจ็กต์ในพื้นที่นี้
  • IO อัจฉริยะที่ชาญฉลาดยิ่งขึ้น มีการปรับปรุงหลายอย่างในฟังก์ชัน Smart IO รวมถึงการปรับแต่งทั่วไปในโค้ดหลักของ printf โดยถือว่าตัวระบุการแปลง %n เป็นตัวแปรอิสระ การเชื่อมโยงในรูทีน vararg pop ตามความต้องการ โดยใช้ชนิดข้อมูลที่สั้นลงเมื่อเป็นไปได้สำหรับการจัดการ อาร์กิวเมนต์ของฟังก์ชัน IO และการแยกตัวประกอบโค้ดทั่วไปในความกว้างของฟิลด์และการจัดการที่แม่นยำ ซึ่งอาจส่งผลให้ประหยัดโค้ดและข้อมูลได้อย่างมาก รวมถึงเพิ่มความเร็วในการดำเนินการของ IO

เวอร์ชัน 2.39 (รุ่นความปลอดภัยด้านการทำงาน)
ใบอนุญาตเซิร์ฟเวอร์เครือข่าย MPLAB XC8 Functional Safety Compiler รุ่นนี้รองรับใบอนุญาตเซิร์ฟเวอร์เครือข่าย

เวอร์ชัน 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 Uniified Standard Libraries คอมไพเลอร์ MPLAB XC ทั้งหมดจะใช้ Microchip Uniified Standard Library ซึ่งขณะนี้พร้อมให้ใช้งานแล้วใน MPLAB XC8 รุ่นนี้ คู่มือผู้ใช้คอมไพเลอร์ MPLAB® XC8 C สำหรับ AVR® MCU ไม่มีเอกสารประกอบสำหรับฟังก์ชันมาตรฐานเหล่านี้อีกต่อไป ข้อมูลนี้สามารถพบได้ในคู่มืออ้างอิง Microchip Uniified Standard Library โปรดทราบว่าฟังก์ชันบางอย่างที่กำหนดโดย avr-libc ก่อนหน้านี้ไม่มีให้บริการอีกต่อไป (ดูฟังก์ชั่นห้องสมุด)
  • Smart IO ในฐานะส่วนหนึ่งของไลบรารีแบบครบวงจรใหม่ ฟังก์ชัน IO ในตระกูล printf และ scanf ได้ถูกสร้างแบบกำหนดเองในแต่ละบิลด์ ขึ้นอยู่กับวิธีการใช้ฟังก์ชันเหล่านี้ในโปรแกรม สิ่งนี้สามารถลดทรัพยากรที่ใช้โดยโปรแกรมได้อย่างมาก
  • ตัวเลือกความช่วยเหลือ Smart IO เมื่อวิเคราะห์การเรียกใช้ฟังก์ชัน smart IO (เช่น printf() หรือ scanf() คอมไพเลอร์ไม่สามารถกำหนดจากสตริงรูปแบบหรืออนุมานจากอาร์กิวเมนต์ที่ตัวระบุการแปลงที่จำเป็นสำหรับการโทร ก่อนหน้านี้ คอมไพเลอร์มักจะสร้าง ไม่มีสมมติฐานและตรวจสอบให้แน่ใจว่าฟังก์ชัน IO ที่ทำงานได้อย่างสมบูรณ์ถูกเชื่อมโยงเข้ากับอิมเมจโปรแกรมขั้นสุดท้าย มีการเพิ่มตัวเลือก -msmart-io-format=fmt ใหม่ เพื่อให้คอมไพเลอร์สามารถได้รับแจ้งจากผู้ใช้ตัวระบุการแปลงที่ใช้โดย smart IO แทน ฟังก์ชั่นที่มีการใช้งานไม่ชัดเจน ป้องกันไม่ให้มีการเชื่อมโยงรูทีน IO ที่ยาวเกินไป (ดูตัวเลือกรูปแบบ smart-io สำหรับรายละเอียดเพิ่มเติม)
  • การวางส่วนที่กำหนดเอง ก่อนหน้านี้ ตัวเลือก -Wl,–section-start จะวางเฉพาะส่วนที่ระบุในที่อยู่ที่ร้องขอเมื่อสคริปต์ตัวเชื่อมโยงกำหนดส่วนเอาต์พุตที่มีชื่อเดียวกัน เมื่อไม่เป็นเช่นนั้น ส่วนดังกล่าวจะถูกวางไว้ตามที่อยู่ที่เลือกโดยผู้เชื่อมโยง และตัวเลือกก็จะถูกละเว้น ตอนนี้ตัวเลือกจะได้รับการยอมรับสำหรับส่วนที่กำหนดเองทั้งหมด แม้ว่าสคริปต์ตัวเชื่อมโยงจะไม่ได้กำหนดส่วนก็ตาม อย่างไรก็ตาม โปรดทราบว่าสำหรับส่วนมาตรฐาน เช่น .text, .bss หรือ .data ตัวจัดสรรที่เหมาะสมที่สุดจะยังคงควบคุมตำแหน่งได้อย่างสมบูรณ์ และตัวเลือกจะไม่มีผลใดๆ ใช้อ็อพชัน -Wl,-Tsection=addr ตามที่อธิบายไว้ในคู่มือผู้ใช้

เวอร์ชัน 2.32

  • Stack Guidance พร้อมใช้งานพร้อมกับใบอนุญาตคอมไพเลอร์ PRO คุณสมบัติคำแนะนำสแต็กของคอมไพเลอร์สามารถใช้เพื่อประมาณความลึกสูงสุดของสแต็กใด ๆ ที่ใช้โดยโปรแกรม โดยจะสร้างและวิเคราะห์กราฟการเรียกของโปรแกรม กำหนดการใช้งานสแต็กของแต่ละฟังก์ชัน และสร้างรายงานซึ่งสามารถอนุมานความลึกของสแต็กที่โปรแกรมใช้ คุณลักษณะนี้เปิดใช้งานผ่านตัวเลือกบรรทัดคำสั่ง -mhp-stack-usage สรุปการใช้งานสแต็กจะถูกพิมพ์หลังจากดำเนินการ รายงานสแต็กโดยละเอียดมีอยู่ในไฟล์แผนที่ ซึ่งสามารถขอได้ตามปกติ
  • การสนับสนุนอุปกรณ์ใหม่ การสนับสนุนมีให้สำหรับชิ้นส่วน AVR ต่อไปนี้: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 และ AVR32DB48
  • การสนับสนุนอุปกรณ์ที่หดกลับ การสนับสนุนไม่สามารถใช้งานได้อีกต่อไปสำหรับชิ้นส่วน AVR ต่อไปนี้: AVR16DA28, AVR16DA32 และ AVR16DA48

เวอร์ชัน 2.31
ไม่มี.

เวอร์ชัน 2.30

  • ตัวเลือกใหม่เพื่อป้องกันการเริ่มต้นข้อมูล ตัวเลือกไดรเวอร์ -mno-data-init ใหม่ป้องกันการเริ่มต้นข้อมูลและการล้างส่วน bss มันทำงานโดยการระงับเอาต์พุตของสัญลักษณ์ do_clear_bss ในไฟล์แอสเซมบลี ซึ่งจะป้องกันการรวมรูทีนเหล่านั้นโดยตัวเชื่อมโยง
  • การเพิ่มประสิทธิภาพขั้นสูง มีการปรับปรุงการเพิ่มประสิทธิภาพจำนวนหนึ่ง รวมถึงการลบคำสั่งส่งคืนที่ซ้ำซ้อน การลบการข้ามบางส่วนตามคำสั่งข้ามถ้าบิตเป็น และการปรับปรุงขั้นตอนนามธรรมและความสามารถในการวนซ้ำกระบวนการนี้
    ขณะนี้มีตัวเลือกเพิ่มเติมเพื่อควบคุมการปรับให้เหมาะสมบางส่วนเหล่านี้ โดยเฉพาะ -fsection- anchors ซึ่งช่วยให้สามารถเข้าถึงวัตถุคงที่ที่จะดำเนินการโดยสัมพันธ์กับสัญลักษณ์เดียว -mpa- iterations=n ซึ่งอนุญาตให้เปลี่ยนจำนวนการวนซ้ำนามธรรมของขั้นตอนจากค่าเริ่มต้นที่ 2 และ -mpa-callcost-shortcall ซึ่งดำเนินการนามธรรมขั้นตอนเชิงรุกมากขึ้น ด้วยความหวังว่าตัวเชื่อมโยงจะสามารถผ่อนคลายการโทรที่ยาวนานได้ ตัวเลือกสุดท้ายนี้สามารถเพิ่มขนาดโค้ดได้หากไม่ตระหนักถึงสมมติฐานพื้นฐาน
  • การสนับสนุนอุปกรณ์ใหม่มีให้สำหรับชิ้นส่วน AVR ต่อไปนี้: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 และ 128DB64.
  • การสนับสนุนอุปกรณ์ที่หดกลับไม่รองรับอีกต่อไปสำหรับชิ้นส่วน AVR ต่อไปนี้: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C และ ATA664251

เวอร์ชัน 2.29 (รุ่นความปลอดภัยด้านการทำงาน)

  • ไฟล์ส่วนหัวสำหรับคอมไพเลอร์ในตัว เพื่อให้แน่ใจว่าคอมไพเลอร์สามารถสอดคล้องกับข้อกำหนดภาษาเช่น MISRA ,ได้รับการปรับปรุงแล้ว ส่วนหัวนี้มีต้นแบบสำหรับฟังก์ชันในตัวทั้งหมด เช่น __builtin_avr_nop() และ __builtin_avr_delay_cycles() บิวด์อินบางตัวอาจไม่สอดคล้องกับ MISRA สิ่งเหล่านี้สามารถละเว้นได้โดยเพิ่ม define __XC_STRICT_MISRA ให้กับบรรทัดคำสั่งของคอมไพเลอร์ บิวด์อินและการประกาศได้รับการอัปเดตเพื่อใช้ประเภทความกว้างคงที่

เวอร์ชัน 2.20

  • การสนับสนุนอุปกรณ์ใหม่ รองรับชิ้นส่วน AVR ต่อไปนี้: ATTINY1624, ATTINY1626 และ ATTINY1627
  • การจัดสรรแบบพอดีที่ดีที่สุดที่ดีขึ้น ตัวจัดสรรแบบพอดีที่ดีที่สุด (BFA) ในคอมไพเลอร์ได้รับการปรับปรุงเพื่อให้ส่วนต่างๆ ได้รับการจัดสรรในลำดับที่อนุญาตการเพิ่มประสิทธิภาพที่ดีขึ้น ขณะนี้ BFA รองรับแอดเดรสสเปซที่มีชื่อและจัดการการเริ่มต้นข้อมูลได้ดีขึ้น
  • การปรับปรุงสิ่งที่เป็นนามธรรมของขั้นตอน การปรับปรุงสิ่งที่เป็นนามธรรมของขั้นตอนจะดำเนินการในลำดับรหัสเพิ่มเติม สถานการณ์ก่อนหน้านี้ที่การเพิ่มประสิทธิภาพนี้อาจเพิ่มขนาดรหัสได้รับการแก้ไขแล้วโดยการทำให้รหัสการเพิ่มประสิทธิภาพรับรู้ถึงกระบวนการรวบรวมขยะของลิงเกอร์
  • ไม่มี AVR Assembler AVR Assembler ไม่รวมอยู่ในการกระจายนี้อีกต่อไป

เวอร์ชัน 2.19 (รุ่นความปลอดภัยด้านการทำงาน)
ไม่มี.

เวอร์ชัน 2.10

  • การครอบคลุมโค้ด รุ่นนี้มีคุณลักษณะการครอบคลุมโค้ดที่อำนวยความสะดวกในการวิเคราะห์ขอบเขตที่ซอร์สโค้ดของโปรเจ็กต์ได้รับการดำเนินการ ใช้ตัวเลือก -mcodecov=ram เพื่อเปิดใช้งาน หลังจากการรันโปรแกรมบนฮาร์ดแวร์ของคุณ ข้อมูลการครอบคลุมโค้ดจะถูกจัดเรียงในอุปกรณ์ และข้อมูลนี้สามารถถ่ายโอนไปยังและแสดงโดย MPLAB X IDE ผ่านปลั๊กอินการครอบคลุมโค้ด ดูเอกสาร IDE สำหรับข้อมูลเกี่ยวกับปลั๊กอินนี้สามารถรับได้
    #pragma nocodecov อาจใช้เพื่อยกเว้นฟังก์ชันที่ตามมาจากการวิเคราะห์ความครอบคลุม ตามหลักการแล้ว ควรเพิ่ม pragma ที่จุดเริ่มต้นของไฟล์เพื่อแยกไฟล์ทั้งหมดออกจากการวิเคราะห์ความครอบคลุม อีกทางหนึ่ง __attribute__((nocodecov)) อาจถูกนำมาใช้เพื่อยกเว้นฟังก์ชันเฉพาะจากการวิเคราะห์ความครอบคลุม
  • ไฟล์คำอธิบายอุปกรณ์ ไฟล์อุปกรณ์ใหม่ที่เรียกว่า avr_chipinfo.html อยู่ในไดเร็กทอรีเอกสารของการแจกจ่ายคอมไพเลอร์ ไฟล์นี้แสดงรายการอุปกรณ์ทั้งหมดที่คอมไพเลอร์รองรับ คลิกที่ชื่ออุปกรณ์ จากนั้นจะเปิดหน้าที่แสดงคู่การตั้งค่า/ค่าบิตการกำหนดค่าที่อนุญาตทั้งหมดสำหรับอุปกรณ์นั้น พร้อมด้วยตัวอย่างampเลส.
  • นามธรรมเชิงขั้นตอน การเพิ่มประสิทธิภาพนามธรรมเชิงขั้นตอน ซึ่งแทนที่บล็อกทั่วไปของโค้ดแอสเซมบลีด้วยการเรียกไปยังสำเนาที่แยกออกมาของบล็อกนั้น ได้ถูกเพิ่มเข้าไปในคอมไพเลอร์แล้ว สิ่งเหล่านี้ดำเนินการโดยแอปพลิเคชันแยกต่างหาก ซึ่งคอมไพเลอร์จะเรียกใช้โดยอัตโนมัติเมื่อเลือกการปรับให้เหมาะสมระดับ 2, 3 หรือระดับ การเพิ่มประสิทธิภาพเหล่านี้ลดขนาดโค้ด แต่อาจลดความเร็วในการดำเนินการและความสามารถในการดีบักโค้ด นามธรรมขั้นตอนสามารถปิดใช้งานได้ที่ระดับการปรับให้เหมาะสมที่สูงกว่าโดยใช้ตัวเลือก -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 (ดังที่กล่าวข้างต้น) เพื่อหาคู่การตั้งค่า/ค่าที่จะใช้กับ Pragma นี้
  • การสนับสนุนอุปกรณ์ใหม่ การสนับสนุนมีให้สำหรับชิ้นส่วนต่อไปนี้: AVR28DA128, AVR64DA128, AVR32DA128 และ AVR48DA128

เวอร์ชัน 2.05

  • บิตเพิ่มเติมสำหรับเจ้าชู้ของคุณ เวอร์ชัน macOS ของคอมไพเลอร์และตัวจัดการใบอนุญาตนี้เป็นแอปพลิเคชัน 64 บิตแล้ว เพื่อให้แน่ใจว่าคอมไพเลอร์จะติดตั้งและทำงานโดยไม่มีคำเตือนใน macOS เวอร์ชันล่าสุด
  • อ็อบเจ็กต์ Const ในหน่วยความจำโปรแกรม คอมไพเลอร์สามารถวางอ็อบเจ็กต์ที่มีคุณสมบัติ const ในหน่วยความจำแฟลชของโปรแกรม แทนที่จะให้วัตถุเหล่านี้อยู่ใน RAM คอมไพลเลอร์ได้รับการแก้ไขเพื่อให้ข้อมูลส่วนกลางที่ผ่านการรับรองถูกจัดเก็บไว้ในหน่วยความจำแฟลชของโปรแกรม และข้อมูลนี้สามารถเข้าถึงได้ทั้งทางตรงและทางอ้อมโดยใช้คำสั่งหน่วยความจำโปรแกรมที่เหมาะสม คุณลักษณะใหม่นี้เปิดใช้งานตามค่าเริ่มต้น แต่สามารถปิดใช้งานได้โดยใช้ตัวเลือก -mno-const-data-in-progmem สำหรับสถาปัตยกรรม avrxmega3 และ avrtiny คุณสมบัตินี้ไม่จำเป็นและจะถูกปิดใช้งานเสมอ เนื่องจากหน่วยความจำโปรแกรมถูกแมปลงในพื้นที่ที่อยู่ข้อมูลสำหรับอุปกรณ์เหล่านี้
  • มาตรฐานสำหรับเวอร์ชันฟรีที่ไม่มีใบอนุญาต (ฟรี) ของคอมไพเลอร์นี้อนุญาตให้มีการปรับแต่งสูงสุดและรวมถึงระดับ 2 ซึ่งจะอนุญาตให้มีเอาต์พุตที่คล้ายคลึงกันแม้ว่าจะไม่เหมือนกัน กับสิ่งที่เป็นไปได้ก่อนหน้านี้โดยใช้สิทธิ์การใช้งานมาตรฐาน
  • ยินดีต้อนรับ AVRASM2 ตอนนี้แอสเซมเบลอร์ AVRASM2 สำหรับอุปกรณ์ 8 บิตรวมอยู่ในตัวติดตั้งคอมไพเลอร์ XC8 แล้ว แอสเซมเบลอร์นี้ไม่ได้ใช้โดยคอมไพเลอร์ XC8 แต่พร้อมใช้งานสำหรับโครงการตามแหล่งแอสเซมบลีที่เขียนด้วยมือ
  • การสนับสนุนอุปกรณ์ใหม่รองรับส่วนต่อไปนี้: ATMEGA1608, ATMEGA1609, ATMEGA808 และ ATMEGA809

เวอร์ชัน 2.00

  • ไดรเวอร์ระดับบนสุด ไดรเวอร์ใหม่ที่เรียกว่า xc8-cc ตอนนี้อยู่เหนือไดรเวอร์ avr-gcc ก่อนหน้าและไดรเวอร์ xc8 และสามารถเรียกใช้คอมไพเลอร์ที่เหมาะสมตามการเลือกอุปกรณ์เป้าหมาย ไดรเวอร์นี้ยอมรับตัวเลือกสไตล์ GCC ซึ่งแปลหรือส่งผ่านไปยังคอมไพเลอร์ที่กำลังดำเนินการ ไดรเวอร์นี้อนุญาตให้ใช้ชุดตัวเลือกที่คล้ายกันซึ่งมีความหมายคล้ายกันกับเป้าหมาย AVR หรือ PIC ใดๆ และเป็นวิธีที่แนะนำในการเรียกใช้คอมไพเลอร์ หากจำเป็น คุณสามารถเรียกใช้ไดรเวอร์ avr-gcc แบบเก่าได้โดยตรงโดยใช้ตัวเลือกแบบเก่าที่ยอมรับในเวอร์ชันคอมไพเลอร์ก่อนหน้านี้
  • อินเตอร์เฟส Common C ตอนนี้คอมไพเลอร์นี้สามารถสอดคล้องกับ MPLAB Common C Interface ทำให้สามารถพอร์ตซอร์สโค้ดข้ามคอมไพเลอร์ MPLAB XC ทั้งหมดได้ง่ายขึ้น อ็อพชัน -mext=cci ร้องขอคุณสมบัตินี้ เปิดใช้งานไวยากรณ์ทางเลือกสำหรับส่วนขยายหลายภาษา
  • ไดรเวอร์บรรณารักษ์ใหม่ ไดรเวอร์บรรณารักษ์ใหม่อยู่ในตำแหน่งเหนือบรรณารักษ์ PIC libr ก่อนหน้าและบรรณารักษ์ AVR avr-ar ไดรเวอร์นี้ยอมรับตัวเลือกสไตล์ GCC-archiver ซึ่งได้รับการแปลหรือส่งต่อไปยังบรรณารักษ์ที่กำลังดำเนินการ ไดรเวอร์ใหม่อนุญาตให้ใช้ชุดตัวเลือกที่คล้ายกันซึ่งมีความหมายคล้ายกันเพื่อสร้างหรือจัดการไฟล์ไลบรารี PIC หรือ AVR ใด ๆ และเป็นวิธีที่แนะนำในการเรียกใช้บรรณารักษ์ หากจำเป็นสำหรับโปรเจ็กต์รุ่นเก่า บรรณารักษ์คนก่อนสามารถเรียกได้โดยตรงโดยใช้ตัวเลือกแบบเก่าที่ยอมรับในคอมไพเลอร์เวอร์ชันก่อนหน้า

ปัญหาการโยกย้าย

ต่อไปนี้เป็นคุณสมบัติที่ตอนนี้คอมไพเลอร์จัดการแตกต่างกัน การเปลี่ยนแปลงเหล่านี้อาจต้องมีการดัดแปลงซอร์สโค้ดของคุณหากย้ายโค้ดไปยังเวอร์ชันคอมไพเลอร์นี้ หมายเลขเวอร์ชันในหัวข้อย่อยระบุเวอร์ชันคอมไพเลอร์แรกเพื่อรองรับการเปลี่ยนแปลงที่ตามมา

เวอร์ชัน 2.45
ไม่มี.

เวอร์ชัน 2.41
ลบฟังก์ชัน fma ที่ไม่ถูกต้องออก (XC8-2913) ไลบรารีมาตรฐาน C99 ( ) ไม่ได้คำนวณการคูณ-บวกด้วยความแม่นยำอนันต์ในการปัดเศษครั้งเดียว แต่สะสมข้อผิดพลาดในการปัดเศษในการดำเนินการแต่ละครั้งแทน ฟังก์ชั่นเหล่านี้ได้ถูกลบออกจากไลบรารีที่ให้มา

เวอร์ชัน 2.40
ไม่มี.

เวอร์ชัน 2.39 (รุ่นความปลอดภัยด้านการทำงาน)
ไม่มี.

เวอร์ชัน 2.36
ไม่มี.

เวอร์ชัน 2.35

  • การจัดการสตริงเป็นฐาน (XC8-2420) เพื่อให้มั่นใจว่าสอดคล้องกับคอมไพเลอร์ XC อื่นๆ ฟังก์ชันสตริงเป็น XC8 เช่น strtol() ฯลฯ จะไม่พยายามแปลงสตริงอินพุตอีกต่อไปหากฐานที่ระบุมีขนาดใหญ่กว่า 36 และจะตั้งค่าแทน มาตรฐาน C ไม่ได้ระบุลักษณะการทำงานของฟังก์ชันเมื่อเกินค่าฐานนี้
  • การเพิ่มประสิทธิภาพความเร็วที่ไม่เหมาะสม การเพิ่มประสิทธิภาพนามธรรมตามขั้นตอนถูกเปิดใช้งานเมื่อเลือกการเพิ่มประสิทธิภาพระดับ 3 (-O3) การเพิ่มประสิทธิภาพเหล่านี้จะลดขนาดโค้ดโดยแลกกับความเร็วของโค้ด ดังนั้นจึงไม่ควรดำเนินการ โปรเจ็กต์ที่ใช้ระดับการปรับให้เหมาะสมนี้อาจเห็นความแตกต่างในขนาดโค้ดและความเร็วในการดำเนินการเมื่อสร้างด้วยรีลีสนี้
  • ฟังก์ชันการทำงานของไลบรารี โค้ดสำหรับฟังก์ชันไลบรารี C มาตรฐานจำนวนมากในปัจจุบันมาจาก Uniified Standard Library ของ Microchip ซึ่งอาจแสดงพฤติกรรมที่แตกต่างกันในบางกรณี เมื่อเปรียบเทียบกับไลบรารี avr-libc เดิม สำหรับเช่นampในตอนนี้ ไม่จำเป็นต้องลิงก์ในไลบรารี lprintf_flt อีกต่อไป (ตัวเลือก -lprintf_flt) เพื่อเปิดการสนับสนุน IO ที่จัดรูปแบบแล้วสำหรับตัวระบุรูปแบบ float คุณสมบัติ IO อันชาญฉลาดของ Microchip Uniified Standard Library ทำให้ตัวเลือกนี้ซ้ำซ้อน นอกจากนี้ การใช้รูทีนต่อท้าย _P สำหรับฟังก์ชันสตริงและหน่วยความจำ (เช่น strcpy_P() ฯลฯ) ที่ทำงานบนสตริง const ใน fash ก็ไม่จำเป็นอีกต่อไป รูทีน C มาตรฐาน (เช่น strcpy() จะทำงานอย่างถูกต้องกับข้อมูลดังกล่าวเมื่อเปิดใช้งานคุณสมบัติ const-data-in-program-memory

เวอร์ชัน 2.32
ไม่มี.

เวอร์ชัน 2.31
ไม่มี.

เวอร์ชัน 2.30
ไม่มี.

เวอร์ชัน 2.29 (รุ่นความปลอดภัยด้านการทำงาน)
ไม่มี.

เวอร์ชัน 2.2
เค้าโครง DFP ที่เปลี่ยนแปลง ขณะนี้คอมไพเลอร์ใช้เค้าโครงอื่นที่ DFP (Device Family Packs) ใช้ ซึ่งหมายความว่า DFP รุ่นเก่าอาจไม่ทำงานกับรุ่นนี้ และคอมไพเลอร์รุ่นเก่าจะไม่สามารถใช้ DFP รุ่นล่าสุดได้

เวอร์ชัน 2.19 (รุ่นความปลอดภัยด้านการทำงาน)
ไม่มี.

เวอร์ชัน 2.10
ไม่มี

เวอร์ชัน 2.05
อ็อบเจ็กต์ Const ในหน่วยความจำโปรแกรม โปรดทราบว่าตามค่าเริ่มต้น อ็อบเจ็กต์ที่มีคุณสมบัติ const จะถูกวางและเข้าถึงในหน่วยความจำโปรแกรม (ตามที่อธิบายไว้ที่นี่) ซึ่งจะส่งผลต่อขนาดและความเร็วในการดำเนินการของโปรเจ็กต์ของคุณ แต่ควรลดการใช้ RAM คุณลักษณะนี้สามารถปิดใช้งานได้ หากจำเป็น โดยใช้อ็อพชัน -mno-const-data-in-progmem

เวอร์ชัน 2.00

  • ฟิวส์การกำหนดค่า ขณะนี้ฟิวส์การกำหนดค่าอุปกรณ์สามารถตั้งโปรแกรมโดยใช้ config pragma ตามด้วยคู่ค่าการตั้งค่าเพื่อระบุสถานะฟิวส์ เช่น #pragma config WDTON = SET #pragma config BODLEVEL = BODLEVEL_4V3
  • วัตถุและฟังก์ชันสัมบูรณ์ ขณะนี้สามารถวางวัตถุและฟังก์ชันไว้ที่ที่อยู่เฉพาะในหน่วยความจำโดยใช้ตัวระบุ CCI __at(ที่อยู่) เช่นampเลอ:
    • #รวม
      int foobar __at(0x800100);
      ถ่าน __at(0x250) getID(int offset) { … }
      อาร์กิวเมนต์ของตัวระบุนี้ต้องเป็นค่าคงที่ซึ่งแสดงถึงที่อยู่ที่จะวางไบต์แรกหรือคำสั่ง ที่อยู่ RAM ระบุโดยใช้ออฟเซ็ต 0x800000 เปิดใช้งาน CCI เพื่อใช้คุณสมบัตินี้
  • ไวยากรณ์ฟังก์ชันขัดจังหวะใหม่ คอมไพเลอร์ยอมรับตัวระบุ CCI __interrupt(num) เพื่อระบุว่าฟังก์ชัน C เป็นตัวจัดการขัดจังหวะ ผู้ระบุรับหมายเลขขัดจังหวะ เช่นampเลอ: #รวม เป็นโมฆะ __ขัดจังหวะ (SPI_STC_vect_num) spi_Isr (เป็นโมฆะ) { … }

ปัญหาที่ได้รับการแก้ไข

ต่อไปนี้เป็นการแก้ไขที่ทำกับคอมไพลเลอร์ สิ่งเหล่านี้อาจแก้ไขจุดบกพร่องในโค้ดที่สร้างขึ้นหรือเปลี่ยนแปลงการทำงานของคอมไพเลอร์ให้เป็นไปตามที่ตั้งใจหรือระบุไว้ในคู่มือผู้ใช้ หมายเลขเวอร์ชันในหัวข้อย่อยบ่งชี้ถึงเวอร์ชันคอมไพลเลอร์แรกที่มีการแก้ไขสำหรับปัญหาที่ตามมา ป้ายกำกับในวงเล็บในชื่อคือการระบุปัญหานั้นในฐานข้อมูลการติดตาม สิ่งเหล่านี้อาจมีประโยชน์หากคุณต้องการติดต่อฝ่ายสนับสนุน
โปรดทราบว่าปัญหาเฉพาะอุปกรณ์บางอย่างได้รับการแก้ไขใน Device Family Pack (DFP) ที่เชื่อมโยงกับอุปกรณ์ ดู MPLAB Pack Manager สำหรับข้อมูลเกี่ยวกับการเปลี่ยนแปลงที่ทำกับ DFP และดาวน์โหลดชุดล่าสุด

เวอร์ชัน 2.45

  • ใบอนุญาตใช้งานโรมมิ่งล้มเหลว (XCLM-235) ใบอนุญาตใช้งานโรมมิ่งล้มเหลวในการทำงานอย่างถูกต้องบนแพลตฟอร์ม Linux ที่ใช้เวอร์ชัน glibc ที่ใหม่กว่า 2.28
  • ข้อผิดพลาดภายในกับอาร์เรย์ของโครงสร้าง (XC8-3069) เมื่อมีการประมวลผลสมาชิกอาร์เรย์หลายมิติของโครงสร้าง ตัวระบุพื้นที่ที่อยู่ไม่ได้รับการเผยแพร่อย่างถูกต้องไปยังอาร์เรย์ สิ่งนี้นำไปสู่ความไม่ตรงกันในข้อมูลตัวระบุพื้นที่ที่อยู่และข้อผิดพลาดของคอมไพเลอร์ภายใน สถานการณ์นี้ได้รับการแก้ไขแล้ว
  • การเขียนไม่ถูกต้องไปยังสตรีมที่ไม่ได้กำหนดค่าเริ่มต้น (ML-353, XC8-3100) หากสตรีมเอาต์พุต/ข้อผิดพลาดมาตรฐานไม่ได้ตั้งค่าไว้อย่างชัดเจนโดยใช้ FDEV_SETUP_STREAM หรือ _init_stdout/_init_stderr การพยายามเขียนถึงสตรีมดังกล่าวส่งผลให้มีพฤติกรรมที่ไม่ได้กำหนดไว้ นอกจากนี้ยังส่งผลต่อการเขียนจากฟังก์ชัน stdlib เช่น perror() การเขียนใดๆ ไปยังสตรีมเหล่านี้ก่อนที่จะเริ่มต้นจะถูกละเว้น
  • ตัวดัดแปลงที่ไม่รองรับ (XC8-2505) ไลบรารี avr-libc ไม่รองรับตัวดัดแปลง * ในตัวระบุการแปลงรูปแบบ printf เช่นampเลอ “%.*f”. ขณะนี้ได้รับการสนับสนุนด้วยการเปิดตัว Microchip Uniified Standard Library
  • คำเตือนที่ไม่ได้เตรียมใช้งานหลายรายการ (XC8-2409) คอมไพเลอร์กำลังออกข้อความเตือนที่เหมือนกันหลายรายการเมื่อพบอาร์เรย์ const ที่ไม่ได้เตรียมใช้งาน ควรส่งข้อความเพียงครั้งเดียว ซึ่งขณะนี้เป็นกรณีที่สถานการณ์นี้เกิดขึ้น

เวอร์ชัน 2.41

  • ปัญหาดองเกิลบน Ventura (XC8-3088) ดองเกิลที่ใช้ในการอนุญาตคอมไพเลอร์อาจไม่ได้รับการอ่านอย่างถูกต้องบนโฮสต์ macOS Ventura ส่งผลให้ใบอนุญาตล้มเหลว การเปลี่ยนแปลงตัวจัดการใบอนุญาต XCLM ช่วยแก้ไขปัญหานี้
  • การระบุการจัดสรรหน่วยความจำไม่ถูกต้อง (XC8-2925) กำลังพยายามจัดสรรไบต์ SIZE_MAX (หรือค่าที่ใกล้เคียงนี้) ของหน่วยความจำโดยใช้ฟังก์ชันการจัดการหน่วยความจำไลบรารีมาตรฐาน (malloc() et al) ที่ร้องขอเมื่อใช้การจัดสรรหน่วยความจำแบบไดนามิกอย่างง่าย ตัวชี้ NULL จะถูกส่งกลับและตั้งค่า errno เป็น ENOMEM ในสถานการณ์เช่นนี้
  • ลบฟังก์ชัน fma ที่ไม่ถูกต้องออก (XC8-2913) ฟังก์ชัน fma()-family ของไลบรารีมาตรฐาน C99 ( ) ไม่ได้คำนวณการคูณ-บวกด้วยความแม่นยำอนันต์ในการปัดเศษครั้งเดียว แต่สะสมข้อผิดพลาดในการปัดเศษในการดำเนินการแต่ละครั้งแทน ฟังก์ชั่นเหล่านี้ได้ถูกลบออกจากไลบรารีที่ให้มา
  • การจัดการการแปลงสตริงไม่ถูกต้อง (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 อยู่ภายใต้ Configuration Change Protection (CCP) และไม่สามารถตั้งค่า IO SFR เป็นเพจที่ใช้ โดยคุณสมบัติคอมไพเลอร์ const-data-in-config-mapped-progmem การเปลี่ยนแปลงที่ทำใน AVR-Ex_DFP เวอร์ชัน 2.2.55 จะทำให้โค้ดเริ่มต้นรันไทม์สามารถเขียนลงในรีจิสเตอร์นี้ได้อย่างถูกต้อง
  • การเปลี่ยนแปลง DFP เพื่อหลีกเลี่ยงการทำแผนที่แฟลช (XC8-2847) ได้มีการนำวิธีแก้ไขปัญหาเกี่ยวกับคุณลักษณะอุปกรณ์การทำแผนที่แฟลชที่รายงานใน AVR128DA28/32/48/64 Silicon Errata (DS80000882) ไปใช้แล้ว คุณลักษณะคอมไพเลอร์ const-data-in-config-mapped-progmem จะไม่ถูกนำมาใช้ตามค่าเริ่มต้นสำหรับอุปกรณ์ที่ได้รับผลกระทบ และการเปลี่ยนแปลงนี้จะปรากฏใน AVR-Dx_DFP เวอร์ชัน 2.2.160
  • สร้างข้อผิดพลาดด้วย sinhf หรือ coshf (XC8-2834) ความพยายามในการใช้ฟังก์ชันไลบรารี sinhf() หรือ coshf() ส่งผลให้เกิดข้อผิดพลาดในลิงก์ ซึ่งอธิบายการอ้างอิงที่ไม่ได้กำหนดไว้ ฟังก์ชันที่ขาดหายไปที่อ้างอิงได้ถูกรวมไว้ในการกระจายคอมไพเลอร์แล้ว
  • สร้างข้อผิดพลาดด้วย nopa (XC8-2833) การใช้แอตทริบิวต์ nopa กับฟังก์ชันที่ระบุชื่อแอสเซมเบลอร์โดยใช้ __asm__() ทำให้เกิดข้อความแสดงข้อผิดพลาดจากแอสเซมเบลอร์ การรวมกันนี้เป็นไปไม่ได้
  • ฟังก์ชัน Variadic ล้มเหลวพร้อมกับอาร์กิวเมนต์ของพอยน์เตอร์ (XC8-2755, XC8-2731) ฟังก์ชันที่มีจำนวนอาร์กิวเมนต์ที่แปรผันได้ คาดว่าพอยน์เตอร์แบบ 24 บิต (ชนิด __memx) จะถูกส่งผ่านในรายการอาร์กิวเมนต์ของตัวแปร เมื่อคุณลักษณะ const-data-in-progmem เป็น เปิดใช้งาน อาร์กิวเมนต์ที่เป็นตัวชี้ไปยังหน่วยความจำข้อมูลถูกส่งผ่านเป็นออบเจ็กต์ 16 บิต ทำให้โค้ดล้มเหลวเมื่ออ่านในท้ายที่สุด เมื่อเปิดใช้งานคุณลักษณะ const-data-in-progmem อาร์กิวเมนต์พอยน์เตอร์แบบ 16 บิตทั้งหมดจะถูกแปลงเป็นพอยน์เตอร์แบบ 24 บิต
  • ฟังก์ชันไลบรารี strtoxxx ล้มเหลว (XC8-2620) เมื่อเปิดใช้งานคุณลักษณะ const-data-in-progmem พารามิเตอร์ endptr ในฟังก์ชันไลบรารี strtoxxx ไม่ได้รับการอัพเดตอย่างถูกต้องสำหรับอาร์กิวเมนต์สตริงต้นทางที่ไม่ได้อยู่ในหน่วยความจำโปรแกรม
  • การแจ้งเตือนสำหรับการแคสต์ที่ไม่ถูกต้อง (XC8-2612) คอมไพเลอร์จะออกข้อผิดพลาดหากเปิดใช้งานคุณสมบัติ const-in-progmem และที่อยู่ของสตริงตัวอักษรถูกส่งอย่างชัดเจนไปยังพื้นที่ที่อยู่ข้อมูล (ปล่อย const qualfiier) สำหรับตัวอย่างampเลอ (uint8_t *) “สวัสดีชาวโลก!” - คำเตือนเป็นปัญหาหากที่อยู่อาจไม่ถูกต้องเมื่อมีการส่งตัวชี้ข้อมูล const ไปยังพื้นที่ที่อยู่ข้อมูลอย่างชัดเจน
  • การวางตำแหน่งของวัตถุ 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__((ส่วน(".mysec"))) __at (0x500) = {0xAB, 0xCD}; const ถ่าน arr2[] __attribute__((section(".mysec"))) = {0xEF, 0xFE}; ควรวาง arr2 ไว้หลัง arr1 ทันที
  • การระบุที่อยู่เริ่มต้นของส่วน (XC8-2650) ตัวเลือก -Wl,–section-start ไม่สามารถวางส่วนต่างๆ ไว้ที่ที่อยู่เริ่มต้นที่ได้รับการเสนอชื่อได้ ปัญหานี้ได้รับการแก้ไขแล้วสำหรับส่วนที่ตั้งชื่อแบบกำหนดเอง อย่างไรก็ตาม จะไม่ทำงานกับส่วนมาตรฐานใดๆ เช่น .text หรือ .bss ซึ่งต้องวางโดยใช้ตัวเลือก -Wl,-T ตัวเชื่อมโยงหยุดทำงานเมื่อผ่อนคลาย (XC8-2647) เมื่อเปิดใช้งานการปรับให้เหมาะสม -mrelax และมีโค้ดหรือส่วนของข้อมูลที่ไม่พอดีกับหน่วยความจำที่มีอยู่ ตัวเชื่อมโยงหยุดทำงาน ในกรณีนี้ จะมีการส่งข้อความแสดงข้อผิดพลาดแทน
  • No no-falling-back (XC8-2646) ตัวเลือก –nofallback ไม่ได้รับการติดตั้งอย่างถูกต้องหรือไม่ได้บันทึกไว้ ตอนนี้สามารถเลือกได้เพื่อให้แน่ใจว่าคอมไพลเลอร์จะไม่ถอยกลับไปใช้การตั้งค่าการปรับให้เหมาะสมที่ต่ำกว่าหากคอมไพเลอร์ไม่มีใบอนุญาต และจะออกข้อผิดพลาดแทน
  • การเพิ่มประสิทธิภาพความเร็วที่ไม่เหมาะสม (XC8-2637) การเพิ่มประสิทธิภาพนามธรรมตามขั้นตอนถูกเปิดใช้งานเมื่อเลือกการปรับให้เหมาะสมระดับ 3 (-O3) การเพิ่มประสิทธิภาพเหล่านี้จะลดขนาดโค้ดโดยแลกกับความเร็วของโค้ด ดังนั้นจึงไม่ควรดำเนินการ
  • การเข้าถึง EEPROM ไม่ถูกต้อง (XC8-2629) รูทีน eeprom_read_block ทำงานไม่ถูกต้องบนอุปกรณ์ Xmega เมื่อเปิดใช้งานตัวเลือก – mconst-data-in-progmem (ซึ่งเป็นสถานะเริ่มต้น) ส่งผลให้หน่วยความจำ EEPROM อ่านไม่ถูกต้อง
  • การจัดสรรหน่วยความจำไม่ถูกต้อง (XC8-2593, XC8-2651) เมื่อตัวเลือก -Ttext หรือ -Tdata linker (เช่นampระบุไฟล์ที่ส่งผ่านโดยใช้ตัวเลือกไดรเวอร์ -Wl) ต้นกำเนิดขอบเขตข้อความ/ข้อมูลที่สอดคล้องกันได้รับการอัปเดต อย่างไรก็ตาม ที่อยู่ปลายทางไม่ได้รับการปรับตามนั้น ซึ่งอาจส่งผลให้พื้นที่นั้นเกินช่วงหน่วยความจำของอุปกรณ์เป้าหมายได้
  • ขัดข้องด้วยฟังก์ชันที่มีการระบุแหล่งที่มามากเกินไป (XC8-2580) คอมไพเลอร์ขัดข้องหากมีการประกาศฟังก์ชันโดยใช้แอตทริบิวต์ขัดจังหวะ สัญญาณ หรือ nmi มากกว่าหนึ่งรายการ เช่น __attribute__((__signal__, __interrupt__))
  • รหัสขัดจังหวะ ATtiny ไม่ถูกต้อง (XC8-2465) เมื่อสร้างอุปกรณ์ ATtiny และการเพิ่มประสิทธิภาพถูกปิดใช้งาน (-O0) ฟังก์ชันขัดจังหวะอาจทริกเกอร์ตัวถูกดำเนินการอยู่นอกช่วง
  • ตัวเลือกที่ไม่ถูกส่งผ่าน (XC8-2452) เมื่อใช้ตัวเลือก -Wl กับตัวเลือกตัวเชื่อมโยงที่คั่นด้วยเครื่องหมายจุลภาคหลายตัว ตัวเลือกตัวเชื่อมโยงบางตัวไม่ได้ถูกส่งผ่านไปยังตัวเชื่อมโยง
  • เกิดข้อผิดพลาดในการอ่านหน่วยความจำโปรแกรมโดยอ้อม (XC8-2450) ในบางกรณี คอมไพเลอร์สร้างข้อผิดพลาดภายใน (insn ที่ไม่รู้จัก) เมื่ออ่านค่าสองไบต์จากตัวชี้ไปยังหน่วยความจำโปรแกรม

เวอร์ชัน 2.32
การเข้าถึงไลบรารีครั้งที่สองล้มเหลว (XC8-2381) การเรียกใช้ตัวเก็บถาวรไลบรารี xc8-ar.exe เวอร์ชัน Windows เป็นครั้งที่สองเพื่อเข้าถึงไฟล์เก็บถาวรไลบรารีที่มีอยู่อาจล้มเหลวโดยไม่สามารถเปลี่ยนชื่อข้อความแสดงข้อผิดพลาดได้

เวอร์ชัน 2.31
ความล้มเหลวของคอมไพเลอร์ที่ไม่สามารถอธิบายได้ (XC8-2367) เมื่อทำงานบนแพลตฟอร์ม Windows ที่มีไดเรกทอรีชั่วคราวของระบบตั้งค่าเป็นเส้นทางที่มีจุด ' อักขระคอมไพเลอร์อาจล้มเหลวในการดำเนินการ

เวอร์ชัน 2.30

  • ป้ายกำกับส่วนกลางวางผิดที่หลังจากการสรุป (XC8-2299) โค้ดแอสเซมบลีที่เขียนด้วยมือซึ่งวางป้ายกำกับส่วนกลางภายในลำดับแอสเซมบลีซึ่งแยกตัวประกอบโดยขั้นตอนนามธรรมอาจไม่ได้รับการเปลี่ยนตำแหน่งอย่างถูกต้อง
  • ความผิดพลาดที่ผ่อนคลาย (XC8-2287) การใช้ตัวเลือก -mrelax อาจทำให้ตัวเชื่อมโยงหยุดทำงานเมื่อการเพิ่มประสิทธิภาพการผ่อนคลายการกระโดดแบบหางพยายามลบคำสั่ง ret ที่ไม่ได้อยู่ที่ส่วนท้ายของส่วนออก
  • ขัดข้องเมื่อเพิ่มประสิทธิภาพป้ายกำกับเป็นค่า (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 ล้มเหลวในการกำหนดหน่วยความจำสำหรับส่วน rodata ที่กำหนดเองเมื่อสร้างสำหรับสถาปัตยกรรม avrxmega3 และ avrtiny อาจทำให้เกิดข้อผิดพลาดที่ทับซ้อนกันของหน่วยความจำ

เวอร์ชัน 2.19 (รุ่นความปลอดภัยด้านการทำงาน)
ไม่มี.

เวอร์ชัน 2.10

  • ความล้มเหลวในการย้ายตำแหน่ง (XC8-1891) ตัวจัดสรรที่เหมาะสมที่สุดคือการทิ้ง 'ช่องว่าง' ของหน่วยความจำไว้ระหว่างส่วนต่างๆ หลังจากการคลายตัวของตัวเชื่อมโยง นอกเหนือจากหน่วยความจำที่กระจัดกระจายแล้ว สิ่งนี้ยังเพิ่มความเป็นไปได้ที่จะเกิดความล้มเหลวในการย้ายตำแหน่งลิงก์เกอร์ที่เกี่ยวข้องกับการข้ามแบบสัมพันธ์กับพีซี หรือการเรียกที่อยู่นอกระยะ
  • คำแนะนำไม่ได้ถูกเปลี่ยนโดยการผ่อนคลาย (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 รายงานว่าข้อมูลที่อ่านอย่างเดียวใช้ RAM แทนหน่วยความจำของโปรแกรม
  • การอ่านหน่วยความจำโปรแกรมไม่ถูกต้อง (XC8-1783) โปรเจ็กต์ที่คอมไพล์สำหรับอุปกรณ์ที่มีหน่วยความจำโปรแกรมแมปลงในพื้นที่ที่อยู่ข้อมูล และที่กำหนดออบเจ็กต์โดยใช้มาโคร/คุณลักษณะ PROGMEM อาจอ่านออบเจ็กต์เหล่านี้จากที่อยู่ที่ไม่ถูกต้อง
  • ข้อผิดพลาดภายในพร้อมแอตทริบิวต์ (XC8-1773) ข้อผิดพลาดภายในเกิดขึ้นหากคุณกำหนดวัตถุตัวชี้ด้วยโทเค็น __at() หรือแอตทริบิวต์() อยู่ระหว่างชื่อตัวชี้และประเภทที่มีการอ้างอิง เช่นampเลอ, ถ่าน * __at(0x800150) cp; ขณะนี้มีการออกคำเตือนหากพบรหัสดังกล่าว
  • ความล้มเหลวในการดำเนินการหลัก (XC8-1780, XC8-1767, XC8-1754) การใช้ตัวแปร EEPROM หรือการกำหนดฟิวส์โดยใช้การกำหนดค่า pragma อาจทำให้เกิดการเริ่มต้นข้อมูลที่ไม่ถูกต้องและ/หรือล็อคการทำงานของโปรแกรมในโค้ดเริ่มต้นรันไทม์ก่อนที่จะถึง main ( ).
  • ข้อผิดพลาดของฟิวส์กับอุปกรณ์ขนาดเล็ก (XC8-1778, XC8-1742) อุปกรณ์ attiny4/5/9/10/20/40 มีความยาวฟิวส์ไม่ถูกต้องซึ่งระบุไว้ในไฟล์ส่วนหัวซึ่งนำไปสู่ข้อผิดพลาดของตัวเชื่อมโยงเมื่อพยายามสร้างโค้ดที่กำหนดฟิวส์ .
  • ข้อผิดพลาดในการแบ่งส่วน (XC8-1777) ข้อผิดพลาดในการแบ่งส่วนเป็นระยะๆ ได้รับการแก้ไขแล้ว
  • แอสเซมเบลอร์ล่ม (XC8-1761) แอสเซมเบลอร์ avr-as อาจล้มเหลวเมื่อคอมไพเลอร์ทำงานภายใต้ Ubuntu 18
  • ออบเจ็กต์ไม่ถูกล้าง (XC8-1752) ออบเจ็กต์ระยะเวลาการจัดเก็บคงที่ที่ไม่ได้เตรียมใช้งานอาจไม่ได้รับการล้างด้วยโค้ดเริ่มต้นรันไทม์
  • ข้อมูลจำเพาะของอุปกรณ์ที่ขัดแย้งกันถูกละเว้น (XC8-1749) คอมไพเลอร์ไม่ได้สร้างข้อผิดพลาดเมื่อมีการใช้ตัวเลือกข้อมูลจำเพาะของอุปกรณ์หลายตัวและระบุอุปกรณ์ที่แตกต่างกัน
  • หน่วยความจำเสียหายโดยฮีป (XC8-1748) สัญลักษณ์ __heap_start ถูกตั้งค่าไม่ถูกต้อง ส่งผลให้ตัวแปรทั่วไปมีโอกาสเสียหายโดยฮีป
  • ข้อผิดพลาดในการย้ายตำแหน่งลิงเกอร์ (XC8-1739) ข้อผิดพลาดในการย้ายตำแหน่งลิงเกอร์อาจเกิดขึ้นเมื่อโค้ดมี rjmp หรือ rcall โดยมีเป้าหมายอยู่ห่างออกไป 4 ไบต์พอดี

เวอร์ชัน 2.00
ไม่มี.

ปัญหาที่ทราบ

ต่อไปนี้เป็นข้อจำกัดในการทำงานของคอมไพลเลอร์ สิ่งเหล่านี้อาจเป็นข้อจำกัดในการเขียนโค้ดทั่วไป หรือการเบี่ยงเบนไปจากข้อมูลที่มีอยู่ในคู่มือผู้ใช้ ป้ายกำกับในวงเล็บในชื่อคือการระบุปัญหานั้นในฐานข้อมูลการติดตาม นี่อาจเป็นประโยชน์หากคุณต้องการติดต่อฝ่ายสนับสนุน รายการเหล่านั้นที่ไม่มีป้ายกำกับเป็นข้อจำกัดที่อธิบาย modi operandi และมีแนวโน้มที่จะยังคงมีผลอย่างถาวร

การบูรณาการ MPLAB X IDE

  • การรวม MPLAB IDE หากจะใช้คอมไพเลอร์จาก MPLAB IDE คุณต้องติดตั้ง MPLAB IDE ก่อนที่จะติดตั้งคอมไพเลอร์
  • ข้อมูลการดีบักอาร์เรย์ (XC8-3157) ข้อมูลการดีบักที่สร้างโดยคอมไพลเลอร์ไม่สามารถถ่ายทอดประเภทอ็อบเจ็กต์สำหรับอาร์เรย์ในพื้นที่ที่อยู่ __memx ได้อย่างถูกต้อง สิ่งนี้จะป้องกันการสังเกตวัตถุใน IDE

การสร้างรหัส

  • Segfault พร้อมตัวเลือก Section-anchors (XC8-3045) โปรแกรมที่กำหนดฟังก์ชันด้วยรายการอาร์กิวเมนต์ตัวแปร และใช้ตัวเลือก -fsection-anchors อาจก่อให้เกิดข้อผิดพลาดของคอมไพเลอร์ภายใน: Segmentation Fault
  • ข้อมูลการแก้ไขข้อบกพร่องไม่ซิงค์กัน (XC8-2948) เมื่อการเพิ่มประสิทธิภาพการผ่อนคลายของตัวเชื่อมโยงลดขนาดคำสั่ง (เช่นampคำสั่ง le call to rcall) การแม็พบรรทัดต้นทางไปยังที่อยู่อาจไม่ซิงค์กันเมื่อมีการดำเนินการย่อขนาดมากกว่าหนึ่งรายการที่เกิดขึ้นในส่วน ในตัวอย่างด้านล่างampอย่างไรก็ตาม, มีการโทรถึง foo สองครั้งที่จบลงด้วยการโทรหาญาติ.
  • การจัดสรรหน่วยความจำ PA ล้มเหลว (XC8-2881) เมื่อใช้เครื่องมือเพิ่มประสิทธิภาพนามธรรมตามขั้นตอน ตัวเชื่อมโยงอาจรายงานข้อผิดพลาดในการจัดสรรหน่วยความจำเมื่อขนาดโค้ดใกล้เคียงกับจำนวนหน่วยความจำโปรแกรมที่มีอยู่บนอุปกรณ์ แม้ว่าโปรแกรมควรจะสามารถปรับให้พอดีกับหน่วยความจำที่มีอยู่ได้ ช่องว่าง.
  • ไม่ฉลาดนัก Smart-IO (XC8-2872) คุณสมบัติ smart-io ของคอมไพเลอร์จะสร้างโค้ดที่ถูกต้องแต่ไม่เหมาะที่สุดสำหรับฟังก์ชัน snprintf หากคุณสมบัติ const-data-in-progmem ถูกปิดใช้งานหรือหากอุปกรณ์มีคุณสมบัติทั้งหมด แฟลชแมปลงในหน่วยความจำข้อมูล
  • แม้แต่ Smart-IO ที่ฉลาดน้อยกว่า (XC8-2869) คุณลักษณะ smart-io ของคอมไพลเลอร์จะสร้างโค้ดที่ถูกต้องแต่ยังต่ำกว่าความเหมาะสมเมื่อใช้ตัวเลือก -flto และ -fno-builtin
  • การจัดวางข้อมูลแบบอ่านอย่างเดียวที่ต่ำกว่ามาตรฐาน (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) ตัวเชื่อมโยงอาจหยุดทำงานหากใช้ตัวเลือกไดรเวอร์ -mrelax เมื่อซอร์สโค้ดเรียกสัญลักษณ์ที่กำหนดโดยใช้ตัวเลือก – Wl, –defsym ตัวเชื่อมโยง
  • การเริ่มต้นไม่ถูกต้อง (XC8-2679) มีความคลาดเคลื่อนระหว่างตำแหน่งที่ค่าเริ่มต้นสำหรับออบเจ็กต์ขนาดไบต์ส่วนกลาง/คงที่บางส่วนถูกวางไว้ในหน่วยความจำข้อมูล และตำแหน่งที่จะเข้าถึงตัวแปรขณะรันไทม์
  • การเรียกฟังก์ชันทางอ้อมไม่ถูกต้อง (XC8-2628) ในบางกรณี การเรียกฟังก์ชันที่ดำเนินการผ่านตัวชี้ฟังก์ชันที่เก็บไว้เป็นส่วนหนึ่งของโครงสร้างอาจล้มเหลว
  • strtof ส่งคืนค่าศูนย์สำหรับข้าวโอ๊ตเลขฐานสิบหก (XC8-2626) ฟังก์ชันไลบรารี strtof() et al และ scanf() et al จะแปลงตัวเลขจุดลอยฐานสิบหกที่ไม่ได้ระบุเลขชี้กำลังให้เป็นศูนย์เสมอ สำหรับเช่นampเลอ: strtof(“0x1”, &endptr); จะส่งกลับค่า 0 ไม่ใช่ 1
  • การส่งข้อความที่ปรึกษาสแต็กที่ไม่ถูกต้อง (XC8-2542, XC8-2541) ในบางกรณี คำเตือนที่ปรึกษาสแต็กเกี่ยวกับการเรียกซ้ำหรือสแต็กที่ไม่แน่นอนที่ใช้ (อาจผ่านการใช้ alloca()) จะไม่ถูกส่งออกมา
  • ความล้มเหลวด้วยรหัสขัดจังหวะที่ซ้ำกัน (XC8-2421) ในกรณีที่ฟังก์ชันขัดจังหวะมากกว่าหนึ่งฟังก์ชันมีเนื้อความเดียวกัน คอมไพเลอร์อาจมีเอาต์พุตสำหรับฟังก์ชันขัดจังหวะหนึ่งที่เรียกใช้ฟังก์ชันอื่น ซึ่งจะส่งผลให้การลงทะเบียนที่ปิดกั้นการโทรทั้งหมดถูกบันทึกโดยไม่จำเป็น และการขัดจังหวะจะถูกเปิดใช้งานแม้กระทั่งก่อนที่บทส่งท้ายของตัวจัดการการขัดจังหวะปัจจุบันจะทำงาน ซึ่งอาจนำไปสู่ความล้มเหลวของโค้ดได้
  • เอาต์พุตไม่ถูกต้องพร้อมเส้นทาง DFP ที่ไม่ถูกต้อง (XC8-2376) หากคอมไพเลอร์ถูกเรียกใช้ด้วยเส้นทาง DFP ที่ไม่ถูกต้องและมีไฟล์ 'spec' สำหรับอุปกรณ์ที่เลือก คอมไพเลอร์จะไม่รายงานชุดตระกูลอุปกรณ์ที่หายไปและเลือก 'spec' แทน ไฟล์ซึ่งอาจนำไปสู่ผลลัพธ์ที่ไม่ถูกต้อง ไฟล์ 'ข้อมูลจำเพาะ' อาจไม่อัปเดตกับ DFP แบบกระจาย และมีไว้สำหรับใช้กับการทดสอบคอมไพเลอร์ภายในเท่านั้น
  • ตรวจไม่พบหน่วยความจำซ้อนทับกัน (XC8-1966) คอมไพเลอร์ตรวจไม่พบการทับซ้อนของหน่วยความจำของวัตถุที่ทำขึ้นแบบสัมบูรณ์ที่ที่อยู่ (ผ่าน __at()) และวัตถุอื่น ๆ โดยใช้ตัวระบุ __section() และที่เชื่อมโยงกับที่อยู่เดียวกัน
  • ความล้มเหลวกับฟังก์ชันไลบรารีและ __memx (XC8-1763) ที่เรียกว่าฟังก์ชัน libgcc float พร้อมอาร์กิวเมนต์ในพื้นที่ที่อยู่ __memx อาจล้มเหลว โปรดทราบว่าไลบรารีรูทีนถูกเรียกจากโอเปอเรเตอร์ C บางตัว เช่นampเลอ, รหัสต่อไปนี้ได้รับผลกระทบ: return regFloatVar > memxFloatVar;
  • การใช้งาน libgcc แบบจำกัด (AVRTC-731) สำหรับผลิตภัณฑ์ ATTiny4/5/9/10/20/40 การใช้งานไลบรารี C / Math มาตรฐานใน libgcc นั้นมีจำกัดมากหรือไม่มีอยู่
  • ข้อจำกัดของหน่วยความจำโปรแกรม (AVRTC-732) อิมเมจหน่วยความจำโปรแกรมที่มีขนาดเกิน 128 kb ได้รับการสนับสนุนโดย toolchain อย่างไรก็ตาม มีกรณีที่ทราบกันว่าลิงเกอร์ยกเลิกโดยไม่มีการผ่อนคลายและไม่มีข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์ แทนที่จะสร้างฟังก์ชัน stubs ที่จำเป็นเมื่อใช้อ็อพชัน -mrelax
  • ข้อจำกัดของพื้นที่ชื่อ (AVRTC-733) ช่องว่างที่อยู่ที่มีชื่อได้รับการสนับสนุนโดย toolchain ขึ้นอยู่กับข้อจำกัดที่กล่าวถึงในส่วนคู่มือผู้ใช้ ตัวระบุประเภทพิเศษ
  • โซนเวลา ฟังก์ชันไลบรารีจะถือว่า GMT และไม่สนับสนุนโซนเวลาท้องถิ่น ดังนั้น localtime() จะส่งกลับเวลาเดียวกันกับ gmtime() เช่นampเล.

เอกสาร / แหล่งข้อมูล

MICROCHIP XC8 C Compiler เวอร์ชัน 2.45 บันทึกประจำรุ่นสำหรับ AVR MCU [พีดีเอฟ] คำแนะนำ
AVR MCU, XC8 C, XC8 C คอมไพเลอร์เวอร์ชัน 2.45 Release Notes สำหรับ AVR MCU, คอมไพเลอร์เวอร์ชัน 2.45 Release Notes สำหรับ AVR MCU, เวอร์ชัน 2.45 Release Notes สำหรับ AVR MCU, Release Notes สำหรับ AVR MCU, หมายเหตุสำหรับ AVR MCU, AVR MCU

อ้างอิง

ฝากความคิดเห็น

ที่อยู่อีเมลของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องกรอกข้อมูลมีเครื่องหมาย *