MICROCHIP MPLAB XC8 C ซอฟต์แวร์คอมไพเลอร์
เอกสารนี้มีข้อมูลสำคัญที่เกี่ยวข้องกับคอมไพเลอร์ MPLAB XC8 C เมื่อกำหนดเป้าหมายไปที่อุปกรณ์ MICROCHIP AVR
โปรดอ่านก่อนที่จะเรียกใช้ซอฟต์แวร์นี้ ดูหมายเหตุการเผยแพร่คอมไพเลอร์ MPLAB XC8 C สำหรับเอกสาร PIC หากคุณกำลังใช้คอมไพเลอร์สำหรับอุปกรณ์ PIC 8 บิต
เกินview
การแนะนำ
การเปิดตัวคอมไพเลอร์ Microchip MPLAB® XC8 C นี้ประกอบด้วยคุณลักษณะใหม่หลายประการ การแก้ไขจุดบกพร่อง และการรองรับอุปกรณ์ใหม่
วันที่สร้าง
วันที่สร้างอย่างเป็นทางการของเวอร์ชันคอมไพเลอร์นี้คือวันที่ 3 กรกฎาคม 2022
รุ่นก่อนหน้า
เวอร์ชันคอมไพเลอร์ MPLAB XC8 C ก่อนหน้านี้คือ 2.39 ซึ่งเป็นคอมไพเลอร์ด้านความปลอดภัยเชิงฟังก์ชันที่สร้างขึ้นเมื่อวันที่ 27 มกราคม 2022 คอมไพเลอร์มาตรฐานก่อนหน้านี้คือเวอร์ชัน 2.36 ซึ่งสร้างขึ้นเมื่อวันที่ 27 มกราคม 2022
คู่มือความปลอดภัยในการทำงาน
คู่มือความปลอดภัยในการทำงานสำหรับคอมไพเลอร์ MPLAB XC มีอยู่ในแพ็คเกจเอกสารเมื่อคุณซื้อใบอนุญาตความปลอดภัยในการทำงาน
สิทธิ์การใช้งานส่วนประกอบและเวอร์ชัน
เครื่องมือคอมไพเลอร์ MPLAB® XC8 C สำหรับ AVR MCU เขียนและเผยแพร่ภายใต้ใบอนุญาตสาธารณะทั่วไป GNU (GPL) ซึ่งหมายความว่าโค้ดต้นฉบับนั้นเผยแพร่และเปิดให้สาธารณชนเข้าถึงได้อย่างอิสระ โค้ดต้นฉบับสำหรับเครื่องมือภายใต้ใบอนุญาตสาธารณะทั่วไป GNU สามารถดาวน์โหลดแยกต่างหากจากไมโครชิปได้ webเว็บไซต์. คุณสามารถอ่าน GNU GPL ได้ในไฟล์ file ชื่ออยู่ในไดเร็กทอรีย่อยของไดเร็กทอรีการติดตั้งของคุณ การอภิปรายทั่วไปเกี่ยวกับหลักการที่เป็นรากฐานของ GPL สามารถพบได้ที่นี่ รหัสสนับสนุนที่ให้ไว้สำหรับส่วนหัว fileสคริปต์ลิงก์และไลบรารีรันไทม์เป็นโค้ดที่เป็นกรรมสิทธิ์และไม่ครอบคลุมภายใต้ GPL
คอมไพเลอร์นี้เป็นการใช้งาน GCC เวอร์ชัน 5.4.0, binutils เวอร์ชัน 2.26 และใช้ avr-libc เวอร์ชัน 2.0.0
ความต้องการของระบบ
คอมไพเลอร์ C ของ MPLAB XC8 และซอฟต์แวร์การออกใบอนุญาตที่ใช้นั้นสามารถใช้ได้กับระบบปฏิบัติการต่างๆ รวมถึงเวอร์ชัน 64 บิตของระบบปฏิบัติการต่อไปนี้: รุ่น Professional ของ Microsoft Windows 10, Ubuntu 18.04 และ macOS 10.15.5 ไบนารีสำหรับ Windows ได้รับการลงนามโค้ดแล้ว ไบนารีสำหรับ Mac OS ได้รับการลงนามโค้ดและรับรองโดยผู้รับรองแล้ว
หากคุณกำลังใช้งานเซิร์ฟเวอร์ใบอนุญาตเครือข่าย ให้ใช้เฉพาะคอมพิวเตอร์ที่มีระบบปฏิบัติการที่รองรับโดยคอมไพเลอร์เท่านั้นในการโฮสต์เซิร์ฟเวอร์ใบอนุญาต ตั้งแต่เวอร์ชัน xclm 2.0 เป็นต้นไป สามารถติดตั้งเซิร์ฟเวอร์ใบอนุญาตเครือข่ายบนแพลตฟอร์ม Microsoft Windows Server ได้ แต่เซิร์ฟเวอร์ใบอนุญาตไม่จำเป็นต้องทำงานบนระบบปฏิบัติการเวอร์ชันเซิร์ฟเวอร์
อุปกรณ์ที่สนับสนุน
คอมไพเลอร์นี้รองรับอุปกรณ์ MCU AVR 8 บิตทั้งหมดที่ทราบในช่วงเวลาที่เผยแพร่ ดู (ในไดเร็กทอรีเอกสารของคอมไพเลอร์) เพื่อดูรายการอุปกรณ์ที่รองรับทั้งหมด fileนอกจากนี้ยังมีรายการการตั้งค่าบิตการกำหนดค่าสำหรับแต่ละอุปกรณ์อีกด้วย
รุ่นและการอัพเกรดใบอนุญาต
สามารถเปิดใช้งานคอมไพเลอร์ MPLAB XC8 ได้ในรูปแบบผลิตภัณฑ์ที่มีใบอนุญาต (PRO) หรือไม่มีใบอนุญาต (ฟรี) คุณต้องซื้อรหัสเปิดใช้งานเพื่ออนุญาตสิทธิ์คอมไพเลอร์ของคุณ ใบอนุญาตช่วยให้เพิ่มประสิทธิภาพได้ในระดับที่สูงกว่าเมื่อเทียบกับผลิตภัณฑ์ฟรี คอมไพเลอร์ที่ไม่มีใบอนุญาตสามารถใช้งานได้ไม่จำกัดเวลาโดยไม่ต้องมีใบอนุญาต
คอมไพเลอร์ MPLAB XC8 Functional Safety จะต้องเปิดใช้งานด้วยใบอนุญาตด้านความปลอดภัยในการทำงานที่ซื้อจาก Microchip คอมไพเลอร์จะไม่ทำงานหากไม่มีใบอนุญาตนี้ เมื่อเปิดใช้งานแล้ว คุณสามารถเลือกระดับการเพิ่มประสิทธิภาพใดก็ได้และใช้คุณลักษณะของคอมไพเลอร์ทั้งหมด คอมไพเลอร์ MPLAB XC Functional Safety รุ่นนี้รองรับใบอนุญาตเซิร์ฟเวอร์เครือข่าย
ดูเอกสารการติดตั้งและการให้สิทธิ์การใช้งานคอมไพเลอร์ MPLAB XC C (DS50002059) สำหรับข้อมูลเกี่ยวกับประเภทใบอนุญาตและการติดตั้งคอมไพเลอร์พร้อมใบอนุญาต
การติดตั้งและเปิดใช้งาน
ดูเพิ่มเติมที่ส่วนปัญหาการย้ายข้อมูลและข้อจำกัดสำหรับข้อมูลสำคัญเกี่ยวกับตัวจัดการใบอนุญาตล่าสุดที่รวมอยู่ในคอมไพเลอร์นี้
หากใช้ MPLAB IDE โปรดติดตั้ง MPLAB X IDE เวอร์ชันล่าสุด 5.0 หรือใหม่กว่าก่อนติดตั้งเครื่องมือนี้ ออกจาก IDE ก่อนติดตั้งคอมไพเลอร์ เรียกใช้โปรแกรมติดตั้งคอมไพเลอร์ .exe (Windows), .run (Linux) หรือแอปพลิเคชัน (macOS) เช่น XC8-1.00.11403-windows.exe แล้วทำตามคำแนะนำบนหน้าจอ
แนะนำให้ใช้ไดเรกทอรีการติดตั้งเริ่มต้น หากคุณใช้ Linux คุณต้องติดตั้งคอมไพเลอร์โดยใช้เทอร์มินัลและจากบัญชีรูท ติดตั้งโดยใช้บัญชี macOS ที่มีสิทธิ์ของผู้ดูแลระบบ
ขณะนี้การเปิดใช้งานดำเนินการแยกกันกับการติดตั้ง ดูเอกสาร License Manager for MPLAB® XC C Compilers (DS52059) สำหรับข้อมูลเพิ่มเติม
หากคุณเลือกที่จะเรียกใช้คอมไพเลอร์ภายใต้ใบอนุญาตการประเมิน ตอนนี้คุณจะได้รับคำเตือนระหว่างการรวบรวมเมื่อคุณอยู่ภายใน 14 วันนับจากสิ้นสุดระยะเวลาการประเมินของคุณ คำเตือนเดียวกันนี้จะเกิดขึ้นหากคุณอยู่ภายใน 14 วันนับจากวันที่การสมัคร HPA ของคุณสิ้นสุดลง
XC Network License Server เป็นตัวติดตั้งแยกต่างหากและไม่ได้รวมอยู่ในตัวติดตั้งคอมไพเลอร์แบบผู้ใช้รายเดียว
XC License Manager รองรับการโรมมิ่งใบอนุญาตเครือข่ายแบบลอยตัวแล้ว ฟีเจอร์นี้ออกแบบมาเพื่อผู้ใช้มือถือโดยเฉพาะ ช่วยให้ใบอนุญาตแบบลอยตัวสามารถออกจากเครือข่ายได้ชั่วระยะเวลาหนึ่ง เมื่อใช้ฟีเจอร์นี้ คุณสามารถตัดการเชื่อมต่อจากเครือข่ายและยังคงใช้คอมไพเลอร์ MPLAB XC ได้ ดูโฟลเดอร์เอกสารของการติดตั้ง XCLM เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับฟีเจอร์นี้ MPLAB X IDE มีหน้าต่างใบอนุญาต (เครื่องมือ > ใบอนุญาต) สำหรับจัดการการโรมมิ่งด้วยภาพ
การแก้ไขปัญหาการติดตั้ง
หากคุณประสบปัญหาในการติดตั้งคอมไพเลอร์ในระบบปฏิบัติการ Windows ใดๆ ให้ลองทำตามคำแนะนำต่อไปนี้
- เรียกใช้การติดตั้งในฐานะผู้ดูแลระบบ
- ตั้งค่าสิทธิ์ของแอปพลิเคชันติดตั้งเป็น 'ควบคุมเต็มรูปแบบ' (คลิกขวาที่ fileเลือกคุณสมบัติ แท็บความปลอดภัย เลือกผู้ใช้ แก้ไข)
- ตั้งค่าการอนุญาตของโฟลเดอร์ชั่วคราวเป็น “ควบคุมเต็ม!
หากต้องการระบุตำแหน่งของโฟลเดอร์ temp ให้พิมพ์ %temp% ในคำสั่ง Run (ปุ่มโลโก้ Windows + R) ซึ่งจะเปิด file กล่องโต้ตอบ explorer จะแสดงไดเรกทอรีนั้นและจะอนุญาตให้คุณระบุเส้นทางของโฟลเดอร์นั้นได้
เอกสารประกอบคอมไพเลอร์
คู่มือผู้ใช้ของคอมไพเลอร์สามารถเปิดได้จากหน้า HTML ที่เปิดขึ้นในเบราว์เซอร์ของคุณเมื่อคลิกปุ่มความช่วยเหลือสีน้ำเงินในแดชบอร์ด MPLAB X IDE ตามที่ระบุไว้ในภาพหน้าจอ
หากคุณกำลังสร้างสำหรับเป้าหมาย AVR 8 บิต คู่มือผู้ใช้คอมไพเลอร์ MPLAB® XC8 C สำหรับ AVR® MCU จะมีข้อมูลเกี่ยวกับตัวเลือกคอมไพเลอร์และคุณสมบัติที่ใช้กับสถาปัตยกรรมนี้
การสนับสนุนลูกค้า
ไมโครชิปยินดีรับรายงานข้อบกพร่อง ข้อเสนอแนะ หรือความคิดเห็นเกี่ยวกับเวอร์ชันคอมไพเลอร์นี้ โปรดส่งรายงานข้อบกพร่องหรือคำขอคุณสมบัติผ่านระบบสนับสนุน
เอกสารอัพเดท
สำหรับเอกสาร MPLAB XC8 เวอร์ชันออนไลน์และล่าสุด โปรดไปที่เอกสารทางเทคนิคออนไลน์ของไมโครชิป webเว็บไซต์.
เอกสาร AVR ใหม่หรือที่อัปเดตในรุ่นนี้:
- ประกาศลิขสิทธิ์ของ MUSL
- การติดตั้งและการอนุญาตสิทธิ์คอมไพเลอร์ MPLAB XC C (การแก้ไข M)
- คู่มือผู้ใช้ MPLAB XC8 สำหรับวิศวกรฝังตัว – MCU AVR (รุ่นแก้ไข A)
- คู่มือผู้ใช้คอมไพเลอร์ MPLAB XC8 C สำหรับ AVR MCU (การแก้ไข F)
- คู่มืออ้างอิงห้องสมุดมาตรฐานรวม Microchip (ฉบับแก้ไข B)
คู่มืออ้างอิงไลบรารีมาตรฐานรวมของ Microchip อธิบายถึงพฤติกรรมและอินเทอร์เฟซของฟังก์ชันที่กำหนดโดยไลบรารีมาตรฐานรวมของ Microchip รวมถึงการใช้งานไลบรารีและแมโครตามจุดประสงค์ ข้อมูลบางส่วนนี้เคยอยู่ในคู่มือผู้ใช้คอมไพเลอร์ MPLAB® XC8 C สำหรับ AVR® MCU ข้อมูลไลบรารีเฉพาะอุปกรณ์ยังคงอยู่ในคู่มือคอมไพเลอร์นี้
หากคุณเพิ่งเริ่มใช้อุปกรณ์ 8 บิตและคอมไพเลอร์ MPLAB XC8 C คู่มือผู้ใช้ MPLAB® XC8 สำหรับวิศวกรฝังตัว – MCU AVR® (DS50003108) มีข้อมูลเกี่ยวกับการตั้งค่าโปรเจ็กต์ใน MPLAB X IDE และการเขียนโค้ดสำหรับโปรเจ็กต์ MPLAB XC8 C แรกของคุณ คู่มือนี้แจกจ่ายพร้อมกับคอมไพเลอร์แล้ว
คู่มือผู้ใช้ Hamate ได้รับการเพิ่มไว้ในไดเร็กทอรีเอกสารในรุ่นนี้ คู่มือนี้จัดทำขึ้นสำหรับผู้ที่ใช้ Hamate เป็นแอปพลิเคชันแบบสแตนด์อโลน
มีอะไรใหม่
ต่อไปนี้คือคุณลักษณะเป้าหมาย AVR ใหม่ที่คอมไพเลอร์รองรับแล้ว หมายเลขเวอร์ชันในหัวข้อย่อยระบุเวอร์ชันคอมไพเลอร์แรกที่จะรองรับคุณลักษณะที่ตามมา
เวอร์ชัน 2.40
รองรับอุปกรณ์ใหม่ ขณะนี้มีการรองรับชิ้นส่วน AVR ต่อไปนี้แล้ว: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32 และ AVR64EA48
ปรับปรุงการแยกขั้นตอนให้ดีขึ้น เครื่องมือเพิ่มประสิทธิภาพการแยกขั้นตอน (Procedural Abstraction - PA) ได้รับการปรับปรุงเพื่อให้สามารถระบุโค้ดที่มีคำสั่งเรียกใช้ฟังก์ชัน (call recall) ได้ ซึ่งจะเกิดขึ้นเฉพาะในกรณีที่ไม่ใช้สแต็กเพื่อส่งอาร์กิวเมนต์หรือรับค่าส่งคืนจากฟังก์ชัน สแต็กจะใช้เมื่อเรียกใช้ฟังก์ชันที่มีรายการอาร์กิวเมนต์ตัวแปรหรือเมื่อเรียกใช้ฟังก์ชันที่รับอาร์กิวเมนต์มากกว่าจำนวนรีจิสเตอร์ที่กำหนดไว้สำหรับจุดประสงค์นี้ คุณสมบัตินี้สามารถปิดใช้งานได้โดยใช้ตัวเลือก monk-pa-outline-calls หรือสามารถปิดใช้งานการแยกขั้นตอนทั้งหมดสำหรับอ็อบเจ็กต์ได้ file หรือฟังก์ชันโดยใช้ -monk-pa-on-file และ -mo.-pa-on-function ตามลำดับ หรือโดยใช้แอตทริบิวต์ nipa (ตัวระบุ nipa) อย่างเลือกสรรด้วยฟังก์ชัน
แมโครการครอบคลุมโค้ด คอมไพเลอร์จะกำหนดแมโคร __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-proem สามารถใช้เพื่อให้ตัวเชื่อมวางข้อมูลที่ผ่านคุณสมบัติทั้งหมดไว้ในส่วน 32k หนึ่งส่วนและเริ่มต้นรีจิสเตอร์ SFR ที่เกี่ยวข้องโดยอัตโนมัติเพื่อให้แน่ใจว่าข้อมูลนี้ถูกแมปลงในพื้นที่หน่วยความจำข้อมูล ซึ่งจะเข้าถึงได้อย่างมีประสิทธิภาพมากขึ้น
ไลบรารีมาตรฐานรวมของ Microchip คอมไพเลอร์ MPLAB XC ทั้งหมดจะแชร์ไลบรารีมาตรฐาน Unified ของ Microchip ซึ่งขณะนี้พร้อมใช้งานแล้วพร้อมกับ MPLAB XC8 รุ่นนี้ คู่มือผู้ใช้คอมไพเลอร์ C ของ MPLAB® XC8 หรือ MCU AVR® ไม่มีเอกสารประกอบสำหรับฟังก์ชันมาตรฐานเหล่านี้อีกต่อไป ข้อมูลนี้สามารถพบได้ในคู่มืออ้างอิงไลบรารีมาตรฐาน Unified ของ Microchip โปรดทราบว่าฟังก์ชันบางอย่างที่กำหนดไว้ก่อนหน้านี้โดย avr-libc จะไม่พร้อมใช้งานอีกต่อไป (ดู Librar):'. ฟังก์ชันการทำงาน...)
สมาร์ทไอโอ ฟังก์ชัน IO ในกลุ่มการพิมพ์และการสแกนเป็นส่วนหนึ่งของไลบรารีรวมใหม่ โดยตอนนี้ฟังก์ชันเหล่านี้จะถูกสร้างเองในแต่ละรุ่นตามวิธีการใช้งานฟังก์ชันเหล่านี้ในโปรแกรม ซึ่งจะช่วยลดทรัพยากรที่โปรแกรมใช้ลงได้อย่างมาก
ตัวเลือกความช่วยเหลือ IO อัจฉริยะ เมื่อวิเคราะห์การเรียกใช้ฟังก์ชัน IO อัจฉริยะ (เช่น printf() หรือ scanf()) คอมไพเลอร์ไม่สามารถระบุตัวระบุการแปลงที่ต้องการสำหรับการเรียกใช้จากสตริงรูปแบบหรืออนุมานจากอาร์กิวเมนต์ได้เสมอไป ก่อนหน้านี้ คอมไพเลอร์จะไม่ทำการสันนิษฐานใดๆ เสมอ และจะตรวจสอบให้แน่ใจว่าฟังก์ชัน IO ที่ทำงานได้อย่างสมบูรณ์นั้นเชื่อมโยงกับอิมเมจโปรแกรมขั้นสุดท้ายแล้ว ตัวเลือกใหม่ – msmart-io-format=fmt ได้รับการเพิ่มเข้ามาเพื่อให้คอมไพเลอร์สามารถแจ้งตัวระบุการแปลงที่ใช้โดยฟังก์ชัน IO อัจฉริยะแทน ซึ่งการใช้งานนั้นไม่ชัดเจน ทำให้ไม่สามารถเชื่อมโยงรูทีน IO ที่ยาวเกินไปได้ (ดูตัวเลือก smart-io-format สำหรับรายละเอียดเพิ่มเติม)
การวางส่วนที่กำหนดเอง ก่อนหน้านี้ ตัวเลือก -Wl, –section-start จะวางส่วนที่ระบุในตำแหน่งที่ร้องขอเท่านั้นเมื่อสคริปต์ลิงก์เกอร์กำหนดส่วนเอาต์พุตที่มีชื่อเดียวกัน เมื่อไม่เป็นเช่นนั้น ส่วนจะถูกวางไว้ในตำแหน่งที่ลิงก์เกอร์เลือก และตัวเลือกจะถูกละเว้นไปโดยพื้นฐาน ตอนนี้ ตัวเลือกจะถูกนำไปใช้สำหรับส่วนที่กำหนดเองทั้งหมด แม้ว่าสคริปต์ลิงก์เกอร์จะไม่ได้กำหนดส่วนนั้นก็ตาม อย่างไรก็ตาม โปรดทราบว่าสำหรับส่วนมาตรฐาน เช่น . text, . bss หรือ . data ผู้จัดสรรที่เหมาะสมที่สุดจะยังคงควบคุมตำแหน่งของส่วนเหล่านั้นได้อย่างสมบูรณ์ และตัวเลือกจะไม่มีผลใดๆ ให้ใช้ตัวเลือก -Wl, -Tsection=add ตามที่อธิบายไว้ในคู่มือผู้ใช้
เวอร์ชัน 2.32
คำแนะนำการสแต็ค ฟีเจอร์คำแนะนำสแต็กของคอมไพเลอร์พร้อมใช้งานพร้อมกับใบอนุญาตคอมไพเลอร์ PRO ซึ่งสามารถใช้เพื่อประมาณความลึกสูงสุดของสแต็กใดๆ ที่ใช้โดยโปรแกรม ฟีเจอร์นี้จะสร้างและวิเคราะห์กราฟการเรียกใช้ของโปรแกรม กำหนดการใช้งานสแต็กของแต่ละฟังก์ชัน และสร้างรายงานซึ่งสามารถอนุมานความลึกของสแต็กที่ใช้โดยโปรแกรมได้ ฟีเจอร์นี้เปิดใช้งานได้ผ่านตัวเลือกบรรทัดคำสั่ง -mchp-stack-usage โดยจะพิมพ์สรุปการใช้งานสแต็กหลังจากดำเนินการแล้ว รายงานสแต็กโดยละเอียดสามารถดูได้ในแผนที่ fileซึ่งสามารถขอได้ตามปกติ
รองรับอุปกรณ์ใหม่ รองรับ มีจำหน่ายสำหรับชิ้นส่วน AVR ต่อไปนี้: ATTINY 427, ATTINY 424, ATTINY 426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 และ AVR32DB48
รองรับอุปกรณ์หดกลับ รองรับ ไม่สามารถใช้ได้กับชิ้นส่วน AVR ต่อไปนี้อีกต่อไป: AVR16DA28, AVR16DA32 และ AVR16DA48
เวอร์ชัน 2.31
ไม่มี.
เวอร์ชัน 2.30
ตัวเลือกใหม่เพื่อป้องกันการเริ่มต้นข้อมูล ตัวเลือกไดรเวอร์ -mno-data-ini t ใหม่จะป้องกันการเริ่มต้นข้อมูลและการล้างส่วน bss ตัวเลือกนี้ทำงานโดยระงับเอาต์พุตของสัญลักษณ์ do_copy_data และ d o_clear_bss ในแอสเซมบลี files ซึ่งจะป้องกันการรวมรูทีนเหล่านั้นโดยตัวเชื่อมโยง
การเพิ่มประสิทธิภาพขั้นสูง มีการปรับปรุงการเพิ่มประสิทธิภาพจำนวนหนึ่ง รวมถึงการลบคำสั่งส่งคืนที่ซ้ำซ้อน การลบการข้ามบางส่วนตามคำสั่งข้ามถ้าบิตเป็น และการปรับปรุงขั้นตอนนามธรรมและความสามารถในการวนซ้ำกระบวนการนี้
ขณะนี้มีตัวเลือกเพิ่มเติมสำหรับควบคุมการเพิ่มประสิทธิภาพบางส่วน โดยเฉพาะ -f section anchors ซึ่งอนุญาตให้เข้าถึงวัตถุคงที่โดยสัมพันธ์กับสัญลักษณ์หนึ่งตัว -mpai derations=n ซึ่งอนุญาตให้เปลี่ยนจำนวนการวนซ้ำการแยกขั้นตอนจากค่าเริ่มต้น 2 ครั้งได้ และ -mpa- call cost- shortcall ซึ่งดำเนินการแยกขั้นตอนที่ก้าวร้าวมากขึ้น โดยหวังว่าตัวเชื่อมจะผ่อนคลายการเรียกที่ยาวนาน ตัวเลือกสุดท้ายนี้สามารถเพิ่มขนาดโค้ดได้หากไม่ปฏิบัติตามสมมติฐานพื้นฐาน
รองรับอุปกรณ์ใหม่ รองรับชิ้นส่วน AVR ต่อไปนี้: AVR16DA28, AVR16DA32,
AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 และ AVR128DB64
รองรับอุปกรณ์หดกลับ ไม่สามารถรองรับชิ้นส่วน AVR ต่อไปนี้ได้อีกต่อไป: ATA5272, ATA5790, ATA5790N,ATA5791,ATA5795,ATA6285,ATA6286,ATA6612C,ATA6613C,ATA6614Q, ATA6616C, ATA6617C และ ATA664251
เวอร์ชัน 2.29 (รุ่นความปลอดภัยด้านการทำงาน)
ส่วนหัว file สำหรับคอมไพเลอร์ในตัว เพื่อให้แน่ใจว่าคอมไพเลอร์สามารถปฏิบัติตามข้อกำหนดภาษา เช่น MISRA ได้ ส่วนหัว fileซึ่งจะรวมไว้โดยอัตโนมัติด้วย ได้รับการอัปเดตแล้ว ส่วนหัวนี้ประกอบด้วยโปรโตไทป์สำหรับฟังก์ชันในตัวทั้งหมด เช่น _buil tin _avrnop () และ _buil tin_ avr delay_ cycles () บิวต์อินบางตัวอาจไม่สอดคล้องกับ MISRA สามารถละเว้นได้โดยการเพิ่ม define _Xe_ STRICT_ MISRA ลงในบรรทัดคำสั่งคอมไพเลอร์ บิวต์อินและคำประกาศของบิวต์อินได้รับการอัปเดตเพื่อใช้ประเภทความกว้างคงที่
เวอร์ชัน 2.20
รองรับอุปกรณ์ใหม่ มีการรองรับชิ้นส่วน AVR ต่อไปนี้: ATTINY1624, ATTINY1626 และ ATTINY1627
การจัดสรรให้เหมาะสมยิ่งขึ้น ตัวจัดสรรที่เหมาะสมที่สุด (BFA) ในคอมไพเลอร์ได้รับการปรับปรุงเพื่อให้ส่วนต่างๆ ได้รับการจัดสรรตามลำดับที่เหมาะสมยิ่งขึ้น ปัจจุบัน BFA รองรับพื้นที่ที่อยู่ที่มีชื่อและจัดการการเริ่มต้นข้อมูลได้ดีขึ้น
ปรับปรุงการแยกขั้นตอนให้ดีขึ้น ปัจจุบันมีการเพิ่มประสิทธิภาพการแยกส่วนเชิงขั้นตอนกับลำดับโค้ดมากขึ้น สถานการณ์ก่อนหน้านี้ที่การเพิ่มประสิทธิภาพนี้อาจเพิ่มขนาดโค้ดได้รับการแก้ไขโดยการทำให้โค้ดเพิ่มประสิทธิภาพทราบถึงกระบวนการรวบรวมขยะของลิงก์เกอร์
ขาดการประกอบ AVR AVR Assembler ไม่ได้รวมอยู่ในการจำหน่ายนี้อีกต่อไป
เวอร์ชัน 2.19 (รุ่นความปลอดภัยด้านการทำงาน)
ไม่มี.
เวอร์ชัน 2.10
การครอบคลุมโค้ด รุ่นนี้มีคุณสมบัติการครอบคลุมโค้ดที่ช่วยในการวิเคราะห์ขอบเขตที่โค้ดต้นฉบับของโปรเจ็กต์ถูกดำเนินการ ใช้ตัวเลือก -mcodecov=ram เพื่อเปิดใช้งาน หลังจากดำเนินการโปรแกรมบนฮาร์ดแวร์ของคุณแล้ว ข้อมูลการครอบคลุมโค้ดจะถูกรวบรวมไว้ในอุปกรณ์ และสามารถถ่ายโอนและแสดงโดย MPLAB X IDE ผ่านปลั๊กอินการครอบคลุมโค้ด ดูเอกสาร IDE สำหรับข้อมูลเกี่ยวกับปลั๊กอินนี้ที่สามารถรับได้ #pragma mcodecov อาจใช้เพื่อแยกฟังก์ชันที่ตามมาออกจากการวิเคราะห์การครอบคลุม โดยในอุดมคติ ควรเพิ่ม pragma ไว้ที่จุดเริ่มต้นของ file เพื่อแยกทั้งหมดนั้นออก file จากการวิเคราะห์การครอบคลุม อีกทางหนึ่ง อาจใช้แอตทริบิวต์ ( (mcodecov) ) เพื่อยกเว้นฟังก์ชันเฉพาะจากการวิเคราะห์การครอบคลุม
คำอธิบายอุปกรณ์ files อุปกรณ์ใหม่ file เรียกว่า avr chipinfo.html อยู่ในไดเร็กทอรีเอกสารของการแจกจ่ายคอมไพเลอร์ file แสดงรายการอุปกรณ์ทั้งหมดที่รองรับโดยคอมไพเลอร์ คลิกที่ชื่ออุปกรณ์ จากนั้นจะเปิดหน้าที่แสดงคู่ค่า/การตั้งค่าบิตการกำหนดค่าที่อนุญาตทั้งหมดสำหรับอุปกรณ์นั้น โดยมีตัวอย่างampเลส.
นามธรรมขั้นตอน ได้มีการเพิ่มการเพิ่มประสิทธิภาพการแยกขั้นตอน ซึ่งแทนที่บล็อกทั่วไปของโค้ดแอสเซมบลีด้วยการเรียกสำเนาที่แยกออกมาของบล็อกนั้น ลงในคอมไพเลอร์แล้ว การเพิ่มประสิทธิภาพเหล่านี้ดำเนินการโดยแอปพลิเคชันแยกต่างหาก ซึ่งจะถูกเรียกใช้โดยอัตโนมัติโดยคอมไพเลอร์เมื่อเลือกการเพิ่มประสิทธิภาพระดับ 2, 3 หรือ การเพิ่มประสิทธิภาพเหล่านี้จะช่วยลดขนาดโค้ด แต่ก็อาจลดความเร็วในการทำงานและความสามารถในการดีบักโค้ดได้
สามารถปิดใช้งานการแยกขั้นตอนได้ในระดับการเพิ่มประสิทธิภาพที่สูงขึ้นโดยใช้ตัวเลือก -mno-pa หรือสามารถเปิดใช้งานได้ในระดับการเพิ่มประสิทธิภาพที่ต่ำกว่า (ขึ้นอยู่กับใบอนุญาตของคุณ) โดยใช้ -mpa สามารถปิดใช้งานได้สำหรับอ็อบเจ็กต์ file ใช้ -mno-pa-on-file=fileชื่อหรือปิดการใช้งานสำหรับฟังก์ชันโดยใช้ -mno-pa บนฟังก์ชัน = ฟังก์ชัน
ภายในโค้ดต้นฉบับของคุณ คุณสามารถปิดการใช้งานการแยกขั้นตอนสำหรับฟังก์ชันได้โดยใช้ _attribute_ ( (nopa)) กับคำจำกัดความของฟังก์ชัน หรือโดยใช้ _nopa ซึ่งขยายเป็นแอตทริบิวต์ ( (nopa, noinline)) และป้องกันไม่ให้ฟังก์ชันอินไลน์เกิดขึ้นและป้องกันไม่ให้มีการแยกขั้นตอนของโค้ดอินไลน์
รองรับการล็อคบิตใน Pragma ตอนนี้สามารถใช้การกำหนดค่า #pragma เพื่อระบุบิตล็อก AVR รวมถึงบิตการกำหนดค่าอื่นๆ ได้ด้วย ตรวจสอบข้อมูลชิป AVR ในไฟล์ html file (ดังที่กล่าวไว้ข้างต้น) สำหรับคู่การตั้งค่า/ค่าที่จะใช้กับ Pragma นี้
รองรับอุปกรณ์ใหม่ มีการรองรับส่วนต่อไปนี้: AVR28DA128, AVR64DA128,AVR32DA128 และ AVR48DA128
เวอร์ชัน 2.05
คุ้มค่าเงินมากขึ้น เวอร์ชัน macOS ของคอมไพเลอร์และตัวจัดการใบอนุญาตนี้เป็นแอปพลิเคชัน 64 บิตแล้ว ซึ่งจะทำให้มั่นใจได้ว่าคอมไพเลอร์จะติดตั้งและทำงานได้โดยไม่มีคำเตือนบน macOS เวอร์ชันล่าสุด
วัตถุ Const ในหน่วยความจำโปรแกรม ขณะนี้คอมไพเลอร์สามารถวางวัตถุที่มีคุณสมบัติ const ในหน่วยความจำแฟลชของโปรแกรมได้ แทนที่จะให้วัตถุเหล่านี้อยู่ใน RAM คอมไพเลอร์ได้รับการปรับเปลี่ยนเพื่อให้ข้อมูลทั่วโลกที่มีคุณสมบัติ const ถูกเก็บไว้ในหน่วยความจำแฟลชของโปรแกรม และสามารถเข้าถึงข้อมูลนี้ได้โดยตรงและโดยอ้อมโดยใช้คำสั่งหน่วยความจำโปรแกรมที่เหมาะสม คุณลักษณะใหม่นี้เปิดใช้งานตามค่าเริ่มต้น แต่สามารถปิดใช้งานได้โดยใช้ตัวเลือก -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 รุ่นเก่าได้โดยตรงโดยใช้ตัวเลือกสไตล์เก่าที่ยอมรับในเวอร์ชันคอมไพเลอร์ก่อนหน้านี้
อินเทอร์เฟซ C ทั่วไป ตอนนี้คอมไพเลอร์นี้สามารถทำงานร่วมกับ MPLAB Common C Interface ได้แล้ว ทำให้สามารถพอร์ตโค้ดต้นฉบับไปยังคอมไพเลอร์ MPLAB XC ทั้งหมดได้ง่ายขึ้น ตัวเลือก -mext=cci จะร้องขอฟีเจอร์นี้ ทำให้สามารถใช้ไวยากรณ์อื่นสำหรับส่วนขยายภาษาต่างๆ ได้
พนักงานขับรถบรรณารักษ์คนใหม่ ไดรเวอร์ไลบรารีใหม่จะวางอยู่เหนือไลบรารีไลบรารี PIC ก่อนหน้าและไลบรารี avr-ar ของ AVR ไดรเวอร์นี้ยอมรับตัวเลือกสไตล์ GCC-archiver ซึ่งจะถูกแปลหรือส่งต่อไปยังไลบรารีที่กำลังดำเนินการ ไดรเวอร์ใหม่อนุญาตให้ใช้ชุดตัวเลือกที่คล้ายคลึงกันซึ่งมีความหมายคล้ายกันเพื่อใช้ในการสร้างหรือจัดการไลบรารี PIC หรือ AVR file จึงเป็นหนทางที่แนะนำในการวิงวอนบรรณารักษ์ หากจำเป็นสำหรับโครงการเดิม บรรณารักษ์คนก่อนสามารถเรียกได้โดยตรงโดยใช้ตัวเลือกแบบเก่าที่ยอมรับในเวอร์ชันคอมไพเลอร์ก่อนหน้า
ปัญหาการโยกย้าย
ต่อไปนี้คือคุณลักษณะที่ตอนนี้ได้รับการจัดการแตกต่างกันโดยคอมไพเลอร์ การเปลี่ยนแปลงเหล่านี้อาจต้องมีการปรับเปลี่ยนโค้ดต้นฉบับของคุณหากจะย้ายโค้ดไปยังเวอร์ชันคอมไพเลอร์นี้ หมายเลขเวอร์ชันในหัวข้อย่อยระบุเวอร์ชันคอมไพเลอร์แรกที่จะรองรับการเปลี่ยนแปลงที่ตามมา
เวอร์ชัน 2.40
ไม่มี.
เวอร์ชัน 2.39 (รุ่นความปลอดภัยด้านการทำงาน)
ไม่มี.
เวอร์ชัน 2.36
ไม่มี.
เวอร์ชัน 2.35
การจัดการสตริงกับเบส (XCS-2420) เพื่อให้แน่ใจว่ามีความสอดคล้องกับคอมไพเลอร์ XC อื่นๆ ฟังก์ชัน string-to ของ XC8 เช่น strtol() เป็นต้น จะไม่พยายามแปลงสตริงอินพุตอีกต่อไปหากฐานที่ระบุมีขนาดใหญ่กว่า 36 และจะตั้งค่า errno เป็น EINVAL แทน มาตรฐาน C ไม่ได้ระบุลักษณะการทำงานของฟังก์ชันเมื่อค่าฐานนี้เกิน
การเพิ่มประสิทธิภาพความเร็วที่ไม่เหมาะสม การปรับให้เหมาะสมขั้นตอนที่เป็นนามธรรมถูกเปิดใช้งานเมื่อเลือกการปรับให้เหมาะสมระดับ 3 (-03) การเพิ่มประสิทธิภาพเหล่านี้ลดขนาดโค้ดโดยแลกกับความเร็วของโค้ด ดังนั้นจึงไม่ควรดำเนินการ โครงการที่ใช้ระดับการปรับให้เหมาะสมนี้อาจเห็นความแตกต่างของขนาดโค้ดและความเร็วในการดำเนินการเมื่อสร้างด้วยรีลีสนี้
การทำงานของห้องสมุด ปัจจุบันโค้ดสำหรับฟังก์ชันไลบรารี C มาตรฐานจำนวนมากมาจากไลบรารีมาตรฐาน Unified ของ Microchip ซึ่งอาจแสดงพฤติกรรมที่แตกต่างกันในบางสถานการณ์เมื่อเปรียบเทียบกับไลบรารี avr-libc ก่อนหน้านี้ ตัวอย่างเช่นampไม่จำเป็นต้องเชื่อมโยงในไลบรารี lprintf_flt (ตัวเลือก -print _flt) อีกต่อไปเพื่อเปิดใช้งานการสนับสนุน IO ที่จัดรูปแบบสำหรับตัวระบุรูปแบบ float คุณสมบัติ IO อัจฉริยะของไลบรารี Microchip Unified Standard ทำให้ตัวเลือกนี้ซ้ำซ้อน นอกจากนี้ การใช้รูทีนที่มี _p ต่อท้ายสำหรับฟังก์ชันสตริงและหน่วยความจำ (เช่น strcpy_P () เป็นต้น) ที่ทำงานบนสตริง const ในแฟลชไม่จำเป็นอีกต่อไป รูทีน C มาตรฐาน (เช่น strcpy ()) จะทำงานได้อย่างถูกต้องกับข้อมูลดังกล่าวเมื่อเปิดใช้งานคุณสมบัติ const-data-in-program-memory
เวอร์ชัน 2.32
ไม่มี.
เวอร์ชัน 2.31
ไม่มี.
เวอร์ชัน 2.30
ไม่มี.
เวอร์ชัน 2.29 (รุ่นความปลอดภัยด้านการทำงาน)
ไม่มี.
เวอร์ชัน 2.20
เปลี่ยนรูปแบบ DFP ตอนนี้คอมไพเลอร์ใช้เค้าโครงอื่นที่ใช้โดย DFP (Device Family Packs) ซึ่งหมายความว่า DFP รุ่นเก่าอาจไม่ทำงานกับรุ่นนี้ และคอมไพเลอร์รุ่นเก่าจะไม่สามารถใช้ DFP รุ่นล่าสุดได้
เวอร์ชัน 2.19 (รุ่นความปลอดภัยด้านการทำงาน)
ไม่มี.
เวอร์ชัน 2.10
ไม่มี
เวอร์ชัน 2.05
วัตถุ Const ในหน่วยความจำโปรแกรม โปรดทราบว่าวัตถุที่มีคุณสมบัติ const ตามค่าเริ่มต้นจะถูกวางและเข้าถึงในหน่วยความจำของโปรแกรม (ตามที่อธิบายไว้ที่นี่) ซึ่งจะส่งผลต่อขนาดและความเร็วในการทำงานของโครงการของคุณ แต่ควรช่วยลดการใช้ RAM ได้ หากจำเป็น คุณสามารถปิดใช้งานฟีเจอร์นี้ได้โดยใช้ตัวเลือก -mnoconst- da ta-in-progmem
เวอร์ชัน 2.00
ฟิวส์การกำหนดค่า ตอนนี้ฟิวส์การกำหนดค่าอุปกรณ์สามารถตั้งโปรแกรมได้โดยใช้ config pragma ตามด้วยคู่ค่าการตั้งค่าเพื่อระบุสถานะฟิวส์ เช่น
#pragma กำหนดค่า WDT0N = ตั้งค่า
#pragma กำหนดค่า B0DLEVEL = B0DLEVEL_4V3
วัตถุและฟังก์ชันสัมบูรณ์ ตอนนี้วัตถุและฟังก์ชันสามารถวางไว้ที่ที่อยู่ที่ระบุในหน่วยความจำได้โดยใช้ตัวระบุ CCI _at (ที่อยู่) เช่นample: #รวม int foobar at(Ox800100); char at(Ox250) get ID(int offset) { … } อาร์กิวเมนต์สำหรับตัวระบุนี้จะต้องเป็นค่าคงที่ที่แสดงที่อยู่ซึ่งไบต์หรือคำสั่งแรกจะถูกวางไว้ ที่อยู่ RAM จะระบุโดยใช้ค่าออฟเซ็ต 0x800000 เปิดใช้งาน CCI เพื่อใช้ฟีเจอร์นี้
ไวยากรณ์ของฟังก์ชันขัดจังหวะใหม่ ตอนนี้คอมไพเลอร์ยอมรับตัวระบุการขัดจังหวะของ CCI (num) เพื่อระบุว่าฟังก์ชัน C เป็นตัวจัดการการขัดจังหวะ ตัวระบุจะรับหมายเลขการขัดจังหวะ เช่นample: #รวม void interrupt(SPI STC_ vect _num) spi Isr(void) { … }
ปัญหาที่ได้รับการแก้ไข
ต่อไปนี้คือการแก้ไขที่ทำกับคอมไพเลอร์ การแก้ไขเหล่านี้อาจแก้ไขข้อบกพร่องในโค้ดที่สร้างขึ้นหรือเปลี่ยนแปลงการทำงานของคอมไพเลอร์ให้เป็นไปตามที่ตั้งใจหรือระบุไว้ในคู่มือผู้ใช้ หมายเลขเวอร์ชันในหัวข้อย่อยระบุเวอร์ชันคอมไพเลอร์แรกที่มีการแก้ไขสำหรับปัญหาที่ตามมา ป้ายกำกับในวงเล็บในหัวเรื่องคือการระบุปัญหาในฐานข้อมูลการติดตาม ซึ่งอาจมีประโยชน์หากคุณต้องการติดต่อฝ่ายสนับสนุน
โปรดทราบว่าปัญหาเฉพาะอุปกรณ์บางอย่างได้รับการแก้ไขแล้วใน Device Family Pack (DFP) ที่เชื่อมโยงกับอุปกรณ์ โปรดดู MPLAB Pack Manager เพื่อดูข้อมูลเกี่ยวกับการเปลี่ยนแปลงที่เกิดขึ้นกับ DFP และเพื่อดาวน์โหลดแพ็กล่าสุด
เวอร์ชัน 2.40
ผ่อนคลายเกินไป (XCS-2876) เมื่อใช้อ็อพชัน -mrelax คอมไพลเลอร์ไม่ได้จัดสรรบางส่วนร่วมกัน ส่งผลให้ขนาดโค้ดที่เหมาะสมน้อยลง สิ่งนี้อาจเกิดขึ้นกับรหัสที่ใช้ไลบรารี MUSL ใหม่หรือสัญลักษณ์ที่อ่อนแอ
คุณสมบัติการทำแผนที่ไม่ได้ถูกปิดใช้งานตามที่ระบุไว้ในคำเตือน (XCS-2875) ฟีเจอร์ cost-data-in-config mappedprogmem นั้นขึ้นอยู่กับฟีเจอร์ cost-data-in-proem ที่เปิดใช้งานอยู่ หากฟีเจอร์ cost-data-ipconfig- mapped-proem ถูกเปิดใช้งานอย่างชัดเจนโดยใช้ตัวเลือกและฟีเจอร์ cost-data-inprogmem ถูกปิดใช้งาน ขั้นตอนการเชื่อมโยงจะล้มเหลว แม้ว่าจะมีข้อความเตือนแจ้งว่าฟีเจอร์ cons data-in-config-mapped-proem ถูกปิดใช้งานโดยอัตโนมัติ ซึ่งไม่ถูกต้องทั้งหมด ฟีเจอร์ const-data-in-config-mapped-proem ถูกปิดใช้งานอย่างสมบูรณ์ในสถานการณ์นี้แล้ว
การเปลี่ยนแปลง DFP เพื่อเข้าถึง NVMCTRL อย่างถูกต้อง (XCS-2848) รหัสเริ่มต้นรันไทม์ที่ใช้โดยอุปกรณ์ AVR64EA ไม่คำนึงถึงว่ารีจิสเตอร์ NVMCTRL อยู่ภายใต้ Configuration Change Protection (CCP) และไม่สามารถตั้งค่า IO SFR เป็นเพจที่ใช้โดยฟีเจอร์คอมไพเลอร์ const-data-in configmapped-proem ได้ การเปลี่ยนแปลงที่ทำใน AVR-Ex_DFP เวอร์ชัน 2.2.55 จะทำให้รหัสเริ่มต้นรันไทม์เขียนลงในรีจิสเตอร์นี้ได้อย่างถูกต้อง
การเปลี่ยนแปลง DFP เพื่อหลีกเลี่ยงการแมปแฟลช (XCS-2847) มีการนำแนวทางแก้ไขปัญหาเกี่ยวกับฟีเจอร์อุปกรณ์แฟลชแมปปิ้งที่รายงานใน AVR128DA28/32/48/64 Silicon Errata (DS80000882) มาใช้แล้ว ฟีเจอร์คอมไพเลอร์ const-data-in-config-mapped-proem จะไม่ถูกนำไปใช้ตามค่าเริ่มต้นสำหรับอุปกรณ์ที่ได้รับผลกระทบ และการเปลี่ยนแปลงนี้จะปรากฏใน AVR-Ex_DFP เวอร์ชัน 2.2.160
สร้างข้อผิดพลาดด้วย sinhf หรือ coshf (XCS-2834) ความพยายามที่จะใช้ฟังก์ชันไลบรารี sinhf () หรือ coshf () ทำให้เกิดข้อผิดพลาดในการเชื่อมโยง ซึ่งอธิบายถึงการอ้างอิงที่ไม่ได้กำหนด ฟังก์ชันที่ขาดหายไปที่อ้างอิงได้รวมอยู่ในการแจกจ่ายคอมไพเลอร์แล้ว
สร้างข้อผิดพลาดด้วย nopa (XCS-2833) การใช้แอตทริบิวต์ nopa กับฟังก์ชันที่มีการระบุชื่อแอสเซมเบลอร์โดยใช้ as () จะทำให้เกิดข้อความแสดงข้อผิดพลาดจากแอสเซมเบลอร์ ไม่สามารถใช้ร่วมกันได้
ความล้มเหลวของฟังก์ชัน Variadic ที่มีอาร์กิวเมนต์ตัวชี้ (XCS-2755, XCS-2731) ฟังก์ชันที่มีอาร์กิวเมนต์จำนวนตัวแปรคาดหวังให้พอยน์เตอร์ 24 บิต (ชนิด _memo) ถูกส่งผ่านในรายการอาร์กิวเมนต์ตัวแปรเมื่อเปิดใช้งานฟีเจอร์ cost-data-in-proem อาร์กิวเมนต์ที่เป็นตัวชี้ไปยังหน่วยความจำข้อมูลถูกส่งผ่านเป็นอ็อบเจ็กต์ 16 บิต ทำให้โค้ดล้มเหลวเมื่ออ่านในที่สุด เมื่อเปิดใช้งานฟีเจอร์ cons data-in-proem อาร์กิวเมนต์พอยน์เตอร์ 16 บิตทั้งหมดจะถูกแปลงเป็นตัวชี้ 24 บิต ฟังก์ชันไลบรารี strtoxxx ล้มเหลว (XCS-2620) เมื่อเปิดใช้งานฟีเจอร์ const-data-in-proem พารามิเตอร์ enter ในฟังก์ชันไลบรารี strtoxxx ไม่ได้รับการอัปเดตอย่างถูกต้องสำหรับอาร์กิวเมนต์สตริงต้นทางที่ไม่อยู่ในหน่วยความจำโปรแกรม
การแจ้งเตือนสำหรับแคสต์ที่ไม่ถูกต้อง (XCS-2612) ตอนนี้คอมไพเลอร์จะแสดงข้อผิดพลาดหากเปิดใช้งานคุณสมบัติต้นทุนในโครงการและที่อยู่ของสตริงลิเทอรัลถูกแปลงไปยังพื้นที่ที่อยู่ข้อมูลอย่างชัดเจน (โดยละทิ้งตัวระบุค่าคงที่) เช่นample, (uint8 t *) “สวัสดีโลก!” คำเตือนจะถือเป็นปัญหาหากที่อยู่อาจไม่ถูกต้องเมื่อมีการแคสต์ตัวชี้ข้อมูลแบบ const ไปยังพื้นที่ที่อยู่ข้อมูลอย่างชัดเจน
การวางตำแหน่งของวัตถุ const ที่ไม่ได้ถูกกำหนดค่า (XCS-2408) วัตถุ const และ const volatile ที่ไม่ได้กำหนดค่าเริ่มต้นไม่ได้ถูกวางไว้ในหน่วยความจำโปรแกรมบนอุปกรณ์ที่แมปหน่วยความจำโปรแกรมทั้งหมดหรือบางส่วนลงในพื้นที่ที่อยู่ข้อมูล สำหรับอุปกรณ์เหล่านี้ วัตถุดังกล่าวจะถูกวางไว้ในหน่วยความจำโปรแกรม ทำให้การทำงานของวัตถุสอดคล้องกับอุปกรณ์อื่น
เวอร์ชัน 2.39 (รุ่นความปลอดภัยด้านการทำงาน)
ไม่มี.
เวอร์ชัน 2.36
ข้อผิดพลาดเมื่อเกิดการล่าช้า (XCS-2774) การเปลี่ยนแปลงเล็กน้อยในการเพิ่มประสิทธิภาพโหมดฟรีแบบเริ่มต้นทำให้ไม่สามารถพับนิพจน์ตัวดำเนินการไปยังฟังก์ชันในตัวของการหน่วงเวลาได้อย่างต่อเนื่อง ส่งผลให้นิพจน์เหล่านี้ถูกจัดการเป็นการไม่สัมผัสกันและก่อให้เกิดข้อผิดพลาด: _buil tin avr delay_ cycles expects ac ompile time integer constant.
เวอร์ชัน 2.35
การจัดสรรแบบต่อเนื่องโดยใช้ _at (XCS-2653) การจัดสรรวัตถุหลาย ๆ ชิ้นให้ต่อเนื่องกันในส่วนที่มีชื่อเดียวกันและการใช้ at () ไม่ทำงานอย่างถูกต้อง ตัวอย่างเช่นample: constchararrl [ ] at tri butte ((sect on(“.misses”)) at (Ox50 0 ) = {Oxo , Ox CD} ; cost char arr2[ ] at tri butte ((section(“.my s eke”)) = {Oxen, Ox FE }; ควรวาง arr2 ทันทีหลัง aril
การระบุที่อยู่เริ่มต้นของส่วน (XCS-2650) ตัวเลือก -Wal, –section-start ล้มเหลวในการวางส่วนต่างๆ ในตำแหน่งเริ่มต้นที่กำหนดโดยไม่แจ้งให้ทราบ ปัญหานี้ได้รับการแก้ไขสำหรับส่วนต่างๆ ที่มีชื่อกำหนดเองแล้ว อย่างไรก็ตาม ตัวเลือกนี้จะไม่สามารถใช้งานได้กับส่วนมาตรฐานใดๆ เช่น . text หรือ . bss ซึ่งจะต้องวางโดยใช้ตัวเลือก -Wl, -T
ลิงก์เกอร์ขัดข้องเมื่อกำลังพักผ่อน (XCS-2647) เมื่อเปิดใช้งานการเพิ่มประสิทธิภาพ -relax และมีโค้ดหรือส่วนข้อมูลที่ไม่พอดีกับหน่วยความจำที่พร้อมใช้งาน ลิงก์เกอร์จะหยุดทำงาน ในกรณีนี้ ข้อความแสดงข้อผิดพลาดจะปรากฏขึ้นแทน
การเข้าถึง EEPROM ไม่ถูกต้อง (XCS-2629) รูทีนบล็อก leproma _read_ ไม่ทำงานอย่างถูกต้องบนอุปกรณ์ Mega เมื่อเปิดใช้งานตัวเลือก -monist-data-in-proem (ซึ่งเป็นสถานะเริ่มต้น) ส่งผลให้หน่วยความจำ EEPROM ไม่สามารถอ่านได้อย่างถูกต้อง
การจัดสรรหน่วยความจำไม่ถูกต้อง (XCS-2593, XCS-2651) เมื่อเลือกตัวเลือกลิงก์ -Text หรือ -Tata (เช่นampหากระบุ le ที่ส่งผ่านโดยใช้ตัวเลือกไดรเวอร์ -Wl แหล่งที่มาของภูมิภาคข้อความ/ข้อมูลที่สอดคล้องกันจะได้รับการอัปเดต อย่างไรก็ตาม ที่อยู่ปลายทางไม่ได้รับการปรับให้เหมาะสม ซึ่งอาจทำให้ภูมิภาคเกินช่วงหน่วยความจำของอุปกรณ์เป้าหมายได้
รหัสขัดจังหวะ ATtiny ไม่ถูกต้อง (XCS-2465) เมื่อมีการสร้างสำหรับอุปกรณ์ Tatin และปิดการใช้งานการเพิ่มประสิทธิภาพ (-00) ฟังก์ชันการขัดจังหวะอาจทำให้เกิดข้อความแอสเซมเบลอร์ตัวดำเนินการที่อยู่นอกช่วง
ตัวเลือกไม่ได้ถูกส่งผ่าน (XCS-2452) เมื่อใช้ตัวเลือก -Wl กับตัวเลือกตัวเชื่อมหลายตัวที่คั่นด้วยจุลภาค ตัวเลือกตัวเชื่อมจะไม่ถูกส่งผ่านไปยังตัวเชื่อมทั้งหมด
เกิดข้อผิดพลาดในการอ่านหน่วยความจำโปรแกรมโดยอ้อม (XCS-2450) ในบางกรณี คอมไพเลอร์สร้างข้อผิดพลาดภายใน (insn ที่ไม่สามารถจดจำได้) เมื่ออ่านค่าสองไบต์จากตัวชี้ไปยังหน่วยความจำโปรแกรม
เวอร์ชัน 2.32
การเข้าถึงห้องสมุดครั้งที่สองล้มเหลว (XCS-2381) การเรียกใช้ไลบรารีอาร์ไคฟ์ xc8-ar.exe เวอร์ชัน Windows อีกครั้งเพื่อเข้าถึงไลบรารีอาร์ไคฟ์ที่มีอยู่อาจล้มเหลว โดยแสดงข้อความแสดงข้อผิดพลาดว่าไม่สามารถเปลี่ยนชื่อได้
เวอร์ชัน 2.31
ความล้มเหลวของคอมไพเลอร์ที่อธิบายไม่ได้ (XCS-2367) เมื่อทำงานบนแพลตฟอร์ม Windows ที่มีไดเร็กทอรีชั่วคราวของระบบตั้งค่าเป็นเส้นทางที่มีอักขระจุด '.' คอมไพเลอร์อาจดำเนินการล้มเหลว
เวอร์ชัน 2.30
ป้ายกำกับทั่วโลกหายไปหลังจากร่างโครงร่าง (XCS-2299) รหัสแอสเซมบลีที่เขียนด้วยมือซึ่งวางฉลากส่วนกลางไว้ในลำดับแอสเซมบลีที่แยกตัวประกอบโดยขั้นตอนที่เป็นนามธรรมอาจไม่ได้รับการเปลี่ยนตำแหน่งอย่างถูกต้อง
การชนที่ผ่อนคลาย (XCS-2287) การใช้ตัวเลือก -merlad อาจทำให้ตัวเชื่อมหยุดทำงานเมื่อการปรับให้เหมาะสมของการผ่อนคลายการกระโดดท้ายพยายามที่จะลบคำสั่ง ret ที่ไม่อยู่ที่ตอนท้ายของส่วน
เกิดข้อผิดพลาดเมื่อปรับแต่งป้ายกำกับเป็นค่า (XCS-2282) โค้ดที่ใช้ส่วนขยายภาษา GNU C ของ "ป้ายกำกับเป็นค่า" อาจทำให้การปรับให้เหมาะสมตามขั้นตอนที่เป็นนามธรรมขัดข้อง โดยมีข้อผิดพลาดในการแก้ไขช่วง VMA ที่สรุปไว้
ไม่คงที่ (XCS-2271) ต้นแบบสำหรับการเริ่มต้น () และฟังก์ชั่นอื่น ๆ จาก ไม่ระบุตัวระบุต้นทุนที่ไม่เป็นมาตรฐานบนตัวชี้สตริงที่ส่งคืนอีกต่อไปเมื่อปิดใช้งานฟีเจอร์ -monist-data inprogmem โปรดทราบว่าเมื่อใช้อุปกรณ์ avrxmega3 และ avertin ฟีเจอร์นี้จะเปิดใช้งานอย่างถาวร
ตัวเริ่มต้นสูญหาย (XCS-2269) เมื่อมีการวางตัวแปรมากกว่าหนึ่งตัวในหน่วยการแปลในส่วน (โดยใช้ส่วนหรือแอตทริบิวต์ ((section))) และตัวแปรตัวแรกนั้นถูกกำหนดค่าเริ่มต้นเป็นศูนย์หรือไม่มีตัวกำหนดค่าเริ่มต้น ตัวกำหนดค่าเริ่มต้นสำหรับตัวแปรอื่นๆ ในหน่วยการแปลเดียวกันที่วางไว้ในส่วนเดียวกันก็จะสูญหาย
เวอร์ชัน 2.29 (รุ่นความปลอดภัยด้านการทำงาน)
ไม่มี.
เวอร์ชัน 2.20
ข้อผิดพลาดกับคำสั่งยาว (XCS-1983) เมื่อใช้เป้าหมาย AVR คอมไพเลอร์อาจหยุดด้วย file ไม่พบข้อผิดพลาด หากบรรทัดคำสั่งมีขนาดใหญ่มากและมีอักขระพิเศษ เช่น เครื่องหมายอัญประกาศ แบ็กสแลช เป็นต้น
ส่วนโรดาต้าที่ยังไม่ได้กำหนด (XCS-1920) ลิงก์เกอร์ AVR ไม่สามารถกำหนดหน่วยความจำสำหรับส่วน rodata ที่กำหนดเองได้เมื่อสร้างสถาปัตยกรรม avrxmega3 และ avrtiny ซึ่งอาจทำให้เกิดข้อผิดพลาดจากการทับซ้อนของหน่วยความจำ
เวอร์ชัน 2.19 (รุ่นความปลอดภัยด้านการทำงาน)
ไม่มี.
เวอร์ชัน 2.10
ความล้มเหลวในการย้ายถิ่นฐาน (XCS-1891) ตัวจัดสรรที่เหมาะสมที่สุดคือการปล่อยให้มี 'ช่องว่าง' ของหน่วยความจำระหว่างส่วนต่างๆ หลังจากการผ่อนคลายของตัวเชื่อมโยง นอกเหนือจากการแยกส่วนหน่วยความจำแล้ว ยังเพิ่มความเป็นไปได้ที่จะเกิดความล้มเหลวในการย้ายตัวเชื่อมโยงที่เกี่ยวข้องกับการกระโดดหรือการเรียกที่สัมพันธ์กับพีซีที่อยู่นอกช่วง
คำแนะนำไม่ถูกเปลี่ยนแปลงโดยการผ่อนคลาย (XCS-1889) การคลายตัวของลิงก์เกอร์ไม่ได้เกิดขึ้นสำหรับคำสั่งการกระโดดหรือการเรียกซึ่งเป้าหมายจะสามารถเข้าถึงได้หากคลายตัว
หายไป ฟังก์ชันการทำงาน (XCSE-388) คำจำกัดความหลาย ๆ คำจาก เช่น clock_ div_ t และ clock_prescale_set () ไม่ได้ถูกกำหนดไว้สำหรับอุปกรณ์ รวมถึง ATmega324PB, ATmega328PB, ATtiny441 และ ATtiny841
ไม่มีมาโคร พรีโปรเซสเซอร์แมโคร xcs _MODE_, _xcs VERSION, _xc และ xcs ไม่ได้ถูกกำหนดโดยคอมไพเลอร์โดยอัตโนมัติ สิ่งเหล่านี้พร้อมใช้งานแล้ว
เวอร์ชัน 2.05
ข้อผิดพลาดของคอมไพเลอร์ภายใน (XCS-1822) เมื่อสร้างภายใต้ Windows อาจมีข้อผิดพลาดคอมไพเลอร์ภายในเกิดขึ้นเมื่อทำการเพิ่มประสิทธิภาพโค้ด
ไม่ตรวจพบการล้นของ RAM (XCS-1800, XCS-1796) โปรแกรมที่เกิน RAM ที่มีอยู่จะไม่ถูกตรวจพบโดยคอมไพเลอร์ในบางสถานการณ์ ส่งผลให้เกิดความล้มเหลวของโค้ดรันไทม์
ละเว้นหน่วยความจำแฟลช (XCS-1792) สำหรับอุปกรณ์ avrxmega3 และ avrtiny ส่วนหนึ่งของหน่วยความจำแฟลชอาจถูกทิ้งไว้โดยไม่ได้เขียนโปรแกรมโดย MPLAB X IDE
ไม่สามารถดำเนินการหลักได้ (XCS-1788) ในบางสถานการณ์ที่โปรแกรมไม่มีตัวแปรทั่วโลกที่กำหนดไว้ โค้ดการเริ่มต้นรันไทม์จะไม่ออก และฟังก์ชัน main () จะไม่ถูกเข้าถึงเลย
ข้อมูลหน่วยความจำไม่ถูกต้อง (XCS-1787) สำหรับอุปกรณ์ avrxmega3 และ avrtiny โปรแกรมขนาด avr รายงานว่าข้อมูลแบบอ่านอย่างเดียวใช้ RAM แทนหน่วยความจำของโปรแกรม
การอ่านหน่วยความจำโปรแกรมไม่ถูกต้อง (XCS-1783) โครงการที่คอมไพล์สำหรับอุปกรณ์ที่มีหน่วยความจำโปรแกรมที่แมปในพื้นที่ที่อยู่ข้อมูล และที่กำหนดวัตถุโดยใช้มาโคร/แอตทริบิวต์ PROGMEM อาจอ่านวัตถุเหล่านี้จากที่อยู่ที่ไม่ถูกต้อง
ข้อผิดพลาดภายในกับแอตทริบิวต์ (XCS-1773) เกิดข้อผิดพลาดภายในหากคุณกำหนดวัตถุตัวชี้ด้วย
โทเค็น _at () หรือแอตทริบิวต์ () ที่อยู่ระหว่างชื่อพอยน์เตอร์และประเภทที่อ้างอิง เช่นample, ถ่าน *
_at ( 0x80015 0) cp; ขณะนี้จะมีการแจ้งเตือนหากพบรหัสดังกล่าว
ไม่สามารถดำเนินการคำสั่งหลักได้ (XCS-1780, XCS-1767, XCS-1754) การใช้ตัวแปร EEPROM หรือการกำหนดฟิวส์โดยใช้ config pragma อาจทำให้มีการเริ่มต้นข้อมูลไม่ถูกต้องและ/หรือการทำงานของโปรแกรมล็อกอยู่ในโค้ดการเริ่มต้นรันไทม์ ก่อนที่จะไปถึง main ()
ข้อผิดพลาดของฟิวส์กับอุปกรณ์ขนาดเล็ก (XCS-1778, XCS-1742) อุปกรณ์ Attiny4/5/9/10/20/40 มีความยาวฟิวส์ที่ไม่ถูกต้องที่ระบุไว้ในส่วนหัว fileที่นำไปสู่ข้อผิดพลาดของตัวเชื่อมโยงเมื่อพยายามสร้างรหัสที่กำหนดฟิวส์
ความผิดพลาดในการแบ่งส่วน (XCS-1777) ข้อผิดพลาดการแบ่งส่วนแบบไม่ต่อเนื่องได้รับการแก้ไขแล้ว
โปรแกรมประกอบขัดข้อง (XCS-1761) แอสเซมเบลอร์ avr-as อาจขัดข้องเมื่อคอมไพเลอร์ทำงานภายใต้ Ubuntu 18
วัตถุไม่ได้รับการเคลียร์ (XCS-1752) อ็อบเจ็กต์ระยะเวลาการจัดเก็บแบบคงที่ที่ไม่ได้เตรียมใช้งานอาจไม่ถูกล้างโดยรหัสเริ่มต้นรันไทม์
ไม่สนใจข้อกำหนดอุปกรณ์ที่ขัดแย้งกัน (XCS-1749) คอมไพเลอร์ไม่ได้สร้างข้อผิดพลาดเมื่อมีการใช้ตัวเลือกข้อมูลจำเพาะของอุปกรณ์หลายตัวและระบุอุปกรณ์ที่แตกต่างกัน
ความเสียหายของหน่วยความจำโดยฮีป (XCS-1748) สัญลักษณ์ heap_ start ถูกตั้งค่าไม่ถูกต้อง ส่งผลให้ตัวแปรธรรมดามีโอกาสเสียหายได้จากฮีป
ข้อผิดพลาดในการย้ายลิงก์เกอร์ (XCS-1739) ข้อผิดพลาดในการย้ายตำแหน่งของลิงเกอร์อาจเกิดขึ้นเมื่อโค้ดมี rjmp หรือ rcall ที่มีเป้าหมายอยู่ห่างออกไป 4k ไบต์พอดี
เวอร์ชัน 2.00
ไม่มี.
ปัญหาที่ทราบ
ข้อจำกัดในการทำงานของคอมไพเลอร์ อาจเป็นข้อจำกัดในการเขียนโค้ดทั่วไป หรือ
การเบี่ยงเบนจากข้อมูลที่มีอยู่ในคู่มือผู้ใช้ ป้ายกำกับในวงเล็บในหัวเรื่องคือการระบุปัญหาในฐานข้อมูลการติดตาม ซึ่งอาจเป็นประโยชน์หากคุณต้องการติดต่อฝ่ายสนับสนุน รายการที่ไม่มีป้ายกำกับเป็นข้อจำกัดที่อธิบายโหมดการทำงานและมีแนวโน้มที่จะยังคงมีผลบังคับใช้ถาวร
การบูรณาการ MPLAB X IDE
การรวม MPLAB IDE หากจะใช้คอมไพเลอร์จาก MPLAB IDE คุณจะต้องติดตั้ง MPLAB IDE ก่อนที่จะติดตั้งคอมไพเลอร์
การสร้างรหัส
ความล้มเหลวในการจัดสรรหน่วยความจำ PA (XCS-2881) เมื่อใช้ตัวเพิ่มประสิทธิภาพขั้นตอนนามธรรม ลิงเกอร์อาจรายงานข้อผิดพลาดในการจัดสรรหน่วยความจำเมื่อขนาดรหัสใกล้เคียงกับจำนวนหน่วยความจำของโปรแกรมที่มีอยู่บนอุปกรณ์ แม้ว่าโปรแกรมควรจะพอดีกับพื้นที่ที่มีอยู่ก็ตาม
Smart-IO ที่ไม่ฉลาดนัก (XCS-2872) คุณสมบัติ smart-io ของคอมไพเลอร์จะสร้างรหัสที่ถูกต้องแต่ไม่เหมาะสมสำหรับฟังก์ชัน sprint หากคุณสมบัติ coast-data-in-proem ถูกปิดใช้งานหรือหากอุปกรณ์มีการแมปแฟลชทั้งหมดลงในหน่วยความจำข้อมูล
Smart-IO ที่ฉลาดน้อยกว่า (XCS-2869) คุณสมบัติ smart-io ของคอมไพเลอร์จะสร้างโค้ดที่ถูกต้องแต่ไม่เหมาะสมเมื่อใช้ตัวเลือก -floe และ -fno-buil tin ทั้งคู่
การวางตำแหน่งข้อมูลแบบอ่านอย่างเดียวที่ไม่เหมาะสม (XCS-2849) ปัจจุบัน ลิงก์เกอร์ไม่ทราบถึงส่วนหน่วยความจำ APPCODE และ APPDATA หรือการแบ่ง [No-]Read-While-Write ในแผนที่หน่วยความจำ ดังนั้น จึงมีโอกาสเล็กน้อยที่ลิงก์เกอร์อาจจัดสรรข้อมูลแบบอ่านอย่างเดียวในพื้นที่หน่วยความจำที่ไม่เหมาะสม โอกาสที่ข้อมูลจะสูญหายจะเพิ่มขึ้นหากเปิดใช้งานฟีเจอร์ coast-data-in-pragma โดยเฉพาะอย่างยิ่งหากเปิดใช้งานฟีเจอร์ coast-data-in-config-mapped-proem ด้วย สามารถปิดใช้งานฟีเจอร์เหล่านี้ได้หากจำเป็น
วัตถุ file การประมวลผลคำสั่งซื้อ (XCS-2863) ลำดับที่วัตถุ files จะถูกประมวลผลโดยตัวเชื่อมโยงอาจแตกต่างกันไปตามการใช้การปรับให้เหมาะสมขั้นตอนที่เป็นนามธรรม (ตัวเลือก -mpa) สิ่งนี้จะมีผลเฉพาะโค้ดที่กำหนดฟังก์ชันที่อ่อนแอในหลายโมดูล
ข้อผิดพลาดของตัวเชื่อมโยงที่มีค่าสัมบูรณ์ (XCS-2777) เมื่ออ็อบเจ็กต์ถูกทำให้สมบูรณ์ที่แอดเดรสที่จุดเริ่มต้นของ RAM และอ็อบเจ็กต์ที่ไม่ได้เตรียมใช้งานยังได้รับการกำหนด ข้อผิดพลาดของลิงเกอร์อาจถูกทริกเกอร์
รหัสปลุกสั้น (XCS-2775) สำหรับอุปกรณ์ ATA5700/2 รีจิสเตอร์ PHID0/1 จะถูกกำหนดให้มีความกว้างเพียง 16 บิตเท่านั้น ไม่ใช่ 32 บิต
ตัวเชื่อมโยงขัดข้องเมื่อเรียกสัญลักษณ์ (XCS-2758) ลิงก์เกอร์อาจเกิดข้อผิดพลาดหากใช้ตัวเลือกไดรเวอร์ -merlad เมื่อโค้ดต้นฉบับเรียกสัญลักษณ์ที่ถูกกำหนดโดยใช้ตัวเลือกลิงก์เกอร์ -Wl, –defsym
การเริ่มต้นไม่ถูกต้อง (XCS-2679) มีข้อขัดแย้งระหว่างตำแหน่งที่ค่าเริ่มต้นสำหรับวัตถุขนาดไบต์แบบสากล/คงที่บางตัวถูกวางไว้ในหน่วยความจำข้อมูลและตำแหน่งที่เข้าถึงตัวแปรในระหว่างการรันไทม์
เริ่มต้นไม่ถูกต้องตั้งค่าว่าง (XCS-2652) ในกรณีที่สตริงหัวเรื่องสำหรับการแปลงโดยระบุ () มีสิ่งที่ดูเหมือนเป็นตัวเลขทศนิยมลอยตัวในรูปแบบเลขยกกำลัง และมีอักขระที่ไม่คาดคิดหลังอักขระ e ที่อยู่ว่าง หากมีให้ จะชี้ไปที่อักขระหลัง e และไม่ใช่ e เอง ตัวอย่างเช่นample: ระบุว่า (“hooey”, ว่างเปล่า); จะทำให้ได้ผลลัพธ์เป็นว่างเปล่าโดยชี้ไปที่อักขระ x
การเรียกใช้ฟังก์ชันทางอ้อมที่ไม่ดี (XCS-2628) ในบางกรณี การเรียกใช้ฟังก์ชันที่ทำผ่านตัวชี้ฟังก์ชันที่เก็บไว้เป็นส่วนหนึ่งของโครงสร้างอาจล้มเหลว
strtof คืนค่าศูนย์สำหรับเลขฐานสิบหก (XCS-2626) ฟังก์ชันไลบรารี strtof () et al และ scanf () et al จะแปลงเลขฐานสิบหกที่มีจุดลอยตัวที่ไม่ระบุเลขยกกำลังให้เป็นเลขฐานสิบเสมอ
ศูนย์ เช่นample: stator(“Owl”, &empty); จะส่งคืนค่า 0 ไม่ใช่ 1
ข้อความที่ปรึกษาสแต็กไม่ถูกต้อง (XCS-2542, XCS-2541) ในบางกรณี คำเตือนของที่ปรึกษาสแต็กเกี่ยวกับการเรียกซ้ำหรือสแต็กที่ไม่แน่นอนที่ใช้ (อาจผ่านการใช้ alloca()) จะไม่ถูกปล่อยออกมา
ความล้มเหลวจากรหัสขัดจังหวะซ้ำ (XCS-2421) ในกรณีที่ฟังก์ชันอินเตอร์รัปต์มากกว่าหนึ่งฟังก์ชันมีเนื้อความเดียวกัน คอมไพลเลอร์อาจมีเอาต์พุตสำหรับฟังก์ชันอินเตอร์รัปต์หนึ่งเรียกอีกฟังก์ชันหนึ่ง การดำเนินการนี้จะส่งผลให้มีการบันทึกการลงทะเบียนการโทรที่ถูกบล็อกโดยไม่จำเป็น และการขัดจังหวะจะถูกเปิดใช้งานก่อนที่บทส่งท้ายของตัวจัดการการขัดจังหวะปัจจุบันจะทำงาน ซึ่งอาจนำไปสู่ความล้มเหลวของรหัส
วัตถุ Const ไม่อยู่ในหน่วยความจำโปรแกรม (XCS-2408) สำหรับโปรเจ็กต์ avrxmega3 และ avertins วัตถุ const ที่ไม่ได้ถูกทำให้เหมาะสมจะถูกวางไว้ในหน่วยความจำข้อมูล แม้ว่าจะมีคำเตือนที่บ่งบอกว่าวัตถุเหล่านั้นถูกวางไว้ในหน่วยความจำโปรแกรมก็ตาม การดำเนินการนี้จะไม่ส่งผลต่ออุปกรณ์ที่ไม่มีหน่วยความจำโปรแกรมที่แมปไว้ในพื้นที่หน่วยความจำข้อมูล และจะไม่ส่งผลต่อวัตถุใดๆ ที่ถูกเริ่มต้น
เอาท์พุตไม่ดีเนื่องจากเส้นทาง DFP ไม่ถูกต้อง (XCS-2376) หากเรียกใช้คอมไพเลอร์ด้วยเส้นทาง DFP และ 'ข้อมูลจำเพาะ' ที่ไม่ถูกต้อง file มีอยู่สำหรับอุปกรณ์ที่เลือก คอมไพลเลอร์ไม่ได้รายงานชุดอุปกรณ์ตระกูลที่ขาดหายไป และเลือก 'ข้อมูลจำเพาะ' แทน fileซึ่งอาจนำไปสู่ผลลัพธ์ที่ไม่ถูกต้อง 'ข้อมูลจำเพาะ' files อาจไม่ทันสมัยกับ DFP แบบกระจาย และมีไว้สำหรับใช้กับการทดสอบคอมไพเลอร์ภายในเท่านั้น
หน่วยความจำทับซ้อนกันโดยไม่ตรวจพบ (XCS-1966) คอมไพเลอร์ไม่ตรวจจับการทับซ้อนของหน่วยความจำของวัตถุที่ถูกสร้างขึ้นแบบสมบูรณ์ที่อยู่ (ผ่าน at ()) และวัตถุอื่นที่ใช้ตัวระบุส่วน () และที่เชื่อมโยงกับที่อยู่เดียวกัน
ความล้มเหลวกับฟังก์ชันไลบรารีและ _meme (XCS-1763) การเรียกใช้ฟังก์ชัน limbic float ด้วยอาร์กิวเมนต์ในพื้นที่ที่อยู่ _memo อาจล้มเหลว โปรดทราบว่ารูทีนไลบรารีถูกเรียกใช้จากตัวดำเนินการ C บางตัว ดังนั้น ตัวอย่างเช่นampเลอ, รหัสต่อไปนี้ได้รับผลกระทบ: return regFloatVar > memxFloatVar;
การใช้งานระบบลิมบิกที่จำกัด (AVRTC-731) สำหรับผลิตภัณฑ์ ATTiny4/5/9/10/20/40 การใช้งานไลบรารี C/Math มาตรฐานในภาษาลิมบิกยังมีจำกัดมากหรือไม่มีเลย
ข้อจำกัดของหน่วยความจำโปรแกรม (AVRTC-732) เครื่องมือรองรับภาพหน่วยความจำของโปรแกรมที่มีขนาดเกิน 128 กิโลไบต์ อย่างไรก็ตาม มีกรณีที่ทราบแล้วของการยกเลิกลิงก์เกอร์โดยไม่มีการผ่อนปรนและไม่มีข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์ แทนที่จะสร้างฟังก์ชันสตับที่จำเป็นเมื่อใช้ตัวเลือก -relax
ข้อจำกัดของเนมสเปซ (AVRTC-733) ช่องว่างที่อยู่ที่มีชื่อได้รับการสนับสนุนโดย toolchain ภายใต้ข้อจำกัดที่กล่าวถึงในส่วนคู่มือผู้ใช้ Special Type Qualifiers
เขตเวลา การ ฟังก์ชันไลบรารีจะถือว่าใช้ GMT และไม่รองรับโซนเวลาท้องถิ่น ดังนั้นเวลาท้องถิ่น () จะคืนค่าเวลาเดียวกับ gummite () เช่นampเล.
การสนับสนุนลูกค้า
file///แอปพลิเคชั่น/microehip/xc8/v 2 .40/docs/อ่านฉัน_X C 8_ สำหรับ A VR. htm
เอกสาร / แหล่งข้อมูล
![]() |
MICROCHIP MPLAB XC8 C ซอฟต์แวร์คอมไพเลอร์ [พีดีเอฟ] คู่มือเจ้าของ MPLAB XC8 C, ซอฟต์แวร์คอมไพเลอร์ MPLAB XC8 C, ซอฟต์แวร์คอมไพเลอร์, ซอฟต์แวร์ |