MPLAB® XC8 C คอมไพเลอร์เวอร์ชัน 2.41 บันทึกประจำรุ่นสำหรับ AVR® MCU
คู่มือของเจ้าของ
ซอฟต์แวร์พัฒนาคอมไพเลอร์ MPLAB XC8 C
เอกสารนี้ประกอบด้วยข้อมูลสำคัญที่เกี่ยวข้องกับคอมไพเลอร์ MPLAB XC8 C เมื่อกำหนดเป้าหมายอุปกรณ์ AVR MICROCHIP
โปรดอ่านก่อนที่จะเรียกใช้ซอฟต์แวร์นี้ ดูหมายเหตุการเผยแพร่คอมไพเลอร์ MPLAB XC8 C สำหรับเอกสาร PIC หากคุณกำลังใช้คอมไพเลอร์สำหรับอุปกรณ์ PIC 8 บิต
เกินview
1.1. บทนำ
คอมไพเลอร์ MPLAB® XC8 C ของ Microchip รุ่นนี้มีฟีเจอร์ใหม่และการแก้ไขข้อบกพร่องหลายอย่าง
1.2. วันที่สร้าง
วันที่สร้างอย่างเป็นทางการของเวอร์ชันคอมไพเลอร์นี้คือ 8 กุมภาพันธ์ 2023
1.3. รุ่นก่อนหน้า
เวอร์ชันคอมไพเลอร์ MPLAB XC8 C ก่อนหน้านี้คือ 2.40 ที่สร้างขึ้นเมื่อวันที่ 3 กรกฎาคม 2022
1.4. คู่มือความปลอดภัยในการทำงาน
คู่มือความปลอดภัยในการทำงานสำหรับคอมไพเลอร์ MPLAB XC มีอยู่ในแพ็คเกจเอกสารเมื่อคุณซื้อใบอนุญาตความปลอดภัยในการทำงาน
1.5. สิทธิ์การใช้งานคอมโพเนนต์และเวอร์ชัน
เครื่องมือ MPLAB XC8 C Compiler สำหรับ AVR MCUs ถูกเขียนและเผยแพร่ภายใต้ GNU General Public License (GPL) ซึ่งหมายความว่าซอร์สโค้ดนั้นเผยแพร่อย่างเสรีและเผยแพร่สู่สาธารณะ
ซอร์สโค้ดสำหรับเครื่องมือภายใต้ GNU GPL อาจดาวน์โหลดแยกต่างหากจากของไมโครชิป webเว็บไซต์. คุณสามารถอ่าน GNU GPL ในไฟล์ชื่อที่อยู่ในไดเร็กทอรีย่อยของไดเร็กทอรี install license.txt avr/doc ของคุณ การอภิปรายทั่วไปของหลักการภายใต้ GPL อาจพบได้ที่นี่
รหัสสนับสนุนที่มีให้สำหรับไฟล์ส่วนหัว สคริปต์ตัวเชื่อมโยง และไลบรารีรันไทม์เป็นรหัสกรรมสิทธิ์และไม่ครอบคลุมภายใต้ GPL
คอมไพเลอร์นี้เป็นการใช้งาน GCC เวอร์ชัน 5.4.0, binutils เวอร์ชัน 2.26 และใช้ avr-libc เวอร์ชัน 2.0.0
1.6. ข้อกำหนดของระบบ
คอมไพเลอร์ MPLAB XC8 C และซอฟต์แวร์ลิขสิทธิ์ที่ใช้มีให้สำหรับระบบปฏิบัติการที่หลากหลาย รวมถึงเวอร์ชัน 64 บิตต่อไปนี้: Microsoft® Windows® 10 รุ่น Professional; อูบุนตู® 18.04; และ macOS® 10.15.5 ไบนารีสำหรับ Windows ได้รับการลงนามรหัส ไบนารีสำหรับ macOS ได้รับการเซ็นโค้ดและรับรองแล้ว MPLAB XC Network License Server พร้อมใช้งานสำหรับระบบปฏิบัติการ 64 บิตที่หลากหลาย รวมถึง Microsoft Windows 10 ขึ้นไป; Ubuntu 18.04 ขึ้นไป; หรือ macOS 10.15 ขึ้นไป เซิร์ฟเวอร์ยังอาจทำงานบนระบบปฏิบัติการอื่น ๆ รวมถึง Windows Server, Linux ดิสทริบิวชัน เช่น Oracle® Enterprise Linux® และ Red Hate Enterprise Linux ตลอดจนระบบปฏิบัติการที่รองรับเวอร์ชันเก่ากว่า อย่างไรก็ตาม MPLAB XC Network License Server ไม่ได้รับการทดสอบบนระบบปฏิบัติการเหล่านี้ เซิร์ฟเวอร์ใบอนุญาตเครือข่าย MPLAB XC สามารถเรียกใช้บนเครื่องเสมือนของระบบปฏิบัติการที่รองรับโดยใช้ใบอนุญาตเครื่องเสมือนสำหรับใบอนุญาตเครือข่าย (SW006021-VM) MPLAB XC Network Server รุ่น 32 บิตทั้งหมดจะถูกยกเลิกตั้งแต่รุ่น 3.00
อุปกรณ์ที่สนับสนุน
คอมไพเลอร์นี้รองรับอุปกรณ์ AVR MCU 8 บิตที่มีอยู่ทั้งหมด ณ เวลาที่วางจำหน่าย ดู (ในไดเร็กทอรีของคอมไพเลอร์) สำหรับรายการอุปกรณ์ที่รองรับทั้งหมด ไฟล์เหล่านี้ยังแสดงรายการ
avr_chipinfo.html การตั้งค่าบิตการกำหนดค่าเอกสารสำหรับแต่ละอุปกรณ์
1.7. รุ่นและการอัปเกรดใบอนุญาต
คอมไพเลอร์ MPLAB XC8 สามารถเปิดใช้งานเป็นผลิตภัณฑ์ที่ได้รับใบอนุญาต (PRO) หรือไม่มีใบอนุญาต (ฟรี) คุณต้องซื้อรหัสเปิดใช้งานเพื่อให้สิทธิ์คอมไพเลอร์ของคุณ ใบอนุญาตอนุญาตให้มีการเพิ่มประสิทธิภาพในระดับที่สูงขึ้นเมื่อเทียบกับผลิตภัณฑ์ฟรี คอมไพเลอร์ที่ไม่มีใบอนุญาตสามารถทำงานได้อย่างไม่มีกำหนดโดยไม่ต้องมีใบอนุญาต ต้องเปิดใช้งานคอมไพเลอร์ MPLAB XC8 Functional Safety ด้วยใบอนุญาตความปลอดภัยการทำงานที่ซื้อจากไมโครชิป คอมไพเลอร์จะไม่ทำงานหากไม่มีใบอนุญาตนี้ เมื่อเปิดใช้งานแล้ว คุณสามารถเลือกระดับการปรับให้เหมาะสมใดก็ได้และใช้คุณสมบัติคอมไพเลอร์ทั้งหมด MPLAB XC Functional Safety Compiler รุ่นนี้รองรับใบอนุญาตเซิร์ฟเวอร์เครือข่าย
ดูเอกสารการติดตั้งและการให้สิทธิ์การใช้งานคอมไพเลอร์ MPLAB XC C (DS50002059) สำหรับข้อมูลเกี่ยวกับประเภทใบอนุญาตและการติดตั้งคอมไพเลอร์พร้อมใบอนุญาต
1.8. การติดตั้งและการเปิดใช้งาน
ดูเพิ่มเติมที่ส่วนปัญหาการย้ายข้อมูลและข้อจำกัดสำหรับข้อมูลสำคัญเกี่ยวกับตัวจัดการใบอนุญาตล่าสุดที่รวมอยู่ในคอมไพเลอร์นี้
หากใช้ MPLAB IDE ต้องแน่ใจว่าได้ติดตั้ง MPLAB X IDE เวอร์ชันล่าสุด 5.0 หรือใหม่กว่าก่อนที่จะติดตั้งเครื่องมือนี้ ออกจาก IDE ก่อนติดตั้งคอมไพเลอร์ เรียกใช้โปรแกรมติดตั้งคอมไพเลอร์ (Windows), (Linux) หรือ (macOS) .exe .run .app เช่น และทำตามคำแนะนำบนหน้าจอ XC8-1.00.11403-windows.exe แนะนำให้ใช้ไดเร็กทอรีการติดตั้งเริ่มต้น หากคุณใช้ Linux คุณต้องติดตั้งคอมไพเลอร์โดยใช้เทอร์มินัลและจากบัญชีรูท ติดตั้งโดยใช้บัญชี macOS ที่มีสิทธิ์ของผู้ดูแลระบบ
ขณะนี้การเปิดใช้งานดำเนินการแยกกันกับการติดตั้ง ดูเอกสาร License Manager for MPLAB® XC C Compilers (DS52059) สำหรับข้อมูลเพิ่มเติม
หากคุณเลือกที่จะเรียกใช้คอมไพเลอร์ภายใต้ใบอนุญาตการประเมิน ตอนนี้คุณจะได้รับคำเตือนระหว่างการรวบรวมเมื่อคุณอยู่ภายใน 14 วันนับจากสิ้นสุดระยะเวลาการประเมินของคุณ คำเตือนเดียวกันนี้จะเกิดขึ้นหากคุณอยู่ภายใน 14 วันนับจากวันที่การสมัคร HPA ของคุณสิ้นสุดลง
XC Network License Server เป็นตัวติดตั้งแยกต่างหากและไม่ได้รวมอยู่ในตัวติดตั้งคอมไพเลอร์แบบผู้ใช้รายเดียว
ขณะนี้ XC License Manager รองรับการโรมมิ่งของใบอนุญาตเครือข่ายลอย คุณลักษณะนี้มุ่งเป้าไปที่ผู้ใช้มือถือ อนุญาตให้ใบอนุญาตแบบลอยตัวสามารถออกจากเครือข่ายได้ในช่วงเวลาสั้นๆ เมื่อใช้คุณลักษณะนี้ คุณสามารถตัดการเชื่อมต่อจากเครือข่ายและยังคงใช้คอมไพเลอร์ MPLAB XC ของคุณได้ ดูโฟลเดอร์เอกสารของการติดตั้ง XCLM สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคุณลักษณะนี้
MPLAB X IDE มีหน้าต่างใบอนุญาต (เครื่องมือ > ใบอนุญาต) เพื่อจัดการการโรมมิ่งด้วยภาพ
1.8.1. การแก้ไขปัญหาการติดตั้ง
หากคุณประสบปัญหาในการติดตั้งคอมไพเลอร์ภายใต้ระบบปฏิบัติการ Windows ใดๆ ให้ลองทำตามคำแนะนำต่อไปนี้
เรียกใช้การติดตั้งในฐานะผู้ดูแลระบบ
ตั้งค่าการอนุญาตของแอปพลิเคชันตัวติดตั้งเป็น 'ควบคุมทั้งหมด' (คลิกขวาที่ไฟล์ เลือก Properties แท็บ Security เลือกผู้ใช้ แก้ไข)
ตั้งค่าสิทธิ์ของโฟลเดอร์ temp เป็น 'Full Control'
ในการระบุตำแหน่งของโฟลเดอร์ temp ให้พิมพ์ %temp% ลงในคำสั่ง Run (แป้นโลโก้ Windows + R)
ซึ่งจะเป็นการเปิดกล่องโต้ตอบ file explorer ที่แสดงไดเร็กทอรีนั้น และจะอนุญาตให้คุณกำหนดพาธของโฟลเดอร์นั้น
1.9. เอกสารประกอบคอมไพเลอร์
คู่มือผู้ใช้ของคอมไพเลอร์สามารถเปิดได้จากหน้า HTML ที่เปิดขึ้นในเบราว์เซอร์ของคุณเมื่อคลิกปุ่มความช่วยเหลือสีน้ำเงินในแดชบอร์ด MPLAB X IDE ตามที่ระบุไว้ในภาพหน้าจอ
หากคุณกำลังสร้างสำหรับเป้าหมาย AVR 8 บิต คู่มือผู้ใช้คอมไพเลอร์ MPLAB® XC8 C สำหรับ AVR® MCU จะมีข้อมูลเกี่ยวกับตัวเลือกคอมไพเลอร์และคุณสมบัติที่ใช้กับสถาปัตยกรรมนี้
1.10.ฝ่ายสนับสนุนลูกค้า
ไมโครชิปยินดีรับรายงานข้อบกพร่อง ข้อเสนอแนะ หรือความคิดเห็นเกี่ยวกับเวอร์ชันคอมไพเลอร์นี้ โปรดส่งรายงานข้อบกพร่องหรือคำขอคุณสมบัติผ่านระบบสนับสนุน
การปรับปรุงเอกสาร
สำหรับเอกสาร MPLAB XC8 เวอร์ชันออนไลน์และล่าสุด โปรดไปที่เอกสารทางเทคนิคออนไลน์ของไมโครชิป webเว็บไซต์. เอกสาร AVR ใหม่หรือที่อัปเดตในรุ่นนี้:
- คู่มือผู้ใช้ MPLAB® XC8 C Compiler สำหรับ AVR® MCU (แก้ไข G)
- AVR® GNU Toolchain ไปยัง MPLAB® XC8 Migration Guide (แก้ไข A)
- คู่มือผู้ใช้ Hexmate (แก้ไข B)
คู่มือการย้าย AVR® GNU Toolchain ไปยัง MPLAB® XC8 อธิบายถึงการเปลี่ยนแปลงซอร์สโค้ดและตัวเลือกการสร้างที่อาจจำเป็นหากคุณตัดสินใจย้ายโปรเจ็กต์ที่ใช้ C จาก AVR 8-bit GNU Toolchain ไปยัง Microchip MPLAB XC8 C Compiler คู่มืออ้างอิง Microchip Unified Standard Library อธิบายลักษณะการทำงานและการเชื่อมต่อกับฟังก์ชันที่กำหนดโดย Microchip Unified Standard Library ตลอดจนวัตถุประสงค์การใช้งานประเภทและมาโครของไลบรารี ข้อมูลบางส่วนนี้เคยอยู่ในคู่มือผู้ใช้ MPLAB® XC8 C Compiler สำหรับ AVR® MCU ข้อมูลไลบรารีเฉพาะอุปกรณ์ยังคงมีอยู่ในคู่มือคอมไพเลอร์นี้
หากคุณเพิ่งเริ่มต้นใช้งานอุปกรณ์ 8 บิตและ MPLAB XC8 C Compiler คู่มือผู้ใช้ MPLAB® XC8 สำหรับ Embedded Engineers – AVR® MCU (DS50003108) จะมีข้อมูลเกี่ยวกับการตั้งค่าโปรเจ็กต์ใน MPLAB X IDE และการเขียนโค้ดสำหรับคุณ โครงการ MPLAB XC8 C โครงการแรก ขณะนี้คู่มือนี้แจกจ่ายให้กับคอมไพเลอร์แล้ว
คู่มือผู้ใช้ Hexmate มีไว้สำหรับผู้ที่ใช้งาน Hexmate เป็นแอปพลิเคชันแบบสแตนด์อโลน
มีอะไรใหม่
ต่อไปนี้เป็นคุณลักษณะใหม่ของ AVR-target ที่ตอนนี้คอมไพเลอร์รองรับ หมายเลขเวอร์ชันในหัวข้อย่อยระบุเวอร์ชันคอมไพเลอร์แรกที่รองรับคุณสมบัติที่ตามมา
3.1. เวอร์ชัน 2.41
การสนับสนุน Bootrow (XC8-3053) คอมไพลเลอร์จะวางเนื้อหาของส่วนใดๆ ที่มีคำนำหน้า at.bootrow ที่อยู่ 0x860000 ในไฟล์ HEX ส่วนเหล่านี้ใช้สำหรับหน่วยความจำ BOOTROW ซึ่งออกแบบมาสำหรับจัดเก็บคีย์และข้อมูลที่ปลอดภัยอื่นๆ ที่ bootloader ควรเข้าถึงได้เท่านั้น
การกำจัดการส่งคืนซ้ำซ้อน (XC8-3048) ตอนนี้คอมไพเลอร์จะกำจัดคำสั่งซ้ำซ้อนในฟังก์ชัน ret ด้วยการข้ามหางเมื่อใช้สคริปต์ตัวเชื่อมโยงที่กำหนดเอง นี่เป็นการปรับให้เหมาะสมที่คล้ายกันกับที่ดำเนินการก่อนหน้านี้ แต่ตอนนี้ดำเนินการกับส่วนที่ไม่ได้ใช้งานทั้งหมด แม้ว่าจะใช้สคริปต์ตัวเชื่อมโยงที่กำหนดเองและรูปแบบการจัดสรรที่เหมาะสมที่สุดไม่ได้อยู่ในการเล่น การเปลี่ยนแปลงประเภทเวลา (XC8-2982, 2932) ประเภทไลบรารีมาตรฐาน C99 ถูกเปลี่ยนจาก time_t เป็นประเภท ซึ่งให้การปรับปรุงขนาดโค้ดในฟังก์ชัน long long ที่เกี่ยวข้องกับเวลา เช่น mktime ยาวที่ไม่ได้ลงชื่อ ()
New nop (XC8-2946, 2945) เพิ่มมาโครแล้ว มาโครนี้แทรก no- NOP() คำสั่งการใช้งาน nop ลงในเอาต์พุต
อัปเดตเป็น XCLM (XC8-2944) ตัวจัดการสิทธิ์การใช้งานที่ใช้กับคอมไพลเลอร์ได้รับการอัปเดตแล้ว และขณะนี้ตอบสนองได้ดีขึ้นเมื่อตรวจสอบรายละเอียดสิทธิ์การใช้งานของคอมไพเลอร์
Trampolined call (XC8-2760) ตอนนี้คอมไพลเลอร์สามารถดำเนินการแทนที่คำสั่งการโทรแบบยาวด้วยการเรียกแบบสัมพันธ์ที่สั้นกว่า เมื่อปกติแล้วรูปแบบแบบสัมพันธ์กันของคำสั่งจะอยู่นอกระยะของปลายทาง ในสถานการณ์นี้ คอมไพลเลอร์จะพยายามแทนที่ด้วยคำสั่งเพื่อเรียก rcall คำสั่งที่จะ 'tr'ampการดำเนินการ oline' ไปยังที่อยู่ที่ต้องการ เช่นampเลอ: jmp
อาร์คอล tramp_foo ;ถูกเรียก foo
-
อาร์คอล tramp_ฟู
-
tramp_ฟู:
jmp ฟู
การปรับให้เหมาะสมนี้พร้อมกับการปรับให้เหมาะสมของโฟลว์โปรแกรมที่คล้ายคลึงกัน ถูกควบคุมโดยอ็อพชัน -mrelax
3.2. เวอร์ชัน 2.40
การสนับสนุนอุปกรณ์ใหม่ การสนับสนุนพร้อมใช้งานสำหรับชิ้นส่วน AVR ต่อไปนี้: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32 และ AVR64EA48
ปรับปรุงสิ่งที่เป็นนามธรรมของขั้นตอน เครื่องมือเพิ่มประสิทธิภาพของสิ่งที่เป็นนามธรรมของขั้นตอน (PA) ได้รับการปรับปรุงให้ดีขึ้น เพื่อให้โค้ดที่มีคำสั่งการเรียกฟังก์ชัน (/ ) สามารถใช้ utlined ได้ สิ่งนี้จะเกิดขึ้นเฉพาะการเรียก rcall หากไม่ได้ใช้สแต็กเพื่อส่งอาร์กิวเมนต์หรือรับค่าส่งคืนจากฟังก์ชัน สแต็กจะใช้เมื่อเรียกใช้ฟังก์ชันที่มีรายการอาร์กิวเมนต์ตัวแปรหรือเมื่อเรียกฟังก์ชันที่รับอาร์กิวเมนต์มากกว่าที่มีรีจิสเตอร์กำหนดไว้สำหรับจุดประสงค์นี้ คุณลักษณะนี้สามารถปิดใช้งานได้โดยใช้ตัวเลือก หรือสามารถปิดใช้งานขั้นตอนที่เป็นนามธรรมทั้งหมดสำหรับไฟล์ออบเจกต์หรือฟังก์ชันได้โดยใช้ - และ ตามลำดับ หรือโดยการใช้แอตทริบิวต์ (ตัวระบุ) แบบเลือกร่วมกับฟังก์ชัน
mno-pa-โครงร่าง-โทร -mno-pa-on-file -mno-pa-on-function nopa มาโครการครอบคลุมโค้ด ตอนนี้คอมไพเลอร์กำหนดมาโครหากตัวเลือกที่ถูกต้องคือ __nopa __CODECOV -mcodecov ที่ระบุ
ตัวเลือกการจองหน่วยความจำ ขณะนี้ไดรเวอร์จะยอมรับตัวเลือก xc8-cc -mreserve=space@start:end เมื่อสร้างสำหรับเป้าหมาย AVR ตัวเลือกนี้สงวนช่วงหน่วยความจำที่ระบุในพื้นที่หน่วยความจำข้อมูลหรือโปรแกรม ป้องกันตัวเชื่อมโยงจากการเติมรหัสหรือวัตถุในพื้นที่นี้ IO อัจฉริยะที่ชาญฉลาดขึ้น มีการปรับปรุงหลายอย่างในฟังก์ชัน Smart IO รวมถึงการปรับแต่งทั่วไปสำหรับโค้ดหลัก printf การปฏิบัติต่อตัวระบุการแปลง %n เป็นตัวแปรอิสระ การเชื่อมโยงรูทีน vararg pop ตามความต้องการ โดยใช้ประเภทข้อมูลที่สั้นกว่าที่เป็นไปได้สำหรับการจัดการ อาร์กิวเมนต์ของฟังก์ชัน IO และรหัสทั่วไปของแฟคตอริ่งในการจัดการความกว้างของฟิลด์และความแม่นยำ ซึ่งอาจส่งผลให้เกิดการประหยัดรหัสและข้อมูลที่สำคัญ รวมทั้งเพิ่มความเร็วในการดำเนินการของ IO
3.3. เวอร์ชัน 2.39 (รุ่นความปลอดภัยการทำงาน)
ใบอนุญาตเซิร์ฟเวอร์เครือข่าย MPLAB XC8 Functional Safety Compiler รุ่นนี้รองรับใบอนุญาตเซิร์ฟเวอร์เครือข่าย
3.4. เวอร์ชัน 2.36
ไม่มี.
3.5. เวอร์ชัน 2.35
การสนับสนุนอุปกรณ์ใหม่ รองรับชิ้นส่วน AVR ต่อไปนี้: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 และ AVR64DD32
การสลับบริบทที่ได้รับการปรับปรุง ตัวเลือก -mcall-isr-prologues ใหม่จะเปลี่ยนวิธีที่ฟังก์ชันการขัดจังหวะบันทึกการลงทะเบียนในรายการและวิธีการกู้คืนการลงทะเบียนเหล่านั้นเมื่อรูทีนการขัดจังหวะสิ้นสุดลง มันทำงานในลักษณะเดียวกันกับตัวเลือก -mcall-prologues แต่จะมีผลกับฟังก์ชันขัดจังหวะ (ISR) เท่านั้น
การสลับบริบทที่ได้รับการปรับปรุงให้ดียิ่งขึ้น ตัวเลือก -mgas-isr-prologues ใหม่จะควบคุมโค้ดการสลับบริบทที่สร้างขึ้นสำหรับรูทีนบริการขัดจังหวะขนาดเล็ก เมื่อเปิดใช้งาน คุณสมบัตินี้จะทำให้แอสเซมเบลอร์สแกน ISR เพื่อใช้งานรีจิสเตอร์ และบันทึกเฉพาะรีจิสเตอร์ที่ใช้แล้วหากจำเป็น
การแมปแฟลชที่กำหนดค่าได้ อุปกรณ์บางอย่างในตระกูล AVR DA และ AVR DB มี SFR (เช่น FLMAP) ที่ระบุว่าส่วนใดของหน่วยความจำโปรแกรม 32k ที่จะถูกแมปลงในหน่วยความจำข้อมูล ใหม่ – ตัวเลือก mconst-data-in-config-mapped-progmem สามารถใช้เพื่อให้ตัวเชื่อมโยงวางข้อมูลที่มีคุณสมบัติเป็น const ทั้งหมดในส่วน 32k และเริ่มต้นการลงทะเบียน SFR ที่เกี่ยวข้องโดยอัตโนมัติเพื่อให้แน่ใจว่าข้อมูลนี้ถูกแมปลงในหน่วยความจำข้อมูล พื้นที่ซึ่งสามารถเข้าถึงได้อย่างมีประสิทธิภาพมากขึ้น
Microchip Unified Standard Libraries คอมไพเลอร์ MPLAB XC ทั้งหมดจะแชร์ Microchip Unified Standard Library ซึ่งตอนนี้พร้อมใช้งานแล้วใน MPLAB XC8 รุ่นนี้ คู่มือผู้ใช้คอมไพเลอร์ MPLA# XC8 C สำหรับ AVO MCU ไม่มีเอกสารประกอบสำหรับฟังก์ชันมาตรฐานเหล่านี้อีกต่อไป ข้อมูลนี้สามารถพบได้ในคู่มืออ้างอิง Microchip Unified Standard Library โปรดทราบว่าฟังก์ชันบางอย่างที่กำหนดโดย avr-libc ก่อนหน้านี้ไม่สามารถใช้งานได้อีกต่อไป (ดูการทำงานของไลล่า)
Smart I0 ในฐานะที่เป็นส่วนหนึ่งของไลบรารีแบบรวมใหม่ ฟังก์ชัน I0 ในตระกูล printf และ scanf จะถูกสร้างแบบกำหนดเองในแต่ละบิลด์ ตามวิธีการใช้งานฟังก์ชันเหล่านี้ในโปรแกรม สิ่งนี้สามารถลดทรัพยากรที่ใช้โดยโปรแกรมได้อย่างมาก
ตัวเลือกความช่วยเหลือ Smart ICI เมื่อวิเคราะห์การเรียกไปยังฟังก์ชัน I0 อัจฉริยะ (เช่น print f () หรือ scanf ()) คอมไพเลอร์ไม่สามารถกำหนดจากสตริงรูปแบบหรืออนุมานจากอาร์กิวเมนต์ที่ตัวระบุการแปลงที่จำเป็นในการเรียกได้เสมอไป ก่อนหน้านี้ คอมไพเลอร์จะไม่ตั้งสมมติฐานเสมอและตรวจสอบให้แน่ใจว่าฟังก์ชันที่ทำงานได้อย่างสมบูรณ์ 10 ฟังก์ชันเชื่อมโยงเข้ากับอิมเมจโปรแกรมสุดท้าย มีการเพิ่มตัวเลือกใหม่ – msmart-io-format=fmt เพื่อให้คอมไพเลอร์ได้รับแจ้งจากตัวระบุการแปลงที่ใช้โดยฟังก์ชัน smart I0 ซึ่งการใช้งานไม่ชัดเจน ป้องกันไม่ให้รูทีน 10 รายการที่ยาวเกินไปถูกเชื่อมโยง (ดูตัวเลือกรูปแบบ smart-io สำหรับรายละเอียดเพิ่มเติม)
การวางส่วนแบบกำหนดเอง ก่อนหน้านี้ ตัวเลือก -W1, –section-start จะวางส่วนที่ระบุในแอดเดรสที่ร้องขอเท่านั้น เมื่อสคริปต์ตัวเชื่อมโยงกำหนดส่วนเอาต์พุตที่มีชื่อเดียวกัน เมื่อไม่เป็นเช่นนั้น ส่วนนั้นจะถูกวางไว้ในที่อยู่ที่ผู้เชื่อมโยงเลือกไว้ และตัวเลือกนั้นจะถูกละเว้น ตอนนี้ตัวเลือกจะได้รับการยอมรับสำหรับส่วนที่กำหนดเองทั้งหมด แม้ว่าสคริปต์ตัวเชื่อมโยงจะไม่ได้กำหนดส่วนนั้นก็ตาม อย่างไรก็ตาม โปรดทราบว่าสำหรับส่วนมาตรฐาน เช่น . ข้อความ, . bss หรือ . ข้อมูล ตัวจัดสรรที่เหมาะสมที่สุดจะยังคงสามารถควบคุมตำแหน่งได้อย่างสมบูรณ์ และตัวเลือกจะไม่มีผลใดๆ ใช้ตัวเลือก -ton, -Tsection=addr ตามที่อธิบายไว้ในคู่มือผู้ใช้
3.6. เวอร์ชัน 2.32
Stack Guidance พร้อมใบอนุญาตคอมไพเลอร์ PRO คุณสมบัติคำแนะนำสแต็กของคอมไพเลอร์สามารถใช้เพื่อประเมินความลึกสูงสุดของสแต็กใดๆ ที่โปรแกรมใช้ สร้างและวิเคราะห์กราฟการโทรของโปรแกรม กำหนดการใช้สแต็กของแต่ละฟังก์ชัน และสร้างรายงาน ซึ่งสามารถอนุมานความลึกของสแต็กที่โปรแกรมใช้ คุณลักษณะนี้เปิดใช้งานผ่านตัวเลือกบรรทัดคำสั่ง -mchp-stack-usage สรุปการใช้งานสแต็กจะถูกพิมพ์หลังจากดำเนินการ มีรายงานสแต็คโดยละเอียดในแผนที่ fileซึ่งสามารถขอได้ตามปกติ
การสนับสนุนอุปกรณ์ใหม่ รองรับชิ้นส่วน AVR ต่อไปนี้: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 และ AVR32DB48 การสนับสนุนอุปกรณ์แบบหดกลับไม่มีการสนับสนุนสำหรับชิ้นส่วน AVR ต่อไปนี้: AVR16DA28, AVR16DA32 และ AVR16DA48
3.7. เวอร์ชัน 2.31
ไม่มี.
3.8. เวอร์ชัน 2.30
ตัวเลือกใหม่เพื่อป้องกันการเริ่มต้นข้อมูล ตัวเลือกไดรเวอร์ -mno-data-init ใหม่ป้องกันการเริ่มต้นข้อมูลและการล้างส่วน bss ทำงานโดยการระงับเอาต์พุตของข้อมูลการคัดลอกและล้างสัญลักษณ์ bss ในแอสเซมบลี files ซึ่งจะป้องกันการรวมรูทีนเหล่านั้นโดยตัวเชื่อมโยง
ปรับปรุงการเพิ่มประสิทธิภาพ มีการปรับปรุงการเพิ่มประสิทธิภาพหลายอย่าง รวมทั้งการลบคำสั่งย้อนกลับที่ซ้ำซ้อน การลบการข้ามบางอย่างหลังจากคำสั่งข้ามหากเป็นบิต และนามธรรมของขั้นตอนที่ได้รับการปรับปรุงและความสามารถในการทำซ้ำกระบวนการนี้ ขณะนี้มีตัวเลือกเพิ่มเติมเพื่อควบคุมการเพิ่มประสิทธิภาพเหล่านี้โดยเฉพาะ -f ส่วนยึดซึ่งอนุญาตให้เข้าถึงวัตถุคงที่ที่จะดำเนินการโดยสัมพันธ์กับสัญลักษณ์เดียว -mpa-iterations=n ซึ่งอนุญาตให้เปลี่ยนจำนวนของขั้นตอนที่เป็นนามธรรมซ้ำจากค่าเริ่มต้นที่ 2; และ -mpa-callcost-shortcall ซึ่งทำการนามธรรมเชิงขั้นตอนที่ก้าวร้าวมากขึ้นด้วยความหวังว่าตัวเชื่อมโยงสามารถผ่อนคลายการโทรที่ยาวนานได้ ตัวเลือกสุดท้ายนี้สามารถเพิ่มขนาดโค้ดได้หากไม่รับรู้สมมติฐานพื้นฐาน
การสนับสนุนอุปกรณ์ใหม่รองรับชิ้นส่วน AVR ต่อไปนี้: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 และ AVR128DB การสนับสนุนอุปกรณ์ที่หดกลับไม่มีการสนับสนุนสำหรับชิ้นส่วน AVR ต่อไปนี้: ATA64, ATA5272, ATA5790N, ATA5790, ATA5791, ATA5795, ATA6285, ATA6286C, ATA6612C, ATA6613Q, ATA6614C, ATA6616C และ ATA6617
3.9. เวอร์ชัน 2.29 (รุ่นความปลอดภัยการทำงาน)
ส่วนหัว file สำหรับคอมไพเลอร์ในตัว เพื่อให้แน่ใจว่าคอมไพเลอร์สามารถปฏิบัติตามข้อกำหนดของภาษา เช่น MISRA หัวข้อ fileซึ่งรวมโดยอัตโนมัติโดย ได้รับการปรับปรุงแล้ว ส่วนหัวนี้มีต้นแบบสำหรับฟังก์ชันในตัวทั้งหมด เช่น builtin_avr_nop ( ) และ builtin avr delay_cycles () บิวท์อินบางตัวอาจไม่รองรับ MISRA; สิ่งเหล่านี้สามารถละเว้นได้โดยการเพิ่มdefineXCSTRICT_MISRAในบรรทัดคำสั่งของคอมไพเลอร์ ในตัวและการประกาศได้รับการอัปเดตเพื่อใช้ประเภทความกว้างคงที่
3.10. เวอร์ชัน 2.20
การสนับสนุนอุปกรณ์ใหม่ รองรับชิ้นส่วน AVR ต่อไปนี้: ATTINY1624, ATTINY1626 และ ATTINY1627
การจัดสรรแบบพอดีที่ดีที่สุดที่ดีขึ้น ตัวจัดสรรแบบพอดีที่ดีที่สุด (BFA) ในคอมไพเลอร์ได้รับการปรับปรุงเพื่อให้ส่วนต่างๆ ได้รับการจัดสรรในลำดับที่อนุญาตการเพิ่มประสิทธิภาพที่ดีขึ้น ขณะนี้ BFA รองรับแอดเดรสสเปซที่มีชื่อและจัดการการเริ่มต้นข้อมูลได้ดีขึ้น
การปรับปรุงสิ่งที่เป็นนามธรรมของขั้นตอน การปรับปรุงสิ่งที่เป็นนามธรรมของขั้นตอนจะดำเนินการในลำดับรหัสเพิ่มเติม สถานการณ์ก่อนหน้านี้ที่การเพิ่มประสิทธิภาพนี้อาจเพิ่มขนาดรหัสได้รับการแก้ไขแล้วโดยการทำให้รหัสการเพิ่มประสิทธิภาพรับรู้ถึงกระบวนการรวบรวมขยะของลิงเกอร์
ไม่มี AVR Assembler AVR Assembler ไม่รวมอยู่ในการกระจายนี้อีกต่อไป
3.11. เวอร์ชัน 2.19 (รุ่นความปลอดภัยการทำงาน)
ไม่มี.
3.12. เวอร์ชัน 2.10
ความครอบคลุมของรหัส รุ่นนี้มีคุณลักษณะความครอบคลุมของรหัสที่อำนวยความสะดวกในการวิเคราะห์ถึงขอบเขตที่ซอร์สโค้ดของโครงการได้รับการดำเนินการ ใช้ตัวเลือก -mcodecov=ram เพื่อเปิดใช้งาน หลังจากเรียกใช้โปรแกรมบนฮาร์ดแวร์ของคุณ ข้อมูลการครอบคลุมรหัสจะถูกจัดเรียงในอุปกรณ์ และสิ่งนี้สามารถถ่ายโอนไปยังและแสดงโดย MPLAB X IDE ผ่านปลั๊กอินการครอบคลุมรหัส ดูเอกสารประกอบ IDE เพื่อรับข้อมูลเกี่ยวกับปลั๊กอินนี้ได้ อาจใช้ #pragma nocodecov เพื่อแยกฟังก์ชันที่ตามมาออกจากการวิเคราะห์ความครอบคลุม ตามหลักการแล้วควรเพิ่ม pragma ที่จุดเริ่มต้นของ file เพื่อแยกทั้งหมดนั้นออก file จากการวิเคราะห์ความครอบคลุม อีกทางหนึ่ง อาจใช้ _attribute_ ( (nocodecov) ) เพื่อแยกฟังก์ชันเฉพาะออกจากการวิเคราะห์ความครอบคลุม
คำอธิบายอุปกรณ์ files อุปกรณ์ใหม่ file เรียกว่า avr_chipinfo html อยู่ในไดเร็กทอรีเอกสารของการแจกจ่ายคอมไพเลอร์ นี้ file แสดงรายการอุปกรณ์ทั้งหมดที่คอมไพเลอร์รองรับ คลิกที่ชื่ออุปกรณ์และจะเปิดหน้าแสดงการตั้งค่าบิตการกำหนดค่าที่อนุญาตทั้งหมด / ค่าความเจ็บปวดสำหรับอุปกรณ์นั้นด้วย เช่นampเลส นามธรรมขั้นตอน
การเพิ่มประสิทธิภาพของกระบวนการที่เป็นนามธรรม ซึ่งแทนที่บล็อกทั่วไปของรหัสแอสเซมบลีด้วยการเรียกไปยังสำเนาที่แยกออกมาของบล็อกนั้น ได้ถูกเพิ่มเข้าไปในคอมไพเลอร์ การดำเนินการเหล่านี้ดำเนินการโดยแอปพลิเคชันแยกต่างหาก ซึ่งคอมไพเลอร์เรียกใช้โดยอัตโนมัติเมื่อเลือกการปรับให้เหมาะสมระดับ 2, 3 หรือ s การเพิ่มประสิทธิภาพเหล่านี้ลดขนาดโค้ด แต่อาจลดความเร็วในการดำเนินการและความสามารถในการดีบักโค้ด กระบวนการที่เป็นนามธรรมสามารถปิดใช้งานได้ที่ระดับการปรับให้เหมาะสมที่สูงขึ้นโดยใช้ตัวเลือก -mno-pa หรือสามารถเปิดใช้งานในระดับการปรับให้เหมาะสมที่ต่ำกว่า (ขึ้นอยู่กับใบอนุญาตของคุณ) โดยใช้ -mpa สามารถปิดใช้งานได้สำหรับวัตถุ file ใช้ -mno-pa-on-file=fileชื่อหรือปิดใช้งานฟังก์ชันโดยใช้ -mno-pa-on-function=function ภายในซอร์สโค้ดของคุณ สามารถปิดการใช้งานขั้นตอนที่เป็นนามธรรมสำหรับฟังก์ชันได้โดยใช้แอตทริบิวต์ ( (nopa) ) กับคำจำกัดความของฟังก์ชัน หรือโดยการใช้ nopa ซึ่งขยายเป็นแอตทริบิวต์ ( (nopa, noinline) ) และป้องกันไม่ให้ฟังก์ชันอินไลน์เกิดขึ้น และมีนามธรรมของรหัสอินไลน์
การสนับสนุนบิตล็อกใน pragma ตอนนี้สามารถใช้ #pragma config เพื่อระบุบิตล็อก AVR รวมถึงบิตการกำหนดค่าอื่นๆ ได้ ตรวจสอบ avr_chipinfo html file (กล่าวถึงข้างต้น) สำหรับคู่การตั้งค่า/ค่าที่จะใช้กับ Pragma นี้ การสนับสนุนอุปกรณ์ใหม่รองรับส่วนต่อไปนี้: AVR28DAl28, AVR64DAl28, AVR32DA 128 และ AVR48DA 128
3.13. เวอร์ชัน 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
3.14. เวอร์ชัน 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 file จึงเป็นหนทางที่แนะนำในการวิงวอนบรรณารักษ์ หากจำเป็นสำหรับโครงการเดิม บรรณารักษ์คนก่อนสามารถเรียกได้โดยตรงโดยใช้ตัวเลือกแบบเก่าที่ยอมรับในเวอร์ชันคอมไพเลอร์ก่อนหน้า
ปัญหาการโยกย้าย
ต่อไปนี้เป็นคุณสมบัติที่ตอนนี้คอมไพเลอร์จัดการแตกต่างกัน การเปลี่ยนแปลงเหล่านี้อาจต้องมีการดัดแปลงซอร์สโค้ดของคุณหากย้ายโค้ดไปยังเวอร์ชันคอมไพเลอร์นี้ หมายเลขเวอร์ชันในหัวข้อย่อยระบุเวอร์ชันคอมไพเลอร์แรกเพื่อรองรับการเปลี่ยนแปลงที่ตามมา
4.1. เวอร์ชัน 2.41
ลบฟังก์ชั่น fma ที่ไม่ถูกต้อง (XC8-2913) ไลบรารีมาตรฐาน C99 fma 0 - ฟังก์ชั่นครอบครัว ( ) ไม่ได้คำนวณการบวกแบบคูณด้วยความแม่นยำที่ไม่สิ้นสุดในการปัดเศษเดียว แต่แทนที่จะสะสมข้อผิดพลาดในการปัดเศษกับการดำเนินการแต่ละครั้ง ฟังก์ชันเหล่านี้ถูกลบออกจากไลบรารีที่ให้มา
4.2. เวอร์ชัน 2.40
ไม่มี.
4.3. เวอร์ชัน 2.39 (รุ่นความปลอดภัยการทำงาน)
ไม่มี.
4.4. เวอร์ชัน 2.36 ไม่มี
4.5. เวอร์ชัน 2.35
การจัดการฐานสตริงเป็น (XC8-2420) เพื่อให้แน่ใจว่าสอดคล้องกับคอมไพเลอร์ XC อื่นๆ ฟังก์ชันสตริงเป็น XC8 เช่น strtol () เป็นต้น จะไม่พยายามแปลงสตริงอินพุตอีกต่อไปหากฐานที่ระบุมีขนาดใหญ่กว่า 36 และจะตั้งค่า errno เป็น EINVAL แทน มาตรฐาน C ไม่ได้ระบุพฤติกรรมของฟังก์ชันเมื่อเกินค่าพื้นฐานนี้
การเพิ่มประสิทธิภาพความเร็วที่ไม่เหมาะสม การปรับให้เหมาะสมขั้นตอนที่เป็นนามธรรมถูกเปิดใช้งานเมื่อเลือกการปรับให้เหมาะสมระดับ 3 (-03) การเพิ่มประสิทธิภาพเหล่านี้ลดขนาดโค้ดโดยแลกกับความเร็วของโค้ด ดังนั้นจึงไม่ควรดำเนินการ โครงการที่ใช้ระดับการปรับให้เหมาะสมนี้อาจเห็นความแตกต่างของขนาดโค้ดและความเร็วในการดำเนินการเมื่อสร้างด้วยรีลีสนี้
การทำงานของห้องสมุด โค้ดสำหรับฟังก์ชันไลบรารี C มาตรฐานจำนวนมากในปัจจุบันมาจาก Unified Standard Library ของ Microchip ซึ่งอาจมีลักษณะการทำงานที่แตกต่างกันในบางสถานการณ์เมื่อเทียบกับไลบรารี avr-libc เดิม สำหรับอดีตampคุณไม่จำเป็นต้องเชื่อมโยงในไลบรารี 1printf flt (ตัวเลือก -1printf_flt) อีกต่อไปเพื่อเปิดใช้งานการจัดรูปแบบ I0 รองรับตัวระบุรูปแบบลอย สมาร์ท I0 คุณสมบัติของ Microchip Unified Standard Library ทำให้ตัวเลือกนี้ซ้ำซ้อน นอกจากนี้ การใช้รูทีนที่ต่อท้ายด้วย _P สำหรับฟังก์ชันสตริงและหน่วยความจำ (เช่น strcpy_P ( ) เป็นต้น..) ที่ทำงานบนสตริง const ในแฟลชก็ไม่จำเป็นอีกต่อไป รูทีน C มาตรฐาน (เช่น strcpy ) จะทำงานอย่างถูกต้องกับข้อมูลดังกล่าวเมื่อเปิดใช้งานคุณสมบัติ const-data-in-program-memory
4.6. เวอร์ชัน 2.32
ไม่มี.
4.7. เวอร์ชัน 2.31
ไม่มี.
4.8. เวอร์ชัน 2.30
ไม่มี.
4.1. เวอร์ชัน 2.29 (รุ่นความปลอดภัยการทำงาน)
ไม่มี.
4.2. เวอร์ชัน 2.20
เปลี่ยนรูปแบบ DFP ตอนนี้คอมไพเลอร์ใช้เค้าโครงอื่นที่ใช้โดย DFP (Device Family Packs) ซึ่งหมายความว่า DFP รุ่นเก่าอาจไม่ทำงานกับรุ่นนี้ และคอมไพเลอร์รุ่นเก่าจะไม่สามารถใช้ DFP รุ่นล่าสุดได้
4.3. เวอร์ชัน 2.19 (รุ่นความปลอดภัยการทำงาน)
ไม่มี.
4.4. เวอร์ชัน 2.10
ไม่มี
4.5. เวอร์ชัน 2.05
อ็อบเจกต์ Const ในหน่วยความจำของโปรแกรม โปรดทราบว่าโดยค่าเริ่มต้น อ็อบเจ็กต์ Const-qualfiied จะถูกวางและเข้าถึงในหน่วยความจำของโปรแกรม (ตามที่อธิบายไว้) สิ่งนี้จะส่งผลต่อขนาดและความเร็วในการดำเนินการของโครงการของคุณ แต่ควรลดการใช้ RAM คุณลักษณะนี้สามารถปิดใช้งานได้ ถ้าจำเป็น โดยใช้อ็อพชัน -mnoconst-data-in-progmem
4.6. เวอร์ชัน 2.00
ฟิวส์การกำหนดค่า ตอนนี้สามารถตั้งโปรแกรมฟิวส์การกำหนดค่าอุปกรณ์โดยใช้ config pragma ตามด้วยคู่การตั้งค่าเพื่อระบุสถานะของฟิวส์ เช่น
#pragma กำหนดค่า WDTON = SET
#pragma กำหนดค่า BODLEVEL = BODLEVEL_4V3
วัตถุและฟังก์ชันสัมบูรณ์ อ็อบเจกต์และฟังก์ชันสามารถวางที่แอดเดรสเฉพาะในหน่วยความจำได้โดยใช้ตัวระบุ CCI (แอดเดรส) เช่นampเลอ:
#รวม
int foobar_at(0x800100);
ถ่าน __at(0x250) getID(int offset) { … }
อาร์กิวเมนต์ของตัวระบุนี้ต้องเป็น ค่าคงที่ที่แสดงที่อยู่ซึ่งไบต์แรกหรือคำสั่งจะถูกวางไว้ ที่อยู่ RAM ระบุโดยใช้ออฟเซ็ต 0x800000 เปิดใช้งาน CCI เพื่อใช้คุณลักษณะนี้
ไวยากรณ์ของฟังก์ชันขัดจังหวะใหม่ ขณะนี้คอมไพเลอร์ยอมรับตัวระบุ CCI _interrupt (num) เพื่อระบุว่าฟังก์ชัน C เป็นตัวจัดการการขัดจังหวะ ตัวระบุใช้หมายเลขอินเตอร์รัปต์ เช่นampเลอ:
#รวม
โมฆะ __interrupt (SPI_STC_vect_num) spi_Isr (โมฆะ) { … }
ปัญหาที่ได้รับการแก้ไข
ต่อไปนี้เป็นการแก้ไขที่ทำกับคอมไพเลอร์ สิ่งเหล่านี้อาจแก้ไขจุดบกพร่องในรหัสที่สร้างขึ้นหรือเปลี่ยนแปลงการทำงานของคอมไพเลอร์ให้เป็นไปตามที่ตั้งใจไว้หรือระบุโดยคู่มือผู้ใช้ หมายเลขเวอร์ชันในหัวข้อย่อยระบุเวอร์ชันคอมไพเลอร์แรกที่มีการแก้ไขสำหรับปัญหาที่ตามมา ป้ายกำกับในวงเล็บในชื่อคือการระบุปัญหาในฐานข้อมูลการติดตาม สิ่งเหล่านี้อาจมีประโยชน์หากคุณต้องการติดต่อฝ่ายสนับสนุน
โปรดทราบว่าปัญหาเฉพาะอุปกรณ์บางอย่างได้รับการแก้ไขใน Device Family Pack (DFP) ที่เชื่อมโยงกับอุปกรณ์ ดู MPLAB Pack Manager สำหรับข้อมูลเกี่ยวกับการเปลี่ยนแปลงที่ทำกับ DFP และดาวน์โหลดชุดล่าสุด
5.1. เวอร์ชัน 2.41
ปัญหาเกี่ยวกับ Dongle ใน Ventura (XC8-3088) Dongle คอมไพเลอร์อาจไม่ได้รับการอ่านอย่างถูกต้องบนโฮสต์ macOS Ventura ส่งผลให้การให้สิทธิ์ใช้งานล้มเหลว การเปลี่ยนแปลงตัวจัดการสิทธิ์การใช้งาน XCLM ช่วยแก้ไขปัญหานี้
ตัวบ่งชี้การจัดสรรหน่วยความจำไม่ถูกต้อง (XC8-2925) ความพยายามจัดสรร SIZE_MAX ไบต์ (หรือค่าที่ใกล้เคียง) ของหน่วยความจำโดยใช้ฟังก์ชันการจัดการหน่วยความจำไลบรารีมาตรฐาน (malloc () และคณะ) สำเร็จอย่างไม่ถูกต้อง ไม่ได้คำนึงถึงว่าจำเป็นต้องมีไบต์เพิ่มเติมนอกเหนือจากบล็อกที่ร้องขอเมื่อใช้การจัดสรรหน่วยความจำแบบไดนามิกอย่างง่าย ตัวชี้ NULL จะถูกส่งกลับและตั้งค่า errno เป็น ENOMEM ในสถานการณ์ดังกล่าว
ลบฟังก์ชั่น fma ที่ไม่ถูกต้อง (XC8-2913) ไลบรารีมาตรฐาน C99 fma ( ) - ฟังก์ชั่นครอบครัว ( ) ไม่ได้คำนวณการบวกแบบคูณด้วยความแม่นยำที่ไม่สิ้นสุดในการปัดเศษเดียว แต่แทนที่จะสะสมข้อผิดพลาดในการปัดเศษกับการดำเนินการแต่ละครั้ง ฟังก์ชันเหล่านี้ถูกลบออกจากไลบรารีที่ให้มา
การจัดการการแปลงสตริงไม่ถูกต้อง (XC8-2921, XC8-2652) เมื่อ 'ลำดับหัวเรื่อง' สำหรับการแปลงโดย strtod Cr มีสิ่งที่ดูเหมือนจะเป็นเลขทศนิยมในรูปแบบเลขยกกำลัง และมีอักขระที่ไม่คาดคิดหลังอักขระ e/E เมื่อระบุ endptr ไว้ ก็จะกำหนดที่อยู่ที่ ให้ชี้ไปที่อักขระหลัง e/E ในขณะที่ควรชี้ไปที่อักขระ e/E เอง เนื่องจากยังไม่ได้แปลง สำหรับอดีตample, strtod (“100exx”, &ep) ควรคืนค่า 100.00 และตั้งค่า ep ให้ชี้ไปที่ส่วน “exx” ของสตริง ในขณะที่ฟังก์ชันส่งคืนค่าที่ถูกต้อง แต่ตั้งค่า ep ให้ชี้ไปที่ส่วน “xx” ของสตริง .
5.2. เวอร์ชัน 2.40
ผ่อนคลายเกินไป (XCS-2876) เมื่อใช้อ็อพชัน -mrelax คอมไพลเลอร์ไม่ได้จัดสรรบางส่วนร่วมกัน ส่งผลให้ขนาดโค้ดที่เหมาะสมน้อยลง สิ่งนี้อาจเกิดขึ้นกับรหัสที่ใช้ไลบรารี MUSL ใหม่หรือสัญลักษณ์ที่อ่อนแอ
คุณลักษณะการทำแผนที่ไม่ได้ปิดใช้งานตามที่ระบุไว้ในคำเตือน (XC8-2875) คุณลักษณะ const-data-in-config-mappedprogmem ขึ้นอยู่กับคุณลักษณะ const-data-in-progmem ที่เปิดใช้งานอยู่ หากคุณลักษณะ const-data-inconfig-mapped-progmem ถูกเปิดใช้งานอย่างชัดเจนโดยใช้ตัวเลือก และคุณลักษณะ const-data-inprogmem ถูกปิดใช้งาน ขั้นตอนการเชื่อมโยงจะล้มเหลว แม้ว่าจะมีข้อความเตือนระบุว่า const-data-in-con fig- คุณลักษณะ mapped-progmem ถูกปิดใช้งานโดยอัตโนมัติ ซึ่งไม่ถูกต้องทั้งหมด ขณะนี้คุณลักษณะ const-data-in-config-mapped-progmem ถูกปิดใช้งานโดยสมบูรณ์ในสถานการณ์นี้
DFP เปลี่ยนแปลงเพื่อเข้าถึง NVMCTRL (XC8-2848) อย่างถูกต้อง รหัสเริ่มต้นรันไทม์ที่ใช้โดยอุปกรณ์ AVR64EA ไม่ได้พิจารณาว่าการลงทะเบียน NVMCTRL อยู่ภายใต้การป้องกันการเปลี่ยนแปลงการกำหนดค่า (CCP) และไม่สามารถตั้งค่า I0 SFR เป็นเพจที่ใช้โดย const-data-in-configmapped-progmem คุณสมบัติคอมไพเลอร์ การเปลี่ยนแปลงที่เกิดขึ้นใน AVR-Ex_DFP เวอร์ชัน 2.2.55 จะทำให้โค้ดเริ่มต้นรันไทม์เขียนลงในรีจิสเตอร์นี้ได้อย่างถูกต้อง
DFP เปลี่ยนแปลงเพื่อหลีกเลี่ยง การแมปแฟลช (XC8-2847) มีการใช้วิธีแก้ไขปัญหาเกี่ยวกับคุณลักษณะอุปกรณ์การแมปแฟลชที่รายงานใน AVR128DA28/32/48/64 Silicon Errata (D580000882) คุณลักษณะคอมไพเลอร์ const-data-in-config-mapped-progmem จะไม่ถูกนำมาใช้โดยค่าเริ่มต้นสำหรับอุปกรณ์ที่ได้รับผลกระทบ และการเปลี่ยนแปลงนี้จะปรากฏใน AVR-Dx_DFP เวอร์ชัน 2.2.160
สร้างข้อผิดพลาดด้วย sinhf หรือ coshf (XC8-2834) ความพยายามที่จะใช้ฟังก์ชันไลบรารี sinhf () หรือ coshf () ทำให้เกิดข้อผิดพลาดในการเชื่อมโยง ซึ่งอธิบายถึงการอ้างอิงที่ไม่ได้กำหนด ฟังก์ชันที่ขาดหายไปที่อ้างอิงได้รวมอยู่ในการแจกจ่ายคอมไพเลอร์แล้ว
สร้างข้อผิดพลาดด้วย nopa (XC,8-2833) การใช้แอตทริบิวต์ nopa กับฟังก์ชันที่มีชื่อแอสเซมเบลอร์ระบุโดยใช้ asm ( ) ทริกเกอร์ข้อความแสดงข้อผิดพลาดจากแอสเซมเบลอร์ ชุดค่าผสมนี้เป็นไปไม่ได้
ความล้มเหลวของฟังก์ชัน Variadic ที่มีอาร์กิวเมนต์ตัวชี้ (XC8-2755, XC8-2731) ฟังก์ชันที่มีจำนวนอาร์กิวเมนต์หลายตัวแปรคาดว่าพอยน์เตอร์ 24 บิต (ชนิด memx) จะถูกส่งผ่านในรายการอาร์กิวเมนต์ตัวแปรเมื่อเปิดใช้งานคุณสมบัติ const-data-in-progmem อาร์กิวเมนต์ที่เป็นตัวชี้ไปยังหน่วยความจำข้อมูลถูกส่งผ่านเป็นวัตถุ 16 บิต ทำให้รหัสล้มเหลวเมื่ออ่านในที่สุด เมื่อเปิดใช้งานคุณสมบัติ constdata-in-progmem อาร์กิวเมนต์พอยน์เตอร์ 16 บิตทั้งหมดจะถูกแปลงเป็นพอยน์เตอร์ 24 บิต
ฟังก์ชันไลบรารี strtoxxx ล้มเหลว (XC8-2620) เมื่อเปิดใช้งานคุณสมบัติ const-data-in-progmem พารามิเตอร์ endptr ในฟังก์ชันไลบรารี strtoxxx ไม่ได้รับการอัปเดตอย่างถูกต้องสำหรับอาร์กิวเมนต์สตริงต้นทางที่ไม่ได้อยู่ในหน่วยความจำของโปรแกรม
การแจ้งเตือนสำหรับการร่ายที่ไม่ถูกต้อง (XC8-2612) ตอนนี้คอมไพเลอร์จะแสดงข้อผิดพลาดหากเปิดใช้งานคุณสมบัติ const-in-progmem และที่อยู่ของตัวอักษรสตริงถูกส่งไปยังพื้นที่ที่อยู่ข้อมูลอย่างชัดเจน (ทิ้งตัวระบุ const) เช่นample, (uint 8_t *) “สวัสดีชาวโลก!”. คำเตือนจะมีปัญหาหากที่อยู่อาจไม่ถูกต้องเมื่อตัวชี้ข้อมูล const ถูกส่งไปยังพื้นที่ที่อยู่ข้อมูลอย่างชัดเจน
การจัดวางวัตถุ const ที่ไม่ได้กำหนดค่าเริ่มต้น (XC8-2408) อ็อบเจกต์แบบคงที่ที่ไม่ได้กำหนดค่าเริ่มต้นและค่าคงที่แบบคงที่ไม่ได้ถูกวางไว้ในหน่วยความจำโปรแกรมบนอุปกรณ์ที่แมปหน่วยความจำโปรแกรมทั้งหมดหรือบางส่วนลงในพื้นที่ที่อยู่ข้อมูล สำหรับอุปกรณ์เหล่านี้ ขณะนี้วัตถุดังกล่าวอยู่ในหน่วยความจำของโปรแกรม ทำให้การทำงานสอดคล้องกับอุปกรณ์อื่นๆ
5.3. เวอร์ชัน 2.39 (รุ่นความปลอดภัยการทำงาน)
ไม่มี.
5.4. เวอร์ชัน 2.36
ข้อผิดพลาดเมื่อล่าช้า (XC8-2774) การเปลี่ยนแปลงเล็กน้อยในการเพิ่มประสิทธิภาพโหมดฟรีที่เป็นค่าเริ่มต้นป้องกันการพับนิพจน์ตัวถูกดำเนินการไปยังฟังก์ชันในตัวหน่วงเวลาอย่างต่อเนื่อง ส่งผลให้ถือว่าไม่คงที่และทำให้เกิดข้อผิดพลาด: builtin avr delay_cycles คาดว่าจะมีค่าคงที่จำนวนเต็มเวลาคอมไพล์
5.5. เวอร์ชัน 2.35
การจัดสรรที่ต่อเนื่องกันโดยใช้ _at (XC8-2653) การจัดสรรที่ต่อเนื่องกันของหลายวัตถุในส่วนที่มีชื่อเดียวกันและการใช้ _at ( ) ทำงานไม่ถูกต้อง สำหรับอดีตampเลอ:
const char arr1[] __attribute__((ส่วน(“.mysec”))) __at (0x500) = {0xAB, 0xCD};
const ถ่าน arr2[] __attribute__((ส่วน(“.mysec”))) = {0xEF, 0xFE};
ควรใส่ arr2 ต่อจาก arr1 ทันที
การระบุที่อยู่เริ่มต้นของส่วน (XC8-2650) -W1, –section-start ตัวเลือกล้มเหลวในการวางส่วนที่อยู่เริ่มต้นที่ได้รับการเสนอชื่อ ปัญหานี้ได้รับการแก้ไขแล้วสำหรับส่วนที่ตั้งชื่อแบบกำหนดเอง; อย่างไรก็ตาม จะใช้ไม่ได้กับส่วนมาตรฐานใดๆ เช่น ข้อความ หรือ . bss ซึ่งต้องวางโดยใช้ตัวเลือก -W1, -T
ตัวเชื่อมโยงล้มเหลวเมื่อผ่อนคลาย (XC8-2647) เมื่อเปิดใช้งานการปรับให้เหมาะสม -mrelax และมีส่วนรหัสหรือข้อมูลที่ไม่พอดีกับหน่วยความจำที่มีอยู่ ตัวเชื่อมโยงล้มเหลว ในกรณีนี้ ข้อความแสดงข้อผิดพลาดจะออกมาแทน
ไม่มีไม่ถอย (XC8-2646) The ตัวเลือก –nofallback ไม่ถูกนำไปใช้อย่างถูกต้อง และไม่ได้จัดทำเป็นเอกสาร ขณะนี้สามารถเลือกได้เพื่อให้แน่ใจว่าคอมไพเลอร์จะไม่ถอยกลับไปสู่การตั้งค่าการปรับให้เหมาะสมที่ต่ำกว่า หากคอมไพเลอร์ไม่มีใบอนุญาต และจะแสดงข้อผิดพลาดแทน
การเพิ่มประสิทธิภาพความเร็วที่ไม่เหมาะสม (X03-2637) การปรับให้เหมาะสมขั้นตอนที่เป็นนามธรรมถูกเปิดใช้งานเมื่อเลือกการปรับให้เหมาะสมระดับ 3 (-03) การเพิ่มประสิทธิภาพเหล่านี้ลดขนาดโค้ดโดยแลกกับความเร็วของโค้ด ดังนั้นจึงไม่ควรดำเนินการ
EEPROM เสีย เข้าถึง (XC8-2629) รูทีน eeprom_read_block ทำงานไม่ถูกต้องบนอุปกรณ์ Xmega เมื่อเปิดใช้งานตัวเลือก -mconst-data-in-progmem (ซึ่งเป็นสถานะเริ่มต้น) ส่งผลให้หน่วยความจำ EEPROM อ่านไม่ถูกต้อง
การจัดสรรหน่วยความจำไม่ถูกต้อง (XC8-2593, XC8-2651) เมื่อ ตัวเลือก -Ttext หรือ -Tdata linker (เช่นampไฟล์ที่ส่งผ่านโดยใช้อ็อพชันไดรเวอร์ -vl) ถูกระบุ ต้นกำเนิดของพื้นที่ข้อความ/ข้อมูลที่สอดคล้องกันได้รับการอัพเดต อย่างไรก็ตาม ที่อยู่ปลายทางไม่ได้ถูกปรับตามนั้น ซึ่งอาจทำให้พื้นที่เกินช่วงหน่วยความจำของอุปกรณ์เป้าหมาย
ขัดข้องด้วยฟังก์ชันระบุแหล่งที่มามากเกินไป (XC8-2580) คอมไพลเลอร์ล้มเหลวหากฟังก์ชันถูกประกาศโดยใช้แอตทริบิวต์ของอินเตอร์รัปต์ สัญญาณ หรือ nmi มากกว่าหนึ่งรายการ เช่น แอตทริบิวต์ ( ( สัญญาณ , การขัดจังหวะ ) )
รหัสขัดจังหวะ ATtiny ไม่ถูกต้อง (XC8-2465) เมื่อสร้างอุปกรณ์ ATtiny และการปรับให้เหมาะสมถูกปิดใช้งาน (-00) ฟังก์ชันขัดจังหวะอาจทริกเกอร์ข้อความแอสเซมเบลอร์ที่อยู่นอกช่วง
ตัวเลือกไม่ผ่าน (XC8-2452) เมื่อใช้ตัวเลือกที่มีหลายตัวเลือกตัวเชื่อมโยงที่คั่นด้วยเครื่องหมายจุลภาค ตัวเลือกตัวเชื่อมโยงบางส่วนไม่ได้ถูกส่งไปยังตัวเชื่อมโยง
เกิดข้อผิดพลาดในการอ่านหน่วยความจำโปรแกรมทางอ้อม (X03-2450) ในบางกรณี คอมไพเลอร์สร้างข้อผิดพลาดภายใน (insn ที่ไม่รู้จัก) เมื่ออ่านค่าสองไบต์จากตัวชี้ไปยังหน่วยความจำของโปรแกรม
5.6. เวอร์ชัน 2.32
การเข้าถึงครั้งที่สองของ ไลบรารีล้มเหลว (XC8-2381) การเรียกใช้ xc8-ar เวอร์ชัน Windows ผู้จัดเก็บไลบรารี .exe เป็นครั้งที่สองเพื่อเข้าถึงคลังเก็บไลบรารีที่มีอยู่อาจล้มเหลวโดยมีข้อความแสดงข้อผิดพลาดไม่สามารถเปลี่ยนชื่อได้
5.7. เวอร์ชัน 2.31
คอมไพเลอร์ที่ไม่ได้อธิบาย ความล้มเหลว (XC8-2367) เมื่อทำงานบนแพลตฟอร์ม Windows ที่มีการตั้งค่าไดเร็กทอรีชั่วคราวของระบบเป็นพาธที่มีจุด '.' อักขระ คอมไพเลอร์อาจล้มเหลวในการดำเนินการ
5.8. เวอร์ชัน 2.30
ป้ายกำกับสากลถูกใส่ผิดที่หลังจากการสรุป (XC8-2299) รหัสแอสเซมบลีที่เขียนด้วยมือซึ่งวางฉลากส่วนกลางไว้ในลำดับแอสเซมบลีที่แยกตัวประกอบโดยขั้นตอนที่เป็นนามธรรมอาจไม่ได้รับการเปลี่ยนตำแหน่งอย่างถูกต้อง
ความผิดพลาดที่ผ่อนคลาย (XC8-2287) การใช้อ็อพชัน -mrelax อาจทำให้ตัวเชื่อมโยงหยุดทำงานเมื่อการปรับแต่งการคลายการข้ามแบบหางข้ามพยายามลบคำสั่ง ret ที่ไม่ได้อยู่ที่ส่วนท้ายของส่วน
เกิดข้อผิดพลาดเมื่อปรับป้ายกำกับให้เหมาะสมเป็นค่า (XC8-2282) โค้ดที่ใช้ส่วนขยายภาษา GNU C ของ "ป้ายกำกับเป็นค่า" อาจทำให้การปรับให้เหมาะสมตามขั้นตอนที่เป็นนามธรรมขัดข้อง โดยมีข้อผิดพลาดในการแก้ไขช่วง VMA ที่สรุปไว้
ไม่คงที่ (XC8-2271) ต้นแบบสำหรับ st rstr ( ) และฟังก์ชันอื่นๆ จาก ไม่ระบุตัวระบุ const ที่ไม่ได้มาตรฐานบนตัวชี้สตริงที่ส่งคืนอีกต่อไปเมื่อคุณลักษณะ -mconst-data-inprogmem ถูกปิดใช้งาน โปรดทราบว่าด้วยอุปกรณ์ avrxmega3 และ avrtiny คุณลักษณะนี้จะเปิดใช้งานอย่างถาวร
สูญเสีย initializers (XC8-2269) เมื่อมากกว่า ตัวแปรหนึ่งตัวในหน่วยการแปลถูกวางไว้ในส่วน (โดยใช้ _section หรือ _attribute_ ( (ส่วน) )) และตัวแปรดังกล่าวตัวแรกมีการกำหนดค่าเริ่มต้นเป็นศูนย์หรือไม่มีตัวเริ่มต้น ซึ่งเป็นตัวเริ่มต้นสำหรับตัวแปรอื่นๆ ในหน่วยการแปลเดียวกันที่วางไว้ ในส่วนเดียวกันหายไป
5.1. เวอร์ชัน 2.29 (รุ่นความปลอดภัยการทำงาน)
ไม่มี.
5.2. เวอร์ชัน 2.20
เกิดข้อผิดพลาดกับคำสั่งที่ยาว (XC8-1983) เมื่อใช้ AVR เป้าหมาย คอมไพเลอร์อาจหยุดทำงานด้วย a file ไม่พบข้อผิดพลาด หากบรรทัดคำสั่งมีขนาดใหญ่มากและมีอักขระพิเศษ เช่น เครื่องหมายอัญประกาศ แบ็กสแลช เป็นต้น
ส่วน Rodata ที่ไม่ได้กำหนด (XC8-1920) ตัวเชื่อมโยง AVR ล้มเหลวในการกำหนดหน่วยความจำสำหรับส่วน rodata แบบกำหนดเองเมื่อสร้างสำหรับสถาปัตยกรรม avrxmega3 และ avrtiny ซึ่งอาจทำให้เกิดข้อผิดพลาดการทับซ้อนของหน่วยความจำ
5.3. เวอร์ชัน 2.19 (รุ่นความปลอดภัยการทำงาน)
ไม่มี.
5.4. เวอร์ชัน 2.10
การย้ายถิ่นฐานล้มเหลว (XC8-1891) ตัวจัดสรรที่เหมาะสมที่สุดคือการทิ้ง 'รู' ของหน่วยความจำไว้ระหว่างส่วนต่าง ๆ หลังจากตัวเชื่อมโยงคลายตัว นอกเหนือจากการแยกส่วนหน่วยความจำแล้ว สิ่งนี้ยังเพิ่มความเป็นไปได้ที่จะมีความล้มเหลวในการย้ายตำแหน่งของลิงเกอร์ที่เกี่ยวข้องกับการกระโดดที่สัมพันธ์กันของพีซีหรือการเรียกที่อยู่นอกระยะ
คำแนะนำไม่ได้ถูกเปลี่ยนโดยการผ่อนคลาย (XC8-1889) การผ่อนคลายของลิงเกอร์ไม่ได้เกิดขึ้นสำหรับการกระโดดหรือการเรียกคำสั่งที่สามารถเข้าถึงเป้าหมายได้หากผ่อนคลาย
หายไป ฟังก์ชันการทำงาน (XC8E-388) หลายคำจำกัดความจาก เช่น clock_div_t และ clock_prescale set () ไม่ได้กำหนดไว้สำหรับอุปกรณ์ รวมถึง ATmega324PB, ATmega328PB, ATtiny441 และ ATtiny841
ไม่มีมาโคร มาโครตัวประมวลผลล่วงหน้า _XC8_MODE_, _XC8_VERS ION, _XC และ _XC8 ไม่ได้ถูกกำหนดโดยอัตโนมัติโดยคอมไพเลอร์ ขณะนี้มีให้บริการแล้ว
5.5. เวอร์ชัน 2.05
ข้อผิดพลาดของคอมไพเลอร์ภายใน (XC8-1822) เมื่อสร้างภายใต้ Windows อาจเกิดข้อผิดพลาดของคอมไพเลอร์ภายในเมื่อปรับรหัสให้เหมาะสม
ตรวจไม่พบ RAM ล้น (XC8-1800, XC8-1796) โปรแกรมที่มี RAM เกินนั้นไม่ถูกตรวจพบโดยคอมไพเลอร์ในบางสถานการณ์ ส่งผลให้รหัสรันไทม์ล้มเหลว
ละเว้นหน่วยความจำแฟลช (XC8-1792) สำหรับอุปกรณ์ avrxmega3 และ avrtiny หน่วยความจำแฟลชบางส่วนอาจไม่ได้ตั้งโปรแกรมโดย MPLAB X ไอดี
ความล้มเหลวในการดำเนินการหลัก (XC8-1788) ในบางสถานการณ์ที่โปรแกรมไม่มีการกำหนดตัวแปรส่วนกลาง โค้ดเริ่มต้นรันไทม์ไม่ออกและฟังก์ชัน main ( ) ไม่สามารถเข้าถึงได้
ข้อมูลหน่วยความจำไม่ถูกต้อง (XC8-1787) สำหรับอุปกรณ์ avrxmega3 และ avrtiny โปรแกรมขนาด avr รายงานว่าข้อมูลแบบอ่านอย่างเดียวใช้ RAM แทนหน่วยความจำของโปรแกรม
อ่านหน่วยความจำโปรแกรมไม่ถูกต้อง (XC8-1783) โครงการที่คอมไพล์สำหรับอุปกรณ์ที่มีหน่วยความจำโปรแกรมที่แมปในพื้นที่ที่อยู่ข้อมูล และที่กำหนดวัตถุโดยใช้มาโคร/แอตทริบิวต์ PROGMEM อาจอ่านวัตถุเหล่านี้จากที่อยู่ที่ไม่ถูกต้อง
ข้อผิดพลาดภายในกับแอตทริบิวต์ (XC8-1773) เกิดข้อผิดพลาดภายในหากคุณกำหนดวัตถุตัวชี้ด้วย
โทเค็น _at () หรือแอตทริบิวต์ () ที่อยู่ระหว่างชื่อพอยน์เตอร์และประเภทที่อ้างอิง เช่นample, ถ่าน *
_at (0x800150) cp; ขณะนี้มีการออกคำเตือนหากพบรหัสดังกล่าว
ล้มเหลวในการดำเนินการหลัก (XC8-1780, XC8-1767, XC8-1754) การใช้ตัวแปร EEPROM หรือกำหนดฟิวส์โดยใช้ config pragma อาจทำให้การเริ่มต้นข้อมูลไม่ถูกต้อง และ/หรือล็อกการทำงานของโปรแกรมในโค้ดเริ่มต้นรันไทม์ ก่อนที่จะไปถึง main ( )
ข้อผิดพลาดของฟิวส์กับอุปกรณ์ขนาดเล็ก (XC8-1778, XC8-1742) อุปกรณ์ attiny4/5/9/ 10/20/40 ระบุความยาวฟิวส์ไม่ถูกต้องในส่วนหัว fileที่นำไปสู่ข้อผิดพลาดของตัวเชื่อมโยงเมื่อพยายามสร้างรหัสที่กำหนดฟิวส์
การแบ่งส่วน ข้อผิดพลาด (XC8-1777) ข้อบกพร่องการแบ่งส่วนเป็นระยะได้รับการแก้ไขแล้ว
แอสเซมเบลอร์ขัดข้อง (XC8-1761) แอสเซมเบลอร์ avr-as อาจขัดข้องเมื่อคอมไพเลอร์ทำงานภายใต้ Ubuntu 18
อ็อบเจกต์ไม่เคลียร์ (XC8-1752) อ็อบเจ็กต์ระยะเวลาการจัดเก็บแบบคงที่ที่ไม่ได้เตรียมใช้งานอาจไม่ถูกล้างโดยรหัสเริ่มต้นรันไทม์
ข้อมูลจำเพาะของอุปกรณ์ที่ขัดแย้งกันถูกละเว้น (XC8-1749) คอมไพเลอร์ไม่ได้สร้างข้อผิดพลาดเมื่อมีการใช้ตัวเลือกข้อมูลจำเพาะของอุปกรณ์หลายตัวและระบุอุปกรณ์ที่แตกต่างกัน
หน่วยความจำเสียหายโดยฮีป (XC8-1748) สัญลักษณ์ _heap_start ตั้งค่าไม่ถูกต้อง ส่งผลให้ตัวแปรธรรมดาเสียหายจากฮีป
ข้อผิดพลาดในการย้ายตำแหน่งลิงเกอร์ (XC8-1739) ข้อผิดพลาดในการย้ายตำแหน่งของลิงเกอร์อาจเกิดขึ้นเมื่อโค้ดมี rjmp หรือ rcall ที่มีเป้าหมายอยู่ห่างออกไป 4k ไบต์พอดี
5.6. เวอร์ชัน 2.00
ไม่มี.
ปัญหาที่ทราบ
ต่อไปนี้คือข้อจำกัดในการทำงานของคอมไพเลอร์ สิ่งเหล่านี้อาจเป็นข้อจำกัดในการเข้ารหัสทั่วไป หรือการเบี่ยงเบนจากข้อมูลที่มีอยู่ในคู่มือผู้ใช้ ป้ายกำกับในวงเล็บในชื่อคือการระบุปัญหาในฐานข้อมูลการติดตาม สิ่งนี้อาจเป็นประโยชน์หากคุณต้องการติดต่อฝ่ายสนับสนุน รายการเหล่านั้นที่ไม่มีป้ายกำกับเป็นข้อจำกัดที่อธิบายถึงตัวดำเนินการของ modi และมีแนวโน้มที่จะมีผลใช้อย่างถาวร
6.1. MPLAB X IDE การบูรณาการ
เอ็มพีแล็บ ไอดี การรวม หากจะใช้คอมไพเลอร์จาก MPLAB IDE คุณต้องติดตั้ง MPLAB IDE ก่อนที่จะติดตั้งคอมไพเลอร์
6.2. การสร้างรหัส
Segfault พร้อมตัวเลือกตัวยึดส่วน (XC8-3045) โปรแกรมที่กำหนดฟังก์ชันด้วยรายการอาร์กิวเมนต์ตัวแปรและที่ใช้ตัวเลือก -fsection-anchors อาจทริกเกอร์ข้อผิดพลาดของคอมไพเลอร์ภายใน: ข้อผิดพลาดของการแบ่งส่วน
แก้ไขข้อบกพร่องข้อมูลไม่ตรงกัน (XC8-2948) เมื่อการเพิ่มประสิทธิภาพการผ่อนคลายลิงเกอร์ลดขนาดคำสั่ง (เช่นampคำแนะนำการโทรไปยัง rcall) การแมปบรรทัดต้นทางกับที่อยู่อาจไม่ยังคงซิงค์กัน เมื่อมีการดำเนินการลดขนาดมากกว่าหนึ่งรายการที่เกิดขึ้นในส่วน
ด้านล่างเช่นampอย่างไรก็ตาม, มีการโทรถึง foo สองครั้งที่จบลงด้วยการโทรหาญาติ.
การจัดสรรหน่วยความจำ PA ล้มเหลว (XC8-2881) เมื่อใช้ตัวเพิ่มประสิทธิภาพขั้นตอนนามธรรม ลิงเกอร์อาจรายงานข้อผิดพลาดในการจัดสรรหน่วยความจำเมื่อขนาดรหัสใกล้เคียงกับจำนวนหน่วยความจำของโปรแกรมที่มีอยู่บนอุปกรณ์ แม้ว่าโปรแกรมควรจะพอดีกับพื้นที่ที่มีอยู่ก็ตาม
ไม่ฉลาดนัก Smart-I0 (XC8-2872) คุณลักษณะ smart-io ของคอมไพเลอร์จะสร้างโค้ดที่ถูกต้องแต่ย่อยไม่ได้สำหรับฟังก์ชัน snprint f หากคุณลักษณะ const-data-in-progmem ถูกปิดใช้งาน หรือหากอุปกรณ์มีการแมปแฟลชทั้งหมดลงในหน่วยความจำข้อมูล
Smart-I0 ที่ฉลาดน้อยลง (XC8-2869) คุณสมบัติ smart-io ของคอมไพเลอร์จะสร้างรหัสที่ถูกต้องแต่ต่ำกว่ามาตรฐานเมื่อใช้ทั้งตัวเลือก -flto และ -fno-builtin
การจัดวางข้อมูลแบบอ่านอย่างเดียวที่ไม่เหมาะสม (XC8-2849) ขณะนี้ตัวเชื่อมโยงไม่รู้จักส่วนหน่วยความจำ APPCODE และ APPDATA หรือส่วน [ไม่มีการอ่านขณะเขียนในแผนผังหน่วยความจำ เป็นผลให้มีโอกาสเล็กน้อยที่ตัวเชื่อมโยงอาจจัดสรรข้อมูลแบบอ่านอย่างเดียวในพื้นที่หน่วยความจำที่ไม่เหมาะสม โอกาสที่ข้อมูลที่ใส่ผิดที่จะเพิ่มขึ้นหากเปิดใช้งานคุณลักษณะ const-data-in-progmem โดยเฉพาะอย่างยิ่งหากเปิดใช้งานคุณลักษณะ const-data-in-config-mapped-progmem ด้วย คุณลักษณะเหล่านี้สามารถปิดใช้งานได้หากจำเป็น
วัตถุ file ใบสั่งประมวลผล (XC8-2863) ลำดับที่วัตถุ files จะถูกประมวลผลโดยตัวเชื่อมโยงอาจแตกต่างกันไปตามการใช้การปรับให้เหมาะสมขั้นตอนที่เป็นนามธรรม (ตัวเลือก -mpa) สิ่งนี้จะมีผลเฉพาะโค้ดที่กำหนดฟังก์ชันที่อ่อนแอในหลายโมดูล
ข้อผิดพลาดของตัวเชื่อมโยงแบบสัมบูรณ์ (XC8-2777) เมื่ออ็อบเจ็กต์ถูกทำให้สมบูรณ์ที่แอดเดรสที่จุดเริ่มต้นของ RAM และอ็อบเจ็กต์ที่ไม่ได้เตรียมใช้งานยังได้รับการกำหนด ข้อผิดพลาดของลิงเกอร์อาจถูกทริกเกอร์
รหัสปลุกสั้น (XC8-2775) สำหรับอุปกรณ์ ATA5700/2 การลงทะเบียน PHIDO/1 ถูกกำหนดให้มีความกว้าง 16 บิตเท่านั้น แทนที่จะเป็นความกว้าง 32 บิต
Linker ขัดข้องเมื่อเรียกสัญลักษณ์ (XC8-2758) ตัวเชื่อมโยงอาจมีปัญหาหากใช้ตัวเลือกไดรเวอร์ -mrelax เมื่อซอร์สโค้ดเรียกสัญลักษณ์ที่กำหนดโดยใช้ตัวเลือกตัวเชื่อมโยง -cc., –de f sym
การเริ่มต้นไม่ถูกต้อง (XC8-2679) เป็นความคลาดเคลื่อนระหว่างตำแหน่งที่ค่าเริ่มต้นสำหรับอ็อบเจ็กต์ขนาดโกลบอล/สแตติกบางตัวถูกวางไว้ในหน่วยความจำข้อมูล และตำแหน่งที่ตัวแปรจะถูกเข้าถึงขณะรันไทม์
การเรียกใช้ฟังก์ชันทางอ้อมไม่ถูกต้อง (XC8-2628) ในบางกรณี การเรียกใช้ฟังก์ชันที่ทำผ่านตัวชี้ฟังก์ชันที่เก็บไว้เป็นส่วนหนึ่งของโครงสร้างอาจล้มเหลว
strtof คืนค่าศูนย์สำหรับเลขฐานสิบหกทศนิยม (XC8-2626) ฟังก์ชันไลบรารี strtof et al และ scanf ( ) et al จะแปลงเลขทศนิยมฐานสิบหกที่ไม่ได้ระบุเลขชี้กำลังเป็นศูนย์เสมอ สำหรับอดีตampเลอ:
strtof (“Oxl”, &endptr);
จะคืนค่าเป็น 0 ไม่ใช่ I
การส่งข้อความที่ปรึกษาสแต็กไม่ถูกต้อง (XC8-2542, XC8-2541) ในบางกรณี คำเตือนของที่ปรึกษาสแต็กเกี่ยวกับการเรียกซ้ำหรือสแต็กที่ไม่แน่นอนที่ใช้ (อาจผ่านการใช้ alloca()) จะไม่ถูกปล่อยออกมา
ล้มเหลวด้วยรหัสขัดจังหวะที่ซ้ำกัน (XC8-2421) ในกรณีที่ฟังก์ชันอินเตอร์รัปต์มากกว่าหนึ่งฟังก์ชันมีเนื้อความเดียวกัน คอมไพลเลอร์อาจมีเอาต์พุตสำหรับฟังก์ชันอินเตอร์รัปต์หนึ่งเรียกอีกฟังก์ชันหนึ่ง การดำเนินการนี้จะส่งผลให้มีการบันทึกการลงทะเบียนการโทรที่ถูกบล็อกโดยไม่จำเป็น และการขัดจังหวะจะถูกเปิดใช้งานก่อนที่บทส่งท้ายของตัวจัดการการขัดจังหวะปัจจุบันจะทำงาน ซึ่งอาจนำไปสู่ความล้มเหลวของรหัส
เอาต์พุตไม่ถูกต้องพร้อมเส้นทาง DFP ที่ไม่ถูกต้อง (XC8-2376) หากเรียกใช้คอมไพเลอร์ด้วยเส้นทาง DFP และ 'ข้อมูลจำเพาะ' ที่ไม่ถูกต้อง file มีอยู่สำหรับอุปกรณ์ที่เลือก คอมไพลเลอร์ไม่ได้รายงานชุดอุปกรณ์ตระกูลที่ขาดหายไป และเลือก 'ข้อมูลจำเพาะ' แทน fileซึ่งอาจนำไปสู่ผลลัพธ์ที่ไม่ถูกต้อง 'ข้อมูลจำเพาะ' files อาจไม่ทันสมัยกับ DFP แบบกระจาย และมีไว้สำหรับใช้กับการทดสอบคอมไพเลอร์ภายในเท่านั้น
ตรวจไม่พบการทับซ้อนของหน่วยความจำ (XC8-1966) คอมไพเลอร์ตรวจไม่พบการทับซ้อนของหน่วยความจำของอ็อบเจ็กต์ที่สร้างแบบสัมบูรณ์ที่แอดเดรส (ผ่าน _at ( )) และอ็อบเจ็กต์อื่นๆ ที่ใช้ตัวระบุส่วน ( ) และที่เชื่อมโยงกับแอดเดรสเดียวกัน
ความล้มเหลวกับฟังก์ชันไลบรารีและ _memx (XC8-1763) ฟังก์ชัน libgcc float ที่เรียกโดยมีข้อโต้แย้งในพื้นที่ที่อยู่ memx อาจล้มเหลว โปรดทราบว่ารูทีนของไลบรารีถูกเรียกใช้จากตัวดำเนินการ C บางตัว เช่นample รหัสต่อไปนี้ได้รับผลกระทบ:
ส่งคืน regFloatVar > memxFloatVar;
การใช้งาน libgcc ที่จำกัด (AVRTC-731) สำหรับผลิตภัณฑ์ ATTiny4/5/9/10/20/40 การใช้งานไลบรารี C / Math มาตรฐานใน libgcc นั้นจำกัดมากหรือไม่มีเลย
ข้อจำกัดของหน่วยความจำโปรแกรม (AVRTC-732) อิมเมจหน่วยความจำของโปรแกรมที่เกิน 128 kb ได้รับการสนับสนุนโดย toolchain; อย่างไรก็ตาม มีกรณีที่ทราบกันดีอยู่แล้วว่าตัวเชื่อมโยงยกเลิกโดยไม่มีการผ่อนคลายและไม่มีข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์ แทนที่จะสร้าง stubs ของฟังก์ชันที่จำเป็นเมื่อใช้อ็อพชัน -mre lax
ข้อจำกัดของเนมสเปซ (AVRTC-733) ช่องว่างที่อยู่ที่มีชื่อได้รับการสนับสนุนโดย toolchain ภายใต้ข้อจำกัดที่กล่าวถึงในส่วนคู่มือผู้ใช้ Special Type Qualifiers
โซนเวลา The ฟังก์ชันไลบรารีถือว่า GMT และไม่รองรับโซนเวลาท้องถิ่น ดังนั้น localtime ( ) จะส่งกลับเวลาเดียวกับ gmtime ( ) เช่นampเล.
file://Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm
เอกสาร / แหล่งข้อมูล
![]() |
MICROCHIP MPLAB XC8 C ซอฟต์แวร์พัฒนาคอมไพเลอร์ [พีดีเอฟ] คู่มือเจ้าของ MPLAB XC8 C, MPLAB XC8 C ซอฟต์แวร์พัฒนาคอมไพเลอร์, ซอฟต์แวร์พัฒนาคอมไพเลอร์, ซอฟต์แวร์พัฒนา, ซอฟต์แวร์ |