ໂລໂກ້ MICROCHIPMPLAB® XC8 C Compiler Version 2.41 Release Notes ສໍາລັບ AVR® MCU
ຄູ່ມືເຈົ້າຂອງ

MPLAB XC8 C Compiler ຊອບແວພັດທະນາ

ເອກະສານນີ້ມີຂໍ້ມູນສຳຄັນທີ່ກ່ຽວຂ້ອງກັບເຄື່ອງສັງລວມ MPLAB XC8 C ເມື່ອຕັ້ງເປົ້າໝາຍອຸປະກອນໄມໂຄຣຊິບ AVR.
ກະ​ລຸ​ນາ​ອ່ານ​ມັນ​ກ່ອນ​ທີ່​ຈະ​ແລ່ນ​ຊອບ​ແວ​ນີ້​. ເບິ່ງບັນທຶກການປ່ອຍຕົວລວບລວມຂໍ້ມູນ MPLAB XC8 ສໍາລັບເອກະສານ PIC ຖ້າທ່ານໃຊ້ເຄື່ອງລວບລວມຂໍ້ມູນສໍາລັບອຸປະກອນ PIC 8-BIT.

ເກີນview

1.1. ບົດແນະນຳ
ການປ່ອຍຕົວສັງລວມຂອງ Microchip MPLAB® XC8 C ນີ້ມີຄຸນສົມບັດ ແລະ ແກ້ໄຂຂໍ້ບົກພ່ອງໃໝ່ຫຼາຍຢ່າງ.
1.2. ວັນທີສ້າງ
ວັນທີສ້າງຢ່າງເປັນທາງການຂອງສະບັບ compiler ນີ້ແມ່ນວັນທີ 8 ກຸມພາ 2023.
1.3. ລຸ້ນກ່ອນໜ້າ
MPLAB XC8 C compiler ຮຸ່ນກ່ອນຫນ້າແມ່ນ 2.40 ສ້າງໃນວັນທີ 3 ກໍລະກົດ 2022.
1.4. ຄູ່ມືຄວາມປອດໄພໃນການເຮັດວຽກ
ຄູ່ມືຄວາມປອດໄພທີ່ໃຊ້ໄດ້ສໍາລັບ MPLAB XC compilers ແມ່ນມີຢູ່ໃນຊຸດເອກະສານໃນເວລາທີ່ທ່ານຊື້ໃບອະນຸຍາດຄວາມປອດໄພທີ່ເປັນປະໂຫຍດ.
1.5. ໃບອະນຸຍາດອົງປະກອບ ແລະສະບັບ
MPLAB XC8 C Compiler ສໍາລັບເຄື່ອງມື AVR MCUs ໄດ້ຖືກຂຽນແລະແຈກຢາຍພາຍໃຕ້ໃບອະນຸຍາດສາທາລະນະທົ່ວໄປ GNU (GPL) ຊຶ່ງຫມາຍຄວາມວ່າລະຫັດແຫຼ່ງຂອງມັນຖືກແຈກຢາຍຢ່າງບໍ່ເສຍຄ່າແລະມີໃຫ້ສາທາລະນະຊົນ.
ລະຫັດແຫຼ່ງຂອງເຄື່ອງມືພາຍໃຕ້ GNU GPL ອາດຈະຖືກດາວໂຫຼດແຍກຕ່າງຫາກຈາກ Microchip's webເວັບໄຊ. ທ່ານອາດຈະອ່ານ GNU GPL ໃນໄຟລ໌ທີ່ມີຊື່ຕັ້ງຢູ່ໃນໄດເລກະທໍລີຍ່ອຍຂອງລາຍຊື່ການຕິດຕັ້ງ license.txt avr/doc ຂອງທ່ານ. ການສົນທະນາທົ່ວໄປກ່ຽວກັບຫຼັກການພື້ນຖານຂອງ GPL ອາດຈະພົບເຫັນຢູ່ທີ່ນີ້.
ລະຫັດສະຫນັບສະຫນູນທີ່ສະຫນອງໃຫ້ສໍາລັບ header ໄຟລ໌, linker scripts, ແລະ runtime libraries ແມ່ນລະຫັດເປັນເຈົ້າຂອງແລະບໍ່ໄດ້ກວມເອົາພາຍໃຕ້ GPL.
compiler ນີ້ແມ່ນການຈັດຕັ້ງປະຕິບັດ GCC ເວີຊັນ 5.4.0, binutils ເວີຊັນ 2.26, ແລະໃຊ້ avr-libc ເວີຊັນ 2.0.0.
1.6. ຄວາມຕ້ອງການລະບົບ
MPLAB XC8 C compiler ແລະຊອບແວການອະນຸຍາດທີ່ມັນໃຊ້ແມ່ນມີໃຫ້ສໍາລັບຫຼາຍໆລະບົບປະຕິບັດການ, ລວມທັງຮຸ່ນ 64-bit ຂອງຕໍ່ໄປນີ້: ສະບັບມືອາຊີບຂອງ Microsoft® Windows® 10; Ubuntu® 18.04; ແລະ macOS® 10.15.5. Binaries ສໍາລັບ Windows ໄດ້ຖືກເຊັນລະຫັດ. Binaries ສໍາລັບ macOS ໄດ້ຖືກເຊັນລະຫັດແລະ notarized. MPLAB XC Network License Server ສາມາດໃຊ້ໄດ້ສໍາລັບລະບົບປະຕິບັດການ 64-bit, ລວມທັງ Microsoft Windows 10 ຂຶ້ນໄປ; Ubuntu 18.04 ແລະສູງກວ່າ; ຫຼື macOS 10.15 ແລະສູງກວ່າ. ເຊີບເວີອາດຈະແລ່ນຢູ່ໃນລະບົບປະຕິບັດການອື່ນໆລວມທັງ Windows Server, Linux distributions, ເຊັ່ນ: Oracle® Enterprise Linux® ແລະ Red Hate Enterprise Linux ເຊັ່ນດຽວກັນກັບລະບົບປະຕິບັດການທີ່ສະຫນັບສະຫນູນຮຸ່ນເກົ່າ. ຢ່າງໃດກໍ່ຕາມ, MPLAB XC Network License Server ບໍ່ໄດ້ຖືກທົດສອບໃນລະບົບປະຕິບັດການເຫຼົ່ານີ້. ເຊີບເວີໃບອະນຸຍາດເຄືອຂ່າຍ MPLAB XC ສາມາດເປີດໃຊ້ໄດ້ໃນ Virtual Machines ຂອງ OS ທີ່ຮອງຮັບໂດຍໃຊ້ໃບອະນຸຍາດເຄື່ອງ virtual ສໍາລັບໃບອະນຸຍາດເຄືອຂ່າຍ (SW006021-VM). ເວີຊັ່ນ 32-bit ທັງໝົດຂອງ MPLAB XC Network Server ແມ່ນຢຸດເຊົາເລີ່ມຈາກເວີຊັ່ນ 3.00.
ອຸປະກອນທີ່ຮອງຮັບ
compiler ນີ້ສະຫນັບສະຫນູນອຸປະກອນ 8-bit AVR MCU ທັງຫມົດທີ່ມີຢູ່ໃນເວລາທີ່ປ່ອຍ. ເບິ່ງ (ຢູ່ໃນໄດເລກະທໍລີຂອງຜູ້ລວບລວມຂໍ້ມູນ) ສໍາລັບບັນຊີລາຍຊື່ຂອງອຸປະກອນທີ່ສະຫນັບສະຫນູນທັງຫມົດ. ໄຟລ໌ເຫຼົ່ານີ້ຍັງມີລາຍຊື່
avr_chipinfo.html doc configuration bit settings ສໍາລັບແຕ່ລະອຸປະກອນ.

1.7. ສະບັບ ແລະ ການຍົກລະດັບໃບອະນຸຍາດ
ຕົວສັງລວມ MPLAB XC8 ສາມາດເປີດໃຊ້ໄດ້ເປັນຜະລິດຕະພັນທີ່ມີໃບອະນຸຍາດ (PRO) ຫຼືບໍ່ມີໃບອະນຸຍາດ (ຟຣີ). ທ່ານຈໍາເປັນຕ້ອງໄດ້ຊື້ກະແຈການເປີດໃຊ້ງານເພື່ອອະນຸຍາດ compiler ຂອງທ່ານ. ໃບອະນຸຍາດອະນຸຍາດໃຫ້ມີລະດັບການເພີ່ມປະສິດທິພາບສູງກວ່າເມື່ອທຽບກັບຜະລິດຕະພັນຟຣີ. ການລວບລວມຂໍ້ມູນທີ່ບໍ່ມີໃບອະນຸຍາດສາມາດດໍາເນີນການໄດ້ຢ່າງບໍ່ມີກໍານົດໂດຍບໍ່ມີໃບອະນຸຍາດ. ຄອມພີວເຊີຄວາມປອດໄພຟັງຊັນ MPLAB XC8 ຕ້ອງໄດ້ຮັບການເປີດໃຊ້ງານດ້ວຍໃບອະນຸຍາດຄວາມປອດໄພທີ່ໃຊ້ໄດ້ທີ່ຊື້ຈາກໄມໂຄຊິບ. compiler ຈະບໍ່ດໍາເນີນການໂດຍບໍ່ມີໃບອະນຸຍາດນີ້. ເມື່ອເປີດໃຊ້ແລ້ວ, ທ່ານສາມາດເລືອກລະດັບການເພີ່ມປະສິດທິພາບໃດໆແລະນໍາໃຊ້ຄຸນສົມບັດການລວບລວມຂໍ້ມູນທັງຫມົດ. ລຸ້ນນີ້ຂອງ MPLAB XC Functional Safety Compiler ຮອງຮັບ Network Server License.
ເບິ່ງເອກະສານການຕິດຕັ້ງ ແລະໃບອະນຸຍາດ MPLAB XC C Compilers (DS50002059) ສໍາລັບຂໍ້ມູນກ່ຽວກັບປະເພດໃບອະນຸຍາດ ແລະການຕິດຕັ້ງ compiler ທີ່ມີໃບອະນຸຍາດ.

1.8. ການຕິດຕັ້ງແລະເປີດໃຊ້ງານ
ເບິ່ງພາກສ່ວນບັນຫາການຍ້າຍຖິ່ນຖານ ແລະຂໍ້ຈຳກັດສຳລັບຂໍ້ມູນສຳຄັນກ່ຽວກັບຕົວຈັດການໃບອະນຸຍາດຫຼ້າສຸດທີ່ລວມຢູ່ໃນຄອມພີວເຕີນີ້.
ຖ້າໃຊ້ MPLAB IDE, ໃຫ້ແນ່ໃຈວ່າຈະຕິດຕັ້ງ MPLAB X IDE ເວີຊັນ 5.0 ຫຼືໃໝ່ກວ່ານັ້ນ ກ່ອນທີ່ຈະຕິດຕັ້ງເຄື່ອງມືນີ້. ອອກຈາກ IDE ກ່ອນທີ່ຈະຕິດຕັ້ງ compiler. ດໍາເນີນການ (Windows), (Linux) ຫຼື (macOS).exe .run .app compiler ຄໍາຮ້ອງສະຫມັກການຕິດຕັ້ງ, e.g. ແລະປະຕິບັດຕາມທິດທາງໃນຫນ້າຈໍ. XC8-1.00.11403-windows.exe ໄດເລກະທໍລີການຕິດຕັ້ງເລີ່ມຕົ້ນແມ່ນແນະນໍາ. ຖ້າທ່ານກໍາລັງໃຊ້ Linux, ທ່ານຕ້ອງຕິດຕັ້ງ compiler ໂດຍໃຊ້ terminal ແລະຈາກບັນຊີຮາກ. ຕິດຕັ້ງໂດຍໃຊ້ບັນຊີ macOS ທີ່ມີສິດທິຂອງຜູ້ເບິ່ງແຍງລະບົບ.
ຕອນນີ້ການເປີດໃຊ້ງານໄດ້ຖືກປະຕິບັດແຍກຕ່າງຫາກເພື່ອຕິດຕັ້ງ. ເບິ່ງຕົວຈັດການໃບອະນຸຍາດເອກະສານສໍາລັບMPLAB® XC C Compilers (DS52059) ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ.
ຖ້າທ່ານເລືອກທີ່ຈະດໍາເນີນການລວບລວມຂໍ້ມູນພາຍໃຕ້ໃບອະນຸຍາດການປະເມີນຜົນ, ຕອນນີ້ທ່ານຈະໄດ້ຮັບຄໍາເຕືອນໃນລະຫວ່າງການລວບລວມຂໍ້ມູນໃນເວລາທີ່ທ່ານຢູ່ໃນ 14 ມື້ຫຼັງຈາກສິ້ນສຸດໄລຍະເວລາການປະເມີນຜົນຂອງທ່ານ. ການເຕືອນໄພດຽວກັນແມ່ນອອກຖ້າທ່ານພາຍໃນ 14 ມື້ຫຼັງຈາກສິ້ນສຸດການເປັນສະມາຊິກ HPA ຂອງທ່ານ.
ເຄື່ອງແມ່ຂ່າຍໃບອະນຸຍາດເຄືອຂ່າຍ XC ແມ່ນຕົວຕິດຕັ້ງແຍກຕ່າງຫາກແລະບໍ່ໄດ້ລວມຢູ່ໃນຕົວຕິດຕັ້ງ compiler ຜູ້ໃຊ້ດຽວ.
ຕອນນີ້ຕົວຈັດການໃບອະນຸຍາດ XC ຮອງຮັບການໂຣມມິງຂອງໃບອະນຸຍາດເຄືອຂ່າຍທີ່ເລື່ອນໄດ້. ແນໃສ່ຜູ້ໃຊ້ມືຖື, ຄຸນສົມບັດນີ້ອະນຸຍາດໃຫ້ໃບອະນຸຍາດທີ່ເລື່ອນໄດ້ທີ່ຈະປິດເຄືອຂ່າຍເປັນເວລາສັ້ນໆ. ການນໍາໃຊ້ຄຸນສົມບັດນີ້, ທ່ານສາມາດຕັດການເຊື່ອມຕໍ່ຈາກເຄືອຂ່າຍແລະຍັງໃຊ້ MPLAB XC compiler ຂອງທ່ານ. ເບິ່ງໂຟນເດີເອກະສານຂອງການຕິດຕັ້ງ XCLM ສໍາລັບຄຸນສົມບັດນີ້.
MPLAB X IDE ປະກອບມີປ່ອງຢ້ຽມໃບອະນຸຍາດ (ເຄື່ອງມື > ໃບອະນຸຍາດ) ເພື່ອຈັດການການໂຣມມິງດ້ວຍສາຍຕາ.

1.8.1. ແກ້ໄຂບັນຫາການຕິດຕັ້ງ
ຖ້າ​ຫາກ​ທ່ານ​ມີ​ຄວາມ​ຫຍຸ້ງ​ຍາກ​ໃນ​ການ​ຕິດ​ຕັ້ງ compiler ພາຍ​ໃຕ້​ການ​ໃດ​ຫນຶ່ງ​ຂອງ​ລະ​ບົບ​ປະ​ຕິ​ບັດ​ການ Windows​, ໃຫ້​ພະ​ຍາ​ຍາມ​ຄໍາ​ແນະ​ນໍາ​ດັ່ງ​ຕໍ່​ໄປ​ນີ້​.
ດໍາເນີນການຕິດຕັ້ງເປັນຜູ້ບໍລິຫານ.
ຕັ້ງຄ່າການອະນຸຍາດຂອງແອັບພລິເຄຊັນຕິດຕັ້ງເປັນ 'ການຄວບຄຸມເຕັມ'. (ຄລິກຂວາໃສ່ໄຟລ໌, ເລືອກຄຸນສົມບັດ, ແຖບຄວາມປອດໄພ, ເລືອກຜູ້ໃຊ້, ແກ້ໄຂ.)
ຕັ້ງຄ່າການອະນຸຍາດຂອງ temp folder ເປັນ 'Full Control'.
ເພື່ອກໍານົດທີ່ຕັ້ງຂອງໂຟເດີ temp, ພິມ %temp% ໃສ່ຄໍາສັ່ງ Run (Windows logo key + R).
ນີ້ຈະເປີດກ່ອງໂຕ້ຕອບ explorer ໄຟລ໌ທີ່ສະແດງໄດເລກະທໍລີນັ້ນແລະຈະຊ່ວຍໃຫ້ທ່ານສາມາດກໍານົດເສັ້ນທາງຂອງໂຟນເດີນັ້ນ.
1.9. ເອກະສານປະກອບ
ຄໍາແນະນໍາຂອງຜູ້ໃຊ້ compiler ສາມາດເປີດໄດ້ຈາກຫນ້າ HTML ທີ່ເປີດຢູ່ໃນຕົວທ່ອງເວັບຂອງທ່ານໃນເວລາທີ່ຄລິກໃສ່ປຸ່ມການຊ່ວຍເຫຼືອສີຟ້າໃນ dashboard MPLAB X IDE, ຕາມທີ່ລະບຸໄວ້ໃນ screenshot.

ຖ້າທ່ານກໍາລັງສ້າງສໍາລັບເປົ້າຫມາຍ AVR 8-bit, ຄູ່ມືຜູ້ໃຊ້ MPLAB® XC8 C Compiler ສໍາລັບ AVR® MCU ປະກອບມີຂໍ້ມູນກ່ຽວກັບທາງເລືອກ compiler ເຫຼົ່ານັ້ນແລະລັກສະນະຕ່າງໆທີ່ໃຊ້ກັບສະຖາປັດຕະຍະກໍານີ້.

MICROCHIP MPLAB XC8 C Compiler ຊອບແວພັດທະນາ -

1.10.ການຊ່ວຍເຫຼືອລູກຄ້າ
ໄມໂຄຣຊິບຍິນດີຕ້ອນຮັບລາຍງານຂໍ້ບົກພ່ອງ, ຄຳແນະນຳ ຫຼືຄຳຄິດເຫັນກ່ຽວກັບສະບັບຄອມພີວເລີນີ້. ກະ​ລຸ​ນາ​ຊີ້​ນໍາ​ການ​ລາຍ​ງານ bug ຫຼື​ການ​ຮ້ອງ​ຂໍ​ຄຸນ​ນະ​ສົມ​ບັດ​ໂດຍ​ຜ່ານ​ລະ​ບົບ​ການ​ສະ​ຫນັບ​ສະ​ຫນູນ​.

ການປັບປຸງເອກະສານ

ສໍາລັບເອກະສານ MPLAB XC8 ສະບັບອອນໄລນ໌ ແລະຫຼ້າສຸດ, ກະລຸນາເຂົ້າໄປເບິ່ງເອກະສານທາງວິຊາການອອນໄລນ໌ຂອງ Microchip webເວັບໄຊ. ເອກະສານ AVR ໃໝ່ ຫຼືສະບັບປັບປຸງໃນລຸ້ນນີ້:

  • ຄູ່ມືຜູ້ໃຊ້ MPLAB® XC8 C Compiler ສໍາລັບ AVR® MCU (ສະບັບປັບປຸງ G)
  • AVR® GNU Toolchain toMPLAB® XC8 ຄູ່ມືການຍົກຍ້າຍ (ສະບັບປັບປຸງ A)
  • ຄູ່ມືຜູ້ໃຊ້ Hexmate (ສະບັບປັບປຸງ B)

AVR® GNU Toolchain to MPLAB® XC8 Migration Guide ອະທິບາຍການປ່ຽນແປງຂອງ source code ແລະ build options ທີ່ອາດຈະຕ້ອງການ ຖ້າທ່ານຕັດສິນໃຈຍ້າຍໂຄງການ C-based ຈາກ AVR 8-bit GNU Toolchain ໄປຫາ Microchip MPLAB XC8 C Compiler. ຄູ່ມືອ້າງອິງມາດຕະຖານຫ້ອງສະໝຸດ Microchip Unified ອະທິບາຍເຖິງພຶດຕິກຳຂອງ ແລະການໂຕ້ຕອບກັບໜ້າທີ່ທີ່ກຳນົດໄວ້ໂດຍຫ້ອງສະໝຸດມາດຕະຖານໄມໂຄຊິບ ຮວມເຖິງການນຳໃຊ້ປະເພດຫ້ອງສະໝຸດ ແລະມະຫາພາກ. ຂໍ້ມູນນີ້ບາງອັນໃນເມື່ອກ່ອນມີຢູ່ໃນຄູ່ມືຜູ້ໃຊ້ MPLAB® XC8 C Compiler ສໍາລັບ AVR® MCU. ຂໍ້ມູນຫ້ອງສະໝຸດສະເພາະອຸປະກອນຍັງມີຢູ່ໃນຄູ່ມື compiler ນີ້.
ຖ້າທ່ານພຽງແຕ່ເລີ່ມຕົ້ນດ້ວຍອຸປະກອນ 8-bit ແລະ MPLAB XC8 C Compiler, ຄູ່ມືຜູ້ໃຊ້MPLAB® XC8 ສໍາລັບ Embedded Engineers – AVR® MCUs (DS50003108) ມີຂໍ້ມູນກ່ຽວກັບການຕັ້ງຄ່າໂຄງການໃນ MPLAB X IDE ແລະການຂຽນລະຫັດສໍາລັບທ່ານ. ໂຄງການ MPLAB XC8 C ທໍາອິດ. ຄູ່ມືນີ້ໄດ້ຖືກແຈກຢາຍໃນປັດຈຸບັນກັບ compiler.
ຄູ່ມືຜູ້ໃຊ້ Hexmate ມີຈຸດປະສົງສໍາລັບຜູ້ທີ່ໃຊ້ Hexmate ເປັນແອັບພລິເຄຊັນດຽວ.

ມີຫຍັງໃໝ່

ຕໍ່ໄປນີ້ແມ່ນລັກສະນະເປົ້າຫມາຍ AVR ໃຫມ່ທີ່ compiler ສະຫນັບສະຫນູນໃນປັດຈຸບັນ. ໝາຍເລກເວີຊັນໃນຫົວຂໍ້ຍ່ອຍສະແດງເຖິງລຸ້ນ compiler ທຳອິດເພື່ອຮອງຮັບຄຸນສົມບັດທີ່ປະຕິບັດຕາມ.
3.1. ລຸ້ນ 2.41
ຮອງຮັບ Bootrow (XC8-3053) compiler ຈະຈັດວາງເນື້ອຫາຂອງພາກສ່ວນໃດນຶ່ງທີ່ມີ prefix at.bootrow address 0x860000 ໃນໄຟລ໌ HEX. ພາກສ່ວນເຫຼົ່ານີ້ຖືກນໍາໃຊ້ສໍາລັບຫນ່ວຍຄວາມຈໍາ BOOTROW, ເຊິ່ງຖືກອອກແບບມາສໍາລັບການເກັບຮັກສາກະແຈແລະຂໍ້ມູນທີ່ປອດໄພອື່ນໆທີ່ຄວນຈະເຂົ້າເຖິງໄດ້ກັບ bootloader ເທົ່ານັ້ນ.

ການລົບລ້າງການກັບຄືນມາຊ້ຳຊ້ອນ (XC8-3048) ຕອນນີ້ຕົວລວບລວມຂໍ້ມູນຈະກໍາຈັດຄໍາແນະນໍາທີ່ຊໍ້າຊ້ອນໃນຫນ້າທີ່ ret ດ້ວຍການກະໂດດຫາງເມື່ອໃຊ້ຕົວເຊື່ອມຕໍ່ແບບກຳນົດເອງ. ນີ້ແມ່ນການເພີ່ມປະສິດທິພາບທີ່ຄ້າຍຄືກັນກັບສິ່ງທີ່ປະຕິບັດໃນເມື່ອກ່ອນ, ແຕ່ມັນໄດ້ຖືກປະຕິບັດໃນທຸກພາກສ່ວນທີ່ເດັກກໍາພ້າ, ເຖິງແມ່ນວ່າຕົວເຊື່ອມຕໍ່ແບບກໍານົດເອງຖືກນໍາໃຊ້ແລະໂຄງການຈັດສັນທີ່ເຫມາະສົມທີ່ດີທີ່ສຸດບໍ່ໄດ້ຢູ່ໃນການຫຼິ້ນ. ການປ່ຽນແປງປະເພດເວລາ (XC8-2982, 2932) ປະເພດຫ້ອງສະຫມຸດມາດຕະຖານ C99, ໄດ້ຖືກປ່ຽນຈາກ time_t ເປັນປະເພດ, ເຊິ່ງເຮັດໃຫ້ການປັບປຸງຂະຫນາດລະຫັດໃນບາງຫນ້າທີ່ຍາວທີ່ກ່ຽວຂ້ອງກັບເວລາ, ເຊັ່ນ:. unsigned long mktime()
New nop (XC8-2946, 2945) macro ໄດ້ຖືກເພີ່ມໃສ່. ມະຫາພາກນີ້ແຊກ no- NOP() nop ຄໍາແນະນໍາການດໍາເນີນງານເຂົ້າໄປໃນຜົນຜະລິດ.
ອັບເດດເປັນ XCLM (XC8-2944) ຜູ້ຈັດການໃບອະນຸຍາດທີ່ໃຊ້ກັບ compiler ໄດ້ຖືກປັບປຸງແລ້ວ ແລະຕອນນີ້ມີການຕອບສະໜອງຫຼາຍຂຶ້ນເມື່ອກວດເບິ່ງລາຍລະອຽດໃບອະນຸຍາດຂອງ compiler.
Trampການໂທ olined (XC8-2760) ປະຈຸບັນ compiler ສາມາດປະຕິບັດການທົດແທນຄໍາແນະນໍາການໂທແບບຍາວດ້ວຍການໂທພີ່ນ້ອງສັ້ນກວ່າໃນເວລາທີ່ຮູບແບບພີ່ນ້ອງຂອງຄໍາແນະນໍາປົກກະຕິຈະຢູ່ນອກຂອບເຂດຂອງຈຸດຫມາຍປາຍທາງຂອງເຂົາເຈົ້າ. ໃນສະຖານະການນີ້, compiler ຈະພະຍາຍາມທົດແທນດ້ວຍຄໍາແນະນໍາທີ່ຈະໂທຫາ rcall ຄໍາແນະນໍາທີ່ຈະ 'trampoline 'ປະຕິບັດກັບທີ່ຢູ່ທີ່ຕ້ອງການ, ສໍາລັບການຍົກຕົວຢ່າງample: jmp
rcall tramp_foo ;ແມ່ນໂທຫາ foo

rcall tramp_ຟຸ

tramp_foo:
jmp foo

ການເພີ່ມປະສິດທິພາບນີ້, ພ້ອມກັບການເພີ່ມປະສິດທິພາບການໄຫຼຂອງໂປຼແກຼມທີ່ຄ້າຍຄືກັນ, ຖືກຄວບຄຸມໂດຍທາງເລືອກ -mrelax.

3.2. ລຸ້ນ 2.40
ການສະຫນັບສະຫນູນອຸປະກອນໃຫມ່ໃນປັດຈຸບັນມີໃຫ້ສໍາລັບພາກສ່ວນ AVR ຕໍ່ໄປນີ້: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64.EAVR28, AVR64.
ການປັບປຸງຂັ້ນຕອນການ abstraction ເຄື່ອງມືເພີ່ມປະສິດທິພາບ procedural abstraction (PA) ໄດ້ຖືກປັບປຸງເພື່ອໃຫ້ລະຫັດທີ່ມີຄໍາແນະນໍາການເອີ້ນຟັງຊັນ (/ ) ສາມາດຖືກນໍາໃຊ້. ນີ້ພຽງແຕ່ຈະດໍາເນີນການໂທຫາ rcall ຖ້າ stack ບໍ່ໄດ້ຖືກນໍາໃຊ້ເພື່ອຜ່ານ arguments ໄປຫາຫຼືໄດ້ຮັບຄ່າກັບຄືນຈາກຟັງຊັນ. stack ຖືກນໍາໃຊ້ໃນເວລາທີ່ໂທຫາຟັງຊັນທີ່ມີບັນຊີລາຍຊື່ argument ຕົວແປຫຼືໃນເວລາທີ່ໂທຫາຟັງຊັນທີ່ເອົາ arguments ຫຼາຍກ່ວາມີ registers ກໍານົດສໍາລັບຈຸດປະສົງນີ້. ຄຸນສົມບັດນີ້ສາມາດຖືກປິດໃຊ້ງານໄດ້ໂດຍໃຊ້ຕົວເລືອກ, ຫຼືການບໍ່ເຂົ້າໃຈຂັ້ນຕອນສາມາດປິດການໃຊ້ງານທັງໝົດສໍາລັບໄຟລ໌ວັດຖຸ ຫຼືຟັງຊັນໂດຍໃຊ້ the- ແລະ, ຕາມລໍາດັບ, ຫຼືໂດຍການໃຊ້ຄຸນສົມບັດ (ສະເພາະ) ທີ່ມີຫນ້າທີ່ເລືອກ.
mno-pa-outline-calls -mno-pa-on-file -mno-pa-on-function nopa Code coverage macro ຕອນນີ້ compiler ກໍານົດ macro ຖ້າທາງເລືອກທີ່ຖືກຕ້ອງແມ່ນ __nopa __CODECOV -mcodecov ລະບຸໄວ້.
ທາງ​ເລືອກ​ການ​ຈອງ​ຫນ່ວຍ​ຄວາມ​ຈໍາ​ໃນ​ປັດ​ຈຸ​ບັນ​ຄົນ​ຂັບ​ຈະ​ຍອມ​ຮັບ xc8-cc -mreserve=space@start:ທາງ​ເລືອກ​ສິ້ນ​ສຸດ​ໃນ​ເວ​ລາ​ທີ່​ການ​ສ້າງ​ສໍາ​ລັບ​ເປົ້າ​ຫມາຍ AVR​. ຕົວເລືອກນີ້ສະຫງວນຂອບເຂດຄວາມຊົງຈໍາທີ່ລະບຸໄວ້ໃນພື້ນທີ່ຫນ່ວຍຄວາມຈໍາຂອງຂໍ້ມູນຫຼືໂຄງການ, ປ້ອງກັນບໍ່ໃຫ້ຕົວເຊື່ອມຕໍ່ຈາກການເພີ່ມລະຫັດຫຼືວັດຖຸໃນພື້ນທີ່ນີ້. IO ອັດສະລິຍະມີການປັບປຸງຫຼາຍຢ່າງຕໍ່ກັບຟັງຊັນ Smart IO, ລວມທັງການປັບປ່ຽນທົ່ວໄປຕໍ່ກັບລະຫັດຫຼັກ printf, ປະຕິບັດຕົວກໍານົດການແປງ %n ໃຫ້ເປັນຕົວແປທີ່ເປັນເອກະລາດ, ການເຊື່ອມໂຍງໃນ vararg pop routines ຕາມຄວາມຕ້ອງການ, ການນໍາໃຊ້ປະເພດຂໍ້ມູນທີ່ສັ້ນກວ່າທີ່ເປັນໄປໄດ້ສໍາລັບການຈັດການ. ອາກິວເມັນຟັງຊັນ IO, ແລະການສ້າງລະຫັດທົ່ວໄປໃນຂອບເຂດຄວາມກວ້າງແລະຄວາມແມ່ນຍໍາຂອງການຈັດການ. ນີ້ສາມາດສົ່ງຜົນໃຫ້ລະຫັດທີ່ສໍາຄັນແລະປະຫຍັດຂໍ້ມູນ, ເຊັ່ນດຽວກັນກັບການເພີ່ມຄວາມໄວການປະຕິບັດຂອງ IO.

3.3. ເວີຊັ່ນ 2.39 (ການປ່ອຍຄວາມປອດໄພທີ່ມີປະໂຫຍດ)
Network Server License ລຸ້ນນີ້ຂອງ MPLAB XC8 Functional Safety Compiler ຮອງຮັບ Network Server License.
3.4. ລຸ້ນ 2.36
ບໍ່ມີ.

3.5. ລຸ້ນ 2.35
ການສະຫນັບສະຫນູນອຸປະກອນໃຫມ່ມີໃຫ້ສໍາລັບພາກສ່ວນ AVR ຕໍ່ໄປນີ້: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28, ແລະ AVR64DD32.
ການປ່ຽນສະພາບການທີ່ປັບປຸງໃຫ້ດີຂຶ້ນ ທາງເລືອກ -mcall-isr-prologues ໃໝ່ຈະປ່ຽນວິທີການຂັດຂວາງການທໍາງານບັນທຶກການລົງທະບຽນຢູ່ໃນການເຂົ້າ ແລະວິທີທີ່ການລົງທະບຽນເຫຼົ່ານັ້ນຖືກຟື້ນຟູຄືນມາເມື່ອສິ່ງທີ່ປົກກະຕິຂັດຂວາງຢຸດເຊົາ. ມັນເຮັດວຽກໃນລັກສະນະທີ່ຄ້າຍຄືກັນກັບທາງເລືອກ -mcall-prologues, ແຕ່ວ່າພຽງແຕ່ຜົນກະທົບຕໍ່ຫນ້າທີ່ຂັດຂວາງ (ISRs).
ການສະຫຼັບສະພາບການທີ່ປັບປຸງໃຫ້ດີຂຶ້ນ ທາງເລືອກ -mgas-isr-prologues ໃໝ່ຄວບຄຸມລະຫັດສະຫຼັບບໍລິບົດທີ່ສ້າງຂຶ້ນສຳລັບກິດຈະວັດການບໍລິການທີ່ລົບກວນເລັກນ້ອຍ. ເມື່ອເປີດໃຊ້ງານ, ຄຸນສົມບັດນີ້ຈະມີຕົວປະກອບສະແກນ ISR ເພື່ອລົງທະບຽນການນໍາໃຊ້ ແລະພຽງແຕ່ບັນທຶກການລົງທະບຽນທີ່ໃຊ້ເຫຼົ່ານີ້ຖ້າຕ້ອງການ.
ການສ້າງແຜນທີ່ແຟລດທີ່ສາມາດກຳນົດຄ່າໄດ້ ອຸປະກອນບາງອັນໃນຄອບຄົວ AVR DA ແລະ AVR DB ມີ SFR (ເຊັ່ນ FLMAP) ທີ່ລະບຸວ່າພາກສ່ວນໃດ 32k ຂອງໜ່ວຍຄວາມຈຳຂອງໂປຣແກຣມຈະຖືກສ້າງແຜນທີ່ໃສ່ໃນໜ່ວຍຄວາມຈຳຂໍ້ມູນ. ທາງເລືອກໃຫມ່ - mconst-data-in-config-mapped-progmem ສາມາດໃຊ້ເພື່ອໃຫ້ຕົວເຊື່ອມຕໍ່ວາງຂໍ້ມູນທີ່ມີຄຸນສົມບັດທັງຫມົດຢູ່ໃນພາກ 32k ແລະເລີ່ມຕົ້ນການລົງທະບຽນ SFR ທີ່ກ່ຽວຂ້ອງໂດຍອັດຕະໂນມັດເພື່ອຮັບປະກັນວ່າຂໍ້ມູນນີ້ຖືກແຜນທີ່ເຂົ້າໄປໃນຫນ່ວຍຄວາມຈໍາຂໍ້ມູນ. ຊ່ອງ, ບ່ອນທີ່ມັນຈະໄດ້ຮັບການເຂົ້າເຖິງປະສິດທິພາບຫຼາຍ.
Microchip Unified Standard Libraries ໂປຣແກຣມສັງລວມ MPLAB XC ທັງໝົດຈະແບ່ງປັນຫ້ອງສະໝຸດມາດຕະຖານ Microchip Unified, ເຊິ່ງມີໃຫ້ນຳໃຊ້ກັບລຸ້ນ MPLAB XC8 ນີ້. ຄູ່ມືຜູ້ໃຊ້ MPLA# XC8 C Compiler ສໍາລັບ AVO MCU ບໍ່ມີເອກະສານສໍາລັບຟັງຊັນມາດຕະຖານເຫຼົ່ານີ້ອີກຕໍ່ໄປ. ຂໍ້ມູນນີ້ສາມາດພົບໄດ້ໃນ ຄູ່ມືການອ້າງອິງມາດຕະຖານຫ້ອງສະໝຸດ Microchip Unified Standard. ໃຫ້ສັງເກດວ່າບາງຫນ້າທີ່ກໍານົດໄວ້ກ່ອນຫນ້ານີ້ໂດຍ avr-libc ແມ່ນບໍ່ມີຕໍ່ໄປອີກແລ້ວ. (ເບິ່ງການທໍາງານຂອງ Lila.)
Smart I0 ເປັນສ່ວນຫນຶ່ງຂອງຫ້ອງສະຫມຸດທີ່ປະສົມປະສານໃຫມ່, ຟັງຊັນ I0 ໃນຄອບຄົວ printf ແລະ scanf ໄດ້ຖືກສ້າງຂື້ນເອງໃນແຕ່ລະການກໍ່ສ້າງ, ໂດຍອີງໃສ່ວິທີການນໍາໃຊ້ຫນ້າທີ່ເຫຼົ່ານີ້ຢູ່ໃນໂຄງການ. ນີ້ສາມາດຫຼຸດລົງຢ່າງຫຼວງຫຼາຍຊັບພະຍາກອນທີ່ໃຊ້ໂດຍໂຄງການ.
ທາງ​ເລືອກ​ການ​ຊ່ວຍ​ເຫຼືອ ICI ອັດ​ສະ​ລິ​ຍະ​ໃນ​ເວ​ລາ​ທີ່​ການ​ວິ​ເຄາະ​ການ​ໂທ​ຫາ smart I0 functions (ເຊັ່ນ​: ພິມ f () ຫຼື scanf ()), compiler ບໍ່​ສາ​ມາດ​ກໍາ​ນົດ​ຈາກ​ສະ​ຕ​ຣິງ​ຮູບ​ແບບ​ຫຼື infer ຈາກ​ການ​ໂຕ້​ຖຽງ​ຕົວ​ຊີ້​ວັດ​ການ​ປ່ຽນ​ແປງ​ທີ່​ຕ້ອງ​ການ​ໂດຍ​ການ​ໂທ​. ກ່ອນຫນ້ານີ້, compiler ສະເຫມີຈະບໍ່ສົມມຸດຕິຖານແລະຮັບປະກັນວ່າຫນ້າທີ່ເຮັດວຽກເຕັມທີ່ 10 ໄດ້ຖືກເຊື່ອມຕໍ່ເຂົ້າໄປໃນຮູບພາບຂອງໂປຼແກຼມສຸດທ້າຍ. ທາງເລືອກໃຫມ່ - msmart-io-format=fmt ໄດ້ຖືກເພີ່ມເພື່ອໃຫ້ຜູ້ລວບລວມຂໍ້ມູນແທນທີ່ຈະຖືກແຈ້ງໃຫ້ໂດຍຜູ້ໃຊ້ຂອງຕົວກໍານົດການແປງທີ່ໃຊ້ໂດຍຟັງຊັນ I0 ອັດສະລິຍະທີ່ມີການນໍາໃຊ້ທີ່ບໍ່ຊັດເຈນ, ປ້ອງກັນບໍ່ໃຫ້ 10 ປົກກະຕິຍາວເກີນໄປຈາກການເຊື່ອມໂຍງ. (ເບິ່ງ smart-io-format Option ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ.)
ການວາງພາກສ່ວນທີ່ກໍາຫນົດເອງກ່ອນຫນ້ານີ້, ທາງເລືອກ -W1, –section-start ພຽງແຕ່ວາງສ່ວນທີ່ລະບຸໄວ້ໃນທີ່ຢູ່ທີ່ຮ້ອງຂໍເມື່ອຕົວເຊື່ອມຕໍ່ກໍານົດສ່ວນຜົນຜະລິດທີ່ມີຊື່ດຽວກັນ. ເມື່ອນັ້ນບໍ່ແມ່ນກໍລະນີ, ພາກສ່ວນໄດ້ຖືກຈັດໃສ່ຢູ່ໃນທີ່ຢູ່ທີ່ເລືອກໂດຍຕົວເຊື່ອມຕໍ່ແລະທາງເລືອກແມ່ນຖືກລະເວັ້ນ. ໃນປັດຈຸບັນທາງເລືອກຈະໄດ້ຮັບກຽດສໍາລັບທຸກພາກສ່ວນທີ່ກໍາຫນົດເອງ, ເຖິງແມ່ນວ່າຕົວເຊື່ອມຕໍ່ບໍ່ໄດ້ກໍານົດສ່ວນ. ຢ່າງໃດກໍຕາມ, ໃຫ້ສັງເກດວ່າສໍາລັບພາກສ່ວນມາດຕະຖານ, ເຊັ່ນ . ຂໍ້​ຄວາມ, . bss ຫຼື . ຂໍ້ມູນ, ຜູ້ຈັດສັນທີ່ເຫມາະສົມທີ່ສຸດຈະຍັງຄົງມີການຄວບຄຸມຢ່າງເຕັມທີ່ກ່ຽວກັບການບັນຈຸເຂົ້າຮຽນຂອງເຂົາເຈົ້າ, ແລະທາງເລືອກຈະບໍ່ມີຜົນກະທົບ. ໃຊ້ຕົວເລືອກ -ton, -Tsection=addr, ດັ່ງທີ່ໄດ້ອະທິບາຍໄວ້ໃນຄູ່ມືຂອງຜູ້ໃຊ້.
3.6. ລຸ້ນ 2.32
Stack Guidance ສາມາດໃຊ້ໄດ້ກັບໃບອະນຸຍາດ compiler PRO, ຄຸນສົມບັດການຊີ້ນໍາຂອງ stack compiler ສາມາດຖືກນໍາໃຊ້ເພື່ອຄາດຄະເນຄວາມເລິກສູງສຸດຂອງ stack ທີ່ໃຊ້ໂດຍໂຄງການ. ມັນກໍ່ສ້າງແລະວິເຄາະເສັ້ນສະແດງການເອີ້ນຂອງໂປລແກລມ, ກໍານົດການນໍາໃຊ້ stack ຂອງແຕ່ລະຫນ້າທີ່, ແລະຜະລິດບົດລາຍງານ, ເຊິ່ງຄວາມເລິກຂອງ stacks ທີ່ໃຊ້ໂດຍໂຄງການສາມາດ inferred. ຄຸນສົມບັດນີ້ຖືກເປີດໃຊ້ຜ່ານຕົວເລືອກເສັ້ນຄໍາສັ່ງ -mchp-stack-usage. ບົດສະຫຼຸບຂອງການໃຊ້ stack ແມ່ນພິມອອກຫຼັງຈາກການປະຕິບັດ. ບົດລາຍງານ stack ລະອຽດແມ່ນມີຢູ່ໃນແຜນທີ່ file, ຊຶ່ງສາມາດຮ້ອງຂໍໄດ້ໃນວິທີການປົກກະຕິ.
ການຮອງຮັບອຸປະກອນໃໝ່ມີໃຫ້ສຳລັບພາກສ່ວນ AVR ຕໍ່ໄປນີ້: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32, AVR32DB48 ການ​ຮອງ​ຮັບ​ອຸ​ປະ​ກອນ​ທີ່​ຖອດ​ຖອນ​ໄດ້​ການ​ສະ​ຫນັບ​ສະ​ຫນູນ​ແມ່ນ​ບໍ່​ມີ​ຕໍ່​ໄປ​ອີກ​ແລ້ວ​ສໍາ​ລັບ​ພາກ​ສ່ວນ AVR ດັ່ງ​ຕໍ່​ໄປ​ນີ້​: AVR16DA28​, AVR16DA32 ແລະ​, AVR16DA48​.
3.7. ລຸ້ນ 2.31
ບໍ່ມີ.
3.8. ລຸ້ນ 2.30
ທາງເລືອກໃຫມ່ເພື່ອປ້ອງກັນການເລີ່ມຕົ້ນຂໍ້ມູນ ທາງເລືອກໄດເວີ -mno-data-init ໃໝ່ ປ້ອງກັນການເລີ່ມຕົ້ນຂອງຂໍ້ມູນແລະການລ້າງສ່ວນ bss. ມັນເຮັດວຽກໂດຍການສະກັດກັ້ນຜົນຜະລິດຂອງ do copy data ແລະເຮັດສັນຍາລັກ bss ທີ່ຈະແຈ້ງໃນການປະກອບ files, ເຊິ່ງຈະປ້ອງກັນການລວມເອົາການປົກກະຕິເຫຼົ່ານັ້ນໂດຍຕົວເຊື່ອມຕໍ່.
ການເພີ່ມປະສິດທິພາບການເພີ່ມປະສິດທິພາບຈໍານວນຫນຶ່ງໄດ້ຖືກປັບປຸງ, ລວມທັງການກໍາຈັດຄໍາແນະນໍາຄືນທີ່ຊ້ໍາກັນ, ການກໍາຈັດການກະໂດດບາງອັນຕາມຄໍາແນະນໍາ skip-if-bit-is, ແລະການປັບປຸງການ abstraction ຂັ້ນຕອນແລະຄວາມສາມາດໃນການເຮັດຊ້ໍາຂະບວນການນີ້. ທາງເລືອກເພີ່ມເຕີມແມ່ນມີຢູ່ໃນປັດຈຸບັນເພື່ອຄວບຄຸມບາງການເພີ່ມປະສິດທິພາບເຫຼົ່ານີ້, ໂດຍສະເພາະ -f section-anchors, ເຊິ່ງອະນຸຍາດໃຫ້ເຂົ້າເຖິງວັດຖຸສະຖິດທີ່ຈະປະຕິບັດທີ່ກ່ຽວຂ້ອງກັບສັນຍາລັກຫນຶ່ງ; -mpa-iterations=n, ເຊິ່ງອະນຸຍາດໃຫ້ຈຳນວນຂອງຂັ້ນຕອນການເຮັດຊ້ຳແບບ abstraction ມີການປ່ຽນແປງຈາກຄ່າເລີ່ມຕົ້ນຂອງ 2; ແລະ, -mpa-callcost-shortcall, ເຊິ່ງປະຕິບັດການຂັດຂວາງຂັ້ນຕອນການຮຸກຮານຫຼາຍ, ໂດຍຫວັງວ່າຕົວເຊື່ອມຕໍ່ສາມາດຜ່ອນຄາຍການໂທຍາວ. ທາງເລືອກສຸດທ້າຍນີ້ສາມາດເພີ່ມຂະຫນາດລະຫັດໄດ້ຖ້າສົມມຸດຕິຖານພື້ນຖານບໍ່ຖືກຮັບຮູ້.
ການຮອງຮັບອຸປະກອນໃໝ່ແມ່ນມີໃຫ້ສຳລັບພາກສ່ວນ AVR ຕໍ່ໄປນີ້: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DAVR64, AVR128DB 28DB128. ການຮອງຮັບອຸປະກອນທີ່ຖອດຖອນບໍ່ໄດ້ແລ້ວສຳລັບພາກສ່ວນ AVR ຕໍ່ໄປນີ້: ATA32, ATA128, ATA48N, ATA128, ATA64, ATA5272, ATA5790, ATA5790C, ATA5791C, ATA5795Q, ATA6285ATA6286C, ATA6612ATA6613, ATA6614, ATA6616, ATA6617,
3.9. ເວີຊັ່ນ 2.29 (ການປ່ອຍຄວາມປອດໄພທີ່ມີປະໂຫຍດ)
ສ່ວນຫົວ file ສໍາລັບ compiler built-ins ເພື່ອຮັບປະກັນວ່າ compiler ສາມາດປະຕິບັດຕາມສະເພາະຂອງພາສາເຊັ່ນ MISRA, ໄດ້. ສ່ວນຫົວ file, ເຊິ່ງລວມອັດຕະໂນມັດໂດຍ , ໄດ້ຮັບການປັບປຸງ. ສ່ວນຫົວນີ້ມີຕົ້ນແບບສຳລັບຟັງຊັນທີ່ສ້າງມາທັງໝົດ ເຊັ່ນ: buildin_avr_nop ( ) ແລະ buildin avr delay_cycles () . ບາງອັນທີ່ສ້າງຂຶ້ນອາດຈະບໍ່ສອດຄ່ອງກັບ MISRA; ເຫຼົ່ານີ້ສາມາດຖືກລະເວັ້ນໂດຍການເພີ່ມ defineXCSTRICT_MISRA ໃສ່ເສັ້ນຄໍາສັ່ງ compiler. ວັດສະດຸກໍ່ສ້າງແລະການປະກາດຂອງພວກມັນໄດ້ຖືກປັບປຸງເພື່ອໃຊ້ປະເພດຄວາມກວ້າງທີ່ຄົງທີ່.
3.10. ລຸ້ນ 2.20
ການຮອງຮັບອຸປະກອນໃໝ່ມີໃຫ້ສຳລັບພາກສ່ວນ AVR ຕໍ່ໄປນີ້: ATTINY1624, ATTINY1626, ແລະ ATTINY1627.
ການຈັດສັນທີ່ດີທີ່ສຸດທີ່ດີກວ່າ ການຈັດສັນທີ່ເຫມາະສົມທີ່ດີທີ່ສຸດ (BFA) ໃນຄອມພີວເຕີໄດ້ຖືກປັບປຸງເພື່ອໃຫ້ພາກສ່ວນຕ່າງໆຖືກຈັດສັນຢູ່ໃນຄໍາສັ່ງທີ່ອະນຸຍາດໃຫ້ມີການເພີ່ມປະສິດທິພາບທີ່ດີກວ່າ. ດຽວນີ້ BFA ຮອງຮັບພື້ນທີ່ທີ່ຢູ່ທີ່ມີຊື່ ແລະຈັດການການເລີ່ມຕົ້ນຂໍ້ມູນໄດ້ດີຂຶ້ນ.
ການປັບປຸງຂັ້ນຕອນການ abstraction ການເພີ່ມປະສິດທິພາບການ abstraction ຂັ້ນຕອນໄດ້ຖືກປະຕິບັດຢູ່ໃນລໍາດັບລະຫັດເພີ່ມເຕີມ. ສະຖານະການທີ່ຜ່ານມາທີ່ການເພີ່ມປະສິດທິພາບນີ້ອາດຈະເພີ່ມຂະຫນາດລະຫັດໄດ້ຖືກແກ້ໄຂໂດຍການເຮັດໃຫ້ລະຫັດການເພີ່ມປະສິດທິພາບຮູ້ເຖິງຂະບວນການເກັບຂີ້ເຫຍື້ອຂອງຜູ້ເຊື່ອມຕໍ່.
ບໍ່ມີ AVR Assembler AVR Assembler ບໍ່ໄດ້ລວມຢູ່ໃນການແຈກຢາຍນີ້ອີກຕໍ່ໄປ.
3.11. ເວີຊັ່ນ 2.19 (ການປ່ອຍຄວາມປອດໄພທີ່ມີປະໂຫຍດ)
ບໍ່ມີ.
3.12. ລຸ້ນ 2.10
ການປົກຫຸ້ມຂອງລະຫັດ ການປ່ອຍນີ້ປະກອບມີຄຸນສົມບັດການຄຸ້ມຄອງລະຫັດທີ່ອໍານວຍຄວາມສະດວກໃນການວິເຄາະຂອບເຂດທີ່ລະຫັດແຫຼ່ງຂອງໂຄງການໄດ້ຖືກປະຕິບັດ. ໃຊ້ຕົວເລືອກ -mcodecov=ram ເພື່ອເປີດໃຊ້ມັນ. ຫຼັງ​ຈາກ​ການ​ປະ​ຕິ​ບັດ​ໂຄງ​ການ​ໃນ​ຮາດ​ແວ​ຂອງ​ທ່ານ​, ຂໍ້​ມູນ​ຂ່າວ​ສານ​ການ​ຄຸ້ມ​ຄອງ​ລະ​ຫັດ​ຈະ​ຖືກ​ລວມ​ເຂົ້າ​ໃນ​ອຸ​ປະ​ກອນ​, ແລະ​ນີ້​ສາ​ມາດ​ໂອນ​ແລະ​ສະ​ແດງ​ໂດຍ MPLAB X IDE ຜ່ານ plugin ການ​ຄຸ້ມ​ຄອງ​ລະ​ຫັດ​. ເບິ່ງເອກະສານ IDE ສໍາລັບຂໍ້ມູນກ່ຽວກັບ plugin ນີ້ສາມາດໄດ້ຮັບ. #pragma nocodecov ອາດຈະຖືກໃຊ້ເພື່ອຍົກເວັ້ນຫນ້າທີ່ຕໍ່ມາຈາກການວິເຄາະການຄຸ້ມຄອງ. ໂດຍຫລັກການແລ້ວ pragma ຄວນໄດ້ຮັບການເພີ່ມໃນຕອນຕົ້ນຂອງ file ເພື່ອຍົກເວັ້ນທັງໝົດນັ້ນ file ຈາກ​ການ​ວິ​ເຄາະ​ການ​ຄຸ້ມ​ຄອງ​. ອີກທາງເລືອກ, _attribute_ ( (nocodecov) ) ອາດຈະຖືກໃຊ້ເພື່ອຍົກເວັ້ນຟັງຊັນສະເພາະຈາກການວິເຄາະການຄຸ້ມຄອງ.
ລາຍລະອຽດອຸປະກອນ files ອຸ​ປະ​ກອນ​ໃຫມ່​ file ເອີ້ນວ່າ avr_chipinfo . html ແມ່ນຢູ່ໃນໄດເລກະທໍລີ docs ຂອງການແຈກຢາຍ compiler. ນີ້ file ລາຍການອຸປະກອນທັງໝົດທີ່ຮອງຮັບໂດຍ compiler. ໃຫ້ຄລິກໃສ່ຊື່ອຸປະກອນ, ແລະມັນຈະເປີດຫນ້າສະແດງໃຫ້ເຫັນທັງຫມົດການຕັ້ງຄ່າ bit ການຕັ້ງຄ່າອະນຸຍາດ / ຄວາມເຈັບປວດມູນຄ່າສໍາລັບອຸປະກອນນັ້ນ, ກັບ examples. ຂັ້ນຕອນການ abstraction
ຂັ້ນຕອນການເພີ່ມປະສິດທິພາບ abstraction, ເຊິ່ງແທນທີ່ບລັອກທົ່ວໄປຂອງລະຫັດການປະກອບທີ່ມີການໂທຫາສໍາເນົາສະກັດຂອງບລັອກນັ້ນ, ໄດ້ຖືກເພີ່ມເຂົ້າໃນ compiler. ສິ່ງເຫຼົ່ານີ້ຖືກປະຕິບັດໂດຍແອັບພລິເຄຊັນແຍກຕ່າງຫາກ, ເຊິ່ງຖືກເອີ້ນໂດຍອັດຕະໂນມັດໂດຍ compiler ເມື່ອເລືອກການເພີ່ມປະສິດທິພາບລະດັບ 2, 3 ຫຼື s. ການເພີ່ມປະສິດທິພາບເຫຼົ່ານີ້ຫຼຸດລົງຂະຫນາດລະຫັດ, ແຕ່ພວກມັນອາດຈະຫຼຸດລົງຄວາມໄວໃນການປະຕິບັດແລະການແກ້ບັນຫາລະຫັດ. ການຂັດຂວາງຂັ້ນຕອນສາມາດຖືກປິດການໃຊ້ງານໃນລະດັບການເພີ່ມປະສິດທິພາບທີ່ສູງຂຶ້ນໂດຍໃຊ້ທາງເລືອກ -mno-pa, ຫຼືສາມາດຖືກເປີດໃຊ້ໃນລະດັບການເພີ່ມປະສິດທິພາບຕ່ໍາ (ຂຶ້ນກັບໃບອະນຸຍາດຂອງທ່ານ) ໂດຍໃຊ້ -mpa. ມັນສາມາດຖືກປິດການໃຊ້ງານສໍາລັບວັດຖຸ file ການນໍາໃຊ້ -mno-pa-on-file=fileຊື່, ຫຼືປິດການໃຊ້ງານສໍາລັບຟັງຊັນໂດຍໃຊ້ -mno-pa-on-function=function. ພາຍໃນລະຫັດແຫຼ່ງຂອງທ່ານ, ຂະບວນການ abstraction ສາມາດຖືກປິດການໃຊ້ງານສໍາລັບຟັງຊັນໂດຍໃຊ້ attribute ( (nopa) ) ກັບຄໍານິຍາມຂອງຟັງຊັນ, ຫຼືໂດຍໃຊ້ nopa, ເຊິ່ງຂະຫຍາຍໄປສູ່ attribute ((nopa, noinline) ) ແລະດັ່ງນັ້ນຈຶ່ງປ້ອງກັນບໍ່ໃຫ້ inlining function ເກີດຂຶ້ນ. ແລະມີການ abstraction ຂອງລະຫັດ inlined.
ຮອງຮັບການລັອກບິດໃນ pragma ຕອນນີ້ສາມາດໃຊ້ການຕັ້ງຄ່າ #pragma ເພື່ອລະບຸບິດລັອກ AVR ເຊັ່ນດຽວກັນກັບບິດການຕັ້ງຄ່າອື່ນໆ. ກວດເບິ່ງ avr_chipinfo . html file (ທີ່ໄດ້ກ່າວມາຂ້າງເທິງ) ສໍາລັບຄູ່ການຕັ້ງຄ່າ / ຄ່າທີ່ຈະໃຊ້ກັບ pragma ນີ້. ການສະຫນັບສະຫນູນອຸປະກອນໃຫມ່ມີໃຫ້ສໍາລັບພາກສ່ວນດັ່ງຕໍ່ໄປນີ້: AVR28DAl28, AVR64DAl28, AVR32DA 128, ແລະ AVR48DA 128.
3.13. ລຸ້ນ 2.05
bits ເພີ່ມເຕີມສໍາລັບ buck ຂອງທ່ານ ສະບັບ macOS ຂອງ compiler ແລະຕົວຈັດການໃບອະນຸຍາດນີ້ແມ່ນເປັນຄໍາຮ້ອງສະຫມັກ 64-bit. ນີ້ຈະຮັບປະກັນວ່າ compiler ຈະຕິດຕັ້ງແລະດໍາເນີນການໂດຍບໍ່ມີການເຕືອນກ່ຽວກັບ macOS ຮຸ່ນທີ່ຜ່ານມາ.
Const objects in the program memory ປະຈຸບັນ compiler ສາມາດຈັດວາງວັດຖຸ const-qualified ໃນຫນ່ວຍຄວາມຈໍາ Flash ຂອງໂຄງການ, ແທນທີ່ຈະມີສິ່ງເຫຼົ່ານີ້ຢູ່ໃນ RAM. compiler ໄດ້ຖືກດັດແປງເພື່ອໃຫ້ຂໍ້ມູນທົ່ວໂລກທີ່ມີຄຸນສົມບັດ t cons ຖືກເກັບໄວ້ໃນຫນ່ວຍຄວາມຈໍາ flash ຂອງໂປລແກລມແລະຂໍ້ມູນນີ້ສາມາດເຂົ້າຫາໄດ້ໂດຍກົງແລະທາງອ້ອມໂດຍໃຊ້ຄໍາແນະນໍາທີ່ເຫມາະສົມກັບໂຄງການ - ຄວາມຈໍາ. ຄຸນສົມບັດໃໝ່ນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ ແຕ່ສາມາດຖືກປິດການນຳໃຊ້ໄດ້ໂດຍໃຊ້ຕົວເລືອກ -mno-const-data-in-progmem. ສຳລັບສະຖາປັດຕະຍະກຳ avrxmega3 ແລະ avrtiny, ຄຸນສົມບັດນີ້ບໍ່ຈຳເປັນ ແລະຖືກປິດການນຳໃຊ້ສະເໝີ, ເນື່ອງຈາກໜ່ວຍຄວາມຈຳຂອງໂປຣແກຣມຖືກສ້າງແຜນທີ່ໃສ່ພື້ນທີ່ທີ່ຢູ່ຂໍ້ມູນສຳລັບອຸປະກອນເຫຼົ່ານີ້.
ສະບັບມາດຕະຖານສໍາລັບການຟຣີທີ່ບໍ່ມີໃບອະນຸຍາດ (ຟຣີ) ຂອງ compiler ນີ້ອະນຸຍາດໃຫ້ optimization ສູງສຸດແລະລວມທັງລະດັບ 2. ນີ້ຈະອະນຸຍາດໃຫ້ຄ້າຍຄືກັນ, ເຖິງແມ່ນວ່າບໍ່ຄືກັນ, ຜົນຜະລິດກັບສິ່ງທີ່ເປັນໄປໄດ້ໃນເມື່ອກ່ອນໂດຍໃຊ້ໃບອະນຸຍາດມາດຕະຖານ.
ຍິນດີຕ້ອນຮັບ AVRASM2 ຕົວປະກອບ AVRASM2 ສໍາລັບອຸປະກອນ 8-bit ໄດ້ຖືກລວມຢູ່ໃນຕົວຕິດຕັ້ງຄອມພີວເຕີ XC8 ແລ້ວ. ຕົວປະກອບນີ້ບໍ່ໄດ້ໃຊ້ໂດຍຜູ້ລວບລວມຂໍ້ມູນ XC8, ແຕ່ມີໃຫ້ສໍາລັບໂຄງການໂດຍອີງໃສ່ແຫຼ່ງປະກອບທີ່ຂຽນດ້ວຍມື.
ການສະຫນັບສະຫນູນອຸປະກອນໃຫມ່ມີໃຫ້ສໍາລັບພາກສ່ວນດັ່ງຕໍ່ໄປນີ້: ATMEGA1608, ATMEGA1609, ATMEGA808, ແລະ ATMEGA809.

3.14. ລຸ້ນ 2.00
ໄດເວີຊັ້ນສູງ ໄດເວີໃຫມ່, ເອີ້ນວ່າ xc8-cc, ປະຈຸບັນນັ່ງຢູ່ເຫນືອໄດເວີ avr-gcc ກ່ອນຫນ້າແລະໄດເວີ xc8, ແລະມັນສາມາດໂທຫາ compiler ທີ່ເຫມາະສົມໂດຍອີງໃສ່ການເລືອກອຸປະກອນເປົ້າຫມາຍ. ໄດເວີນີ້ຍອມຮັບທາງເລືອກແບບ GCC, ເຊິ່ງຖືກແປສໍາລັບຫຼືສົ່ງຜ່ານໄປຫາ compiler ທີ່ຖືກປະຕິບັດ. ໄດເວີນີ້ອະນຸຍາດໃຫ້ມີຊຸດທາງເລືອກທີ່ຄ້າຍຄືກັນກັບ semantics ທີ່ຄ້າຍຄືກັນເພື່ອນໍາໃຊ້ກັບເປົ້າຫມາຍ AVR ຫຼື PIC ໃດໆແລະດັ່ງນັ້ນຈຶ່ງເປັນວິທີທີ່ແນະນໍາທີ່ຈະເອີ້ນ compiler. ຖ້າຕ້ອງການ, ໄດເວີ avr-gcc ເກົ່າສາມາດຖືກເອີ້ນໂດຍກົງໂດຍໃຊ້ຕົວເລືອກແບບເກົ່າທີ່ມັນຍອມຮັບໃນສະບັບລວບລວມກ່ອນຫນ້ານີ້.
Common C Interface ໃນປັດຈຸບັນ compiler ນີ້ສາມາດປະຕິບັດຕາມ MPLAB Common C Interface, ອະນຸຍາດໃຫ້ source code ສາມາດ ported ໄດ້ງ່າຍກວ່າໃນທົ່ວ compilers MPLAB XC ທັງຫມົດ. ຕົວເລືອກ -mext=cci ຮ້ອງຂໍຄຸນສົມບັດນີ້, ເປີດໃຊ້ syntax ທາງເລືອກສໍາລັບການຂະຫຍາຍພາສາຫຼາຍ.
ໄດເວີຫ້ອງສະໝຸດໃໝ່ ໄດເວີຫ້ອງສະໝຸດໃໝ່ຢູ່ເໜືອຫ້ອງສະໝຸດ PIC libr ກ່ອນໜ້າ ແລະຫ້ອງສະໝຸດ AVR avr-ar. ໄດເວີນີ້ຍອມຮັບທາງເລືອກແບບ GCC-archiver, ເຊິ່ງຖືກແປສໍາລັບຫຼືສົ່ງຜ່ານໄປຫາຫ້ອງສະຫມຸດທີ່ຖືກປະຕິບັດ. ໄດເວີໃຫມ່ອະນຸຍາດໃຫ້ມີຊຸດທາງເລືອກທີ່ຄ້າຍຄືກັນກັບ semantics ທີ່ຄ້າຍຄືກັນເພື່ອນໍາໃຊ້ເພື່ອສ້າງຫຼືຈັດການ PIC ຫຼື AVR ໃດໆ. file ແລະ​ດັ່ງ​ນັ້ນ​ຈຶ່ງ​ເປັນ​ວິ​ທີ​ທີ່​ແນະ​ນໍາ​ທີ່​ຈະ​ຮຽກ​ຮ້ອງ​ໃຫ້​ຫ້ອງ​ສະ​ຫມຸດ​ໄດ້​. ຖ້າຕ້ອງການສໍາລັບໂຄງການມໍລະດົກ, ຫ້ອງສະຫມຸດທີ່ຜ່ານມາສາມາດຖືກເອີ້ນໂດຍກົງໂດຍໃຊ້ຕົວເລືອກແບບເກົ່າທີ່ມັນຍອມຮັບໃນສະບັບ compiler ກ່ອນຫນ້ານີ້.

ບັນຫາການເຄື່ອນຍ້າຍ

ຕໍ່ໄປນີ້ແມ່ນລັກສະນະທີ່ໄດ້ຖືກປະຕິບັດໂດຍ compiler ທີ່ແຕກຕ່າງກັນໃນປັດຈຸບັນ. ການ​ປ່ຽນ​ແປງ​ເຫຼົ່າ​ນີ້​ອາດ​ຈະ​ຮຽກ​ຮ້ອງ​ໃຫ້​ມີ​ການ​ປັບ​ປຸງ​ລະ​ຫັດ​ແຫຼ່ງ​ຂໍ້​ມູນ​ຂອງ​ທ່ານ​ຖ້າ​ຫາກ​ວ່າ​ການ porting ລະ​ຫັດ​ກັບ​ສະ​ບັບ compiler ນີ້​. ໝາຍເລກເວີຊັນໃນຫົວຂໍ້ຍ່ອຍສະແດງເຖິງລຸ້ນ compiler ທຳອິດເພື່ອຮອງຮັບການປ່ຽນແປງທີ່ຕິດຕາມມາ.

4.1. ລຸ້ນ 2.41
ຟັງຊັນ fma ທີ່ບໍ່ຖືກຕ້ອງຖືກໂຍກຍ້າຍອອກ (XC8-2913) ຫ້ອງສະຫມຸດມາດຕະຖານ C99 fma 0 -family functions ( ) ບໍ່ໄດ້ຄິດໄລ່ການຄູນ-ເພີ່ມດ້ວຍຄວາມແມ່ນຍໍາອັນບໍ່ມີຂອບເຂດຕໍ່ກັບການຮອບດຽວ, ແຕ່ແທນທີ່ການສະສົມຄວາມຜິດພາດຂອງການຮອບດ້ວຍແຕ່ລະການດໍາເນີນງານ. ຟັງຊັນເຫຼົ່ານີ້ໄດ້ຖືກລຶບອອກຈາກຫ້ອງສະໝຸດທີ່ສະໜອງໃຫ້.
4.2. ລຸ້ນ 2.40
ບໍ່ມີ.
4.3. ເວີຊັ່ນ 2.39 (ການປ່ອຍຄວາມປອດໄພທີ່ມີປະໂຫຍດ)
ບໍ່ມີ.
4.4. ເວີຊັນ 2.36 ບໍ່ມີ.
4.5. ລຸ້ນ 2.35
ການຈັດການຂອງ string-to bases (XC8-2420) ເພື່ອຮັບປະກັນຄວາມສອດຄ່ອງກັນກັບ XC compilers ອື່ນໆ, ຟັງຊັນ XC8 string-to, ເຊັ່ນ sttol() ແລະອື່ນໆ, ຈະບໍ່ພະຍາຍາມແປງສະຕຣິງປ້ອນຂໍ້ມູນ ຖ້າຖານທີ່ລະບຸນັ້ນໃຫຍ່ກວ່າ 36. ແລະແທນທີ່ຈະຕັ້ງ errno ເປັນ EINVAL. ມາດຕະຖານ C ບໍ່ໄດ້ລະບຸພຶດຕິກໍາຂອງຫນ້າທີ່ເມື່ອຄ່າພື້ນຖານນີ້ເກີນ.
ການເພີ່ມປະສິດທິພາບຄວາມໄວທີ່ບໍ່ເຫມາະສົມ ຂັ້ນຕອນການເພີ່ມປະສິດທິພາບ abstraction ໄດ້ຖືກເປີດໃຊ້ໃນເວລາທີ່ເລືອກການເພີ່ມປະສິດທິພາບລະດັບ 3 (-03). ການເພີ່ມປະສິດທິພາບເຫຼົ່ານີ້ຫຼຸດລົງຂະຫນາດລະຫັດໂດຍຄ່າໃຊ້ຈ່າຍຂອງຄວາມໄວລະຫັດ, ດັ່ງນັ້ນບໍ່ຄວນຖືກປະຕິບັດ. ໂຄງການທີ່ໃຊ້ລະດັບການເພີ່ມປະສິດທິພາບນີ້ອາດຈະເຫັນຄວາມແຕກຕ່າງຂອງຂະຫນາດລະຫັດແລະຄວາມໄວໃນການປະຕິບັດໃນເວລາທີ່ສ້າງຂຶ້ນດ້ວຍການປ່ອຍນີ້.
ການທໍາງານຂອງຫ້ອງສະຫມຸດ ລະຫັດສໍາລັບຫຼາຍຫນ້າທີ່ຫ້ອງສະຫມຸດ C ມາດຕະຖານໃນປັດຈຸບັນແມ່ນມາຈາກຫ້ອງສະຫມຸດມາດຕະຖານ Unified ຂອງ Microchip, ເຊິ່ງອາດຈະສະແດງພຶດຕິກໍາທີ່ແຕກຕ່າງກັນໃນບາງສະຖານະການເມື່ອທຽບກັບທີ່ສະຫນອງໃຫ້ໂດຍຫ້ອງສະຫມຸດ avr-libc ໃນອະດີດ. ຕົວຢ່າງampດັ່ງນັ້ນ, ມັນບໍ່ຈໍາເປັນທີ່ຈະເຊື່ອມຕໍ່ໃນຫ້ອງສະຫມຸດ 1printf flt (-1printf_flt ທາງເລືອກ) ເພື່ອເປີດໃຊ້ຮູບແບບ. I0 ສະຫນັບສະຫນູນສໍາລັບຕົວລະບຸຮູບແບບ float. ສະຫຼາດ I0 ຄຸນສົມບັດຂອງຫ້ອງສະໝຸດມາດຕະຖານ Microchip Unified ເຮັດໃຫ້ທາງເລືອກນີ້ຊ້ຳຊ້ອນ. ນອກຈາກນັ້ນ, ການນໍາໃຊ້ _P suffixed routines ສໍາລັບຟັງຊັນ string ແລະຫນ່ວຍຄວາມຈໍາ (ເຊັ່ນ: strcpy_P ( ) ແລະອື່ນໆ. ປົກກະຕິ C ມາດຕະຖານ (ເຊັ່ນ: strcpy ) ຈະເຮັດວຽກຢ່າງຖືກຕ້ອງກັບຂໍ້ມູນດັ່ງກ່າວເມື່ອຄຸນສົມບັດ const-data-in-program-memory ຖືກເປີດໃຊ້.

4.6. ລຸ້ນ 2.32
ບໍ່ມີ.
4.7. ລຸ້ນ 2.31
ບໍ່ມີ.
4.8. ລຸ້ນ 2.30
ບໍ່ມີ.
4.1. ເວີຊັ່ນ 2.29 (ການປ່ອຍຄວາມປອດໄພທີ່ມີປະໂຫຍດ)
ບໍ່ມີ.
4.2. ລຸ້ນ 2.20
ປ່ຽນໂຄງຮ່າງ DFP ແລ້ວ ໃນປັດຈຸບັນ compiler ສົມມຸດວ່າຮູບແບບທີ່ແຕກຕ່າງກັນທີ່ໃຊ້ໂດຍ DFPs (Device Family Packs). ນີ້ຫມາຍຄວາມວ່າ DFP ເກົ່າອາດຈະບໍ່ເຮັດວຽກກັບການປ່ອຍນີ້, ແລະ compilers ເກົ່າຈະບໍ່ສາມາດນໍາໃຊ້ DFPs ຫລ້າສຸດ.
4.3. ເວີຊັ່ນ 2.19 (ການປ່ອຍຄວາມປອດໄພທີ່ມີປະໂຫຍດ)
ບໍ່ມີ.
4.4. ລຸ້ນ 2.10
ບໍ່ມີ
4.5. ລຸ້ນ 2.05
Const objects in program memory ຈື່ໄວ້ວ່າຕາມຄ່າເລີ່ມຕົ້ນ, const-qualfiied objects ຈະຖືກວາງ ແລະເຂົ້າເຖິງໃນຫນ່ວຍຄວາມຈໍາຂອງໂປຣແກຣມ (ຕາມທີ່ອະທິບາຍໄວ້). ນີ້ຈະສົ່ງຜົນກະທົບຕໍ່ຂະຫນາດແລະຄວາມໄວການປະຕິບັດຂອງໂຄງການຂອງທ່ານ, ແຕ່ຄວນຫຼຸດຜ່ອນການໃຊ້ RAM. ຄຸນສົມບັດນີ້ສາມາດຖືກປິດການນຳໃຊ້ໄດ້, ຖ້າຕ້ອງການ, ໂດຍໃຊ້ຕົວເລືອກ -mnoconst-data-in-progmem.
4.6. ລຸ້ນ 2.00
ຟິວ​ການ​ຕັ້ງ​ຄ່າ ຟິວ​ການ​ຕັ້ງ​ຄ່າ​ອຸ​ປະ​ກອນ​ໃນ​ປັດ​ຈຸ​ບັນ​ສາ​ມາດ​ຕັ້ງ​ໂຄງ​ການ​ໂດຍ​ການ​ນໍາ​ໃຊ້ pragma config ປະ​ຕິ​ບັດ​ຕາມ​ໂດຍ​ການ​ຕັ້ງ​ຄ່າ​ຄູ່​ເພື່ອ​ລະ​ບຸ​ສະ​ຖາ​ນະ​ຂອງ​ຟິວ​, ເຊັ່ນ​:
#pragma config WDTON = SET
#pragma config BODLEVEL = BODLEVEL_4V3
ວັດຖຸແລະຫນ້າທີ່ຢ່າງແທ້ຈິງ ຕອນນີ້ວັດຖຸ ແລະຟັງຊັນຕ່າງໆສາມາດຖືກວາງໄວ້ທີ່ທີ່ຢູ່ສະເພາະໃນຫນ່ວຍຄວາມຈໍາໂດຍໃຊ້ຕົວລະບຸ CCI (ທີ່ຢູ່), ສໍາລັບການຍົກຕົວຢ່າງ.ample:
#ລວມທັງ
int foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
ການໂຕ້ຖຽງກັບຕົວລະບຸນີ້ຕ້ອງເປັນ ຄ່າຄົງທີ່ທີ່ສະແດງເຖິງທີ່ຢູ່ທີ່ byte ຫຼືຄໍາແນະນໍາທໍາອິດຈະຖືກວາງໄວ້. ທີ່ຢູ່ RAM ແມ່ນສະແດງໂດຍການໃຊ້ຄ່າຊົດເຊີຍຂອງ 0x800000. ເປີດໃຊ້ CCI ເພື່ອໃຊ້ຄຸນສົມບັດນີ້.
syntax ຟັງຊັນຂັດຂວາງໃຫມ່ ໃນປັດຈຸບັນ compiler ຍອມຮັບຕົວລະບຸ CCI _interrupt (num) ເພື່ອຊີ້ບອກວ່າຟັງຊັນ C ແມ່ນຕົວຈັດການຂັດຂວາງ. ຕົວລະບຸເອົາຕົວເລກລົບກວນ, ຕົວຢ່າງເຊັ່ນample:
#ລວມທັງ
void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }

ບັນຫາຄົງທີ່

ຕໍ່ໄປນີ້ແມ່ນການແກ້ໄຂທີ່ໄດ້ເຮັດກັບ compiler. ເຫຼົ່ານີ້ອາດຈະແກ້ໄຂຂໍ້ບົກພ່ອງໃນລະຫັດທີ່ສ້າງຂຶ້ນຫຼືປ່ຽນແປງການທໍາງານຂອງ compiler ກັບສິ່ງທີ່ມີຈຸດປະສົງຫຼືກໍານົດໂດຍຄໍາແນະນໍາຂອງຜູ້ໃຊ້. ໝາຍເລກເວີຊັນໃນຫົວເລື່ອງຍ່ອຍສະແດງເຖິງລຸ້ນ compiler ທຳອິດທີ່ຈະມີການແກ້ໄຂສຳລັບບັນຫາທີ່ຕາມມາ. ປ້າຍວົງເລັບຢູ່ໃນຫົວຂໍ້ແມ່ນການກໍານົດບັນຫານັ້ນຢູ່ໃນຖານຂໍ້ມູນການຕິດຕາມ. ເຫຼົ່ານີ້ອາດຈະເປັນປະໂຫຍດຖ້າຫາກວ່າທ່ານຕ້ອງການຕິດຕໍ່ສະຫນັບສະຫນູນ.
ກະລຸນາຮັບຊາບວ່າບາງບັນຫາສະເພາະອຸປະກອນຖືກແກ້ໄຂໃນ Device Family Pack (DFP) ທີ່ກ່ຽວຂ້ອງກັບອຸປະກອນ. ເບິ່ງ MPLAB Pack Manager ສໍາລັບຂໍ້ມູນກ່ຽວກັບການປ່ຽນແປງທີ່ເຮັດກັບ DFPs ແລະເພື່ອດາວໂຫລດຊຸດຫລ້າສຸດ.

5.1. ລຸ້ນ 2.41
ບັນຫາ Dongle ກ່ຽວກັບ Ventura (XC8-3088) Dongles ໃຊ້ເພື່ອອະນຸຍາດຄອມພີວເຕີອາດຈະບໍ່ຖືກອ່ານຢ່າງຖືກຕ້ອງໃນ macOS Ventura hosts, ສົ່ງຜົນໃຫ້ໃບອະນຸຍາດລົ້ມເຫລວ. ການປ່ຽນແປງຜູ້ຈັດການໃບອະນຸຍາດ XCLM ແກ້ໄຂບັນຫານີ້.
ຕົວຊີ້ບອກການຈັດສັນໜ່ວຍຄວາມຈຳບໍ່ຖືກຕ້ອງ (XC8-2925) ຄວາມພະຍາຍາມທີ່ຈະຈັດສັນ SIZE_MAX bytes (ຫຼືຄ່າໃກ້ຄຽງກັບນີ້) ຂອງຫນ່ວຍຄວາມຈໍາໂດຍໃຊ້ຟັງຊັນການຈັດການຫນ່ວຍຄວາມຈໍາຫ້ອງສະຫມຸດມາດຕະຖານ (malloc () et al) ບໍ່ຖືກຕ້ອງ. ມັນບໍ່ໄດ້ຄໍານຶງເຖິງວ່າ bytes ພິເສດແມ່ນຕ້ອງການນອກເຫນືອໄປຈາກບລັອກທີ່ຮ້ອງຂໍເມື່ອນໍາໃຊ້ການປະຕິບັດການຈັດສັນຫນ່ວຍຄວາມຈໍາແບບເຄື່ອນໄຫວແບບງ່າຍດາຍ. ຕອນນີ້ຕົວຊີ້ NULL ຈະຖືກສົ່ງຄືນ ແລະ errno ຕັ້ງເປັນ ENOMEM ໃນສະຖານະການດັ່ງກ່າວ.
ຟັງຊັນ fma ທີ່ບໍ່ຖືກຕ້ອງຖືກເອົາອອກ (XC8-2913) ຫ້ອງສະຫມຸດມາດຕະຖານ C99 fma ( ) -family functions ( ) ບໍ່ໄດ້ຄິດໄລ່ການຄູນ-ເພີ່ມດ້ວຍຄວາມແມ່ນຍໍາອັນບໍ່ມີຂອບເຂດຕໍ່ກັບການຮອບດຽວ, ແຕ່ແທນທີ່ການສະສົມຄວາມຜິດພາດຂອງການຮອບດ້ວຍແຕ່ລະການດໍາເນີນງານ. ຟັງຊັນເຫຼົ່ານີ້ໄດ້ຖືກລຶບອອກຈາກຫ້ອງສະໝຸດທີ່ສະໜອງໃຫ້.
ການຈັດການແປງສະຕຣິງທີ່ບໍ່ດີ (XC8-2921, XC8-2652) ເມື່ອ 'subject sequence' ສໍາລັບການປ່ຽນໂດຍ strtod Cr ປະກອບດ້ວຍສິ່ງທີ່ເບິ່ງຄືວ່າເປັນຕົວເລກທີ່ເລື່ອນໄດ້ໃນຮູບແບບ exponential ແລະມີລັກສະນະທີ່ບໍ່ຄາດຄິດຫຼັງຈາກຕົວອັກສອນ e / E, ຫຼັງຈາກນັ້ນບ່ອນທີ່ endptr ໄດ້ຖືກສະຫນອງໃຫ້, ມັນໄດ້ຖືກມອບຫມາຍທີ່ຢູ່ ໃຫ້ມັນຊີ້ໃຫ້ເຫັນເຖິງລັກສະນະຫຼັງຈາກ e / E, ໃນຂະນະທີ່ມັນຄວນຈະຊີ້ໃຫ້ເຫັນເຖິງຕົວອັກສອນ e / E ຕົວຂອງມັນເອງ, ເພາະວ່າມັນບໍ່ໄດ້ຖືກປ່ຽນໃຈເຫລື້ອມໃສ. ຕົວຢ່າງample, strtod (“100exx”, &ep) ຄວນກັບຄືນ 100.00 ແລະຕັ້ງ ep ໃຫ້ຊີ້ໄປຫາສ່ວນ “exx” ຂອງສະຕຣິງ, ໃນຂະນະທີ່ຟັງຊັນໄດ້ສົ່ງຄືນຄ່າທີ່ຖືກຕ້ອງ ແຕ່ຕັ້ງ ep ໃຫ້ຊີ້ໄປຫາສ່ວນ “xx” ຂອງສະຕຣິງ. .

5.2. ລຸ້ນ 2.40
ຜ່ອນຄາຍເກີນໄປ (XCS-2876) ເມື່ອໃຊ້ທາງເລືອກ -mrelax, compiler ບໍ່ໄດ້ຈັດສັນບາງສ່ວນຮ່ວມກັນ, ເຮັດໃຫ້ຂະຫນາດລະຫັດທີ່ເຫມາະສົມຫນ້ອຍລົງ. ນີ້ອາດຈະເກີດຂຶ້ນກັບລະຫັດທີ່ໃຊ້ຫ້ອງສະຫມຸດ 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) ຢ່າງຖືກຕ້ອງ ລະຫັດເລີ່ມຕົ້ນຂອງ runtime ທີ່ໃຊ້ໂດຍອຸປະກອນ AVR64EA ບໍ່ໄດ້ຄໍານຶງເຖິງວ່າການລົງທະບຽນ NVMCTRL ຢູ່ພາຍໃຕ້ການປົກປ້ອງການປ່ຽນແປງການຕັ້ງຄ່າ (CCP) ແລະບໍ່ສາມາດກໍານົດ I0 SFR ເປັນຫນ້າທີ່ນໍາໃຊ້ໂດຍ const-data-in-configmapped-progmem. ຄຸນ​ນະ​ສົມ​ບັດ compiler​. ການປ່ຽນແປງທີ່ສ້າງຂຶ້ນໃນ AVR-Ex_DFP ເວີຊັນ 2.2.55 ຈະເຮັດໃຫ້ລະຫັດການເລີ່ມຕົ້ນຂອງ runtime ສາມາດຂຽນໃສ່ທະບຽນນີ້ຢ່າງຖືກຕ້ອງ.
ການປ່ຽນແປງ DFP ເພື່ອຫຼີກເວັ້ນ ແຜນທີ່ແຟລດ (XC8-2847) ປະຕິບັດການແກ້ໄຂບັນຫາກັບຄຸນສົມບັດອຸປະກອນແຜນທີ່ແຟລດທີ່ລາຍງານໃນ AVR128DA28/32/48/64 Silicon Errata (D580000882) ແລ້ວ. ຄຸນສົມບັດ compiler const-data-in-config-mapped-progmem ຈະບໍ່ຖືກນຳໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນສຳລັບອຸປະກອນທີ່ໄດ້ຮັບຜົນກະທົບ ແລະການປ່ຽນແປງນີ້ຈະປາກົດຢູ່ໃນ AVR-Dx_DFP ເວີຊັນ 2.2.160.
ສ້າງຂໍ້ຜິດພາດກັບ sinhf ຫຼື coshf (XC8-2834) ຄວາມພະຍາຍາມທີ່ຈະນໍາໃຊ້ຫນ້າທີ່ຫ້ອງສະຫມຸດ sinhf () ຫຼື coshf () ເຮັດໃຫ້ເກີດຄວາມຜິດພາດໃນການເຊື່ອມໂຍງ, ອະທິບາຍການອ້າງອີງທີ່ບໍ່ໄດ້ກໍານົດ. ຟັງຊັນທີ່ຂາດຫາຍໄປທີ່ອ້າງອີງໃນປັດຈຸບັນໄດ້ຖືກລວມເຂົ້າໃນການແຈກຢາຍ compiler.
ສ້າງຂໍ້ຜິດພາດກັບ nopa (XC,8-2833) ການ​ນໍາ​ໃຊ້​ຄຸນ​ສົມ​ບັດ nopa ກັບ​ການ​ທໍາ​ງານ​ທີ່​ມີ​ຊື່​ສະ​ພາ​ສາ​ສະ​ຫມັກ​ຂອງ​ຕົນ​ທີ່​ລະ​ບຸ​ໄວ້​ໂດຍ​ການ​ນໍາ​ໃຊ້ asm ( ) ກະ​ຕຸ້ນ​ຂໍ້​ຄວາມ​ຄວາມ​ຜິດ​ພາດ​ຈາກ​ການ​ປະ​ກອບ​. ການປະສົມປະສານນີ້ເປັນໄປບໍ່ໄດ້.
ຄວາມລົ້ມເຫຼວຂອງການເຮັດວຽກ Variadic ກັບ arguments ຕົວຊີ້ (XC8-2755, XC8-2731) ຟັງຊັນທີ່ມີຈໍານວນຕົວແປຂອງອາກິວເມັນຄາດວ່າຕົວຊີ້ 24-bit (ປະເພດ memx) ຈະຖືກສົ່ງຜ່ານໃນລາຍການ argument ຕົວປ່ຽນແປງເມື່ອຄຸນສົມບັດ const-data-in-progmem ຖືກເປີດໃຊ້. ການໂຕ້ຖຽງທີ່ເປັນຕົວຊີ້ໄປຫາຫນ່ວຍຄວາມຈໍາຂໍ້ມູນກໍາລັງຖືກສົ່ງຜ່ານເປັນວັດຖຸ 16 ບິດ, ເຊິ່ງກໍ່ໃຫ້ເກີດຄວາມລົ້ມເຫຼວຂອງລະຫັດໃນເວລາທີ່ພວກເຂົາຖືກອ່ານໃນທີ່ສຸດ. ເມື່ອຄຸນສົມບັດ constdata-in-progmem ຖືກເປີດໃຊ້, ທັງໝົດ 16-bit pointers arguments ດຽວນີ້ຖືກປ່ຽນເປັນ pointers 24-bit.
ຟັງຊັນຫ້ອງສະໝຸດ strtoxxx ລົ້ມເຫລວ (XC8-2620) ເມື່ອຄຸນສົມບັດ const-data-in-progmem ຖືກເປີດໃຊ້, ພາລາມິເຕີ endptr ໃນຟັງຊັນຫ້ອງສະຫມຸດ strtoxxx ບໍ່ໄດ້ຖືກປັບປຸງໃຫ້ເຫມາະສົມສໍາລັບອາກິວເມັນສະຕຣິງແຫຼ່ງທີ່ບໍ່ໄດ້ຢູ່ໃນຫນ່ວຍຄວາມຈໍາຂອງໂຄງການ.
ແຈ້ງເຕືອນການສົ່ງສັນຍານທີ່ບໍ່ຖືກຕ້ອງ (XC8-2612) ດຽວນີ້ compiler ຈະອອກຂໍ້ຜິດພາດຖ້າຄຸນສົມບັດ const-in-progmem ຖືກເປີດໃຊ້ງານແລະທີ່ຢູ່ຂອງ string literal ແມ່ນຖືກສົ່ງກັບພື້ນທີ່ທີ່ຢູ່ຂໍ້ມູນຢ່າງຊັດເຈນ (ຫຼຸດລົງ const qualifier), ສໍາລັບການຍົກຕົວຢ່າງ.ample, (uint 8_t *) “ສະບາຍດີໂລກ!”. ການເຕືອນໄພມີບັນຫາຖ້າຫາກວ່າທີ່ຢູ່ອາດຈະບໍ່ຖືກຕ້ອງໃນເວລາທີ່ຕົວຊີ້ຂໍ້ມູນ const ຖືກຄາສທໄປຫາພື້ນທີ່ທີ່ຢູ່ຂໍ້ມູນຢ່າງຊັດເຈນ.
ການຈັດວາງວັດຖຸ const ທີ່ບໍ່ຮູ້ຈັກ (XC8-2408) uninitialized const ແລະ const volatile objects ບໍ່ໄດ້ຖືກຈັດໃສ່ໃນຫນ່ວຍຄວາມຈໍາຂອງໂປລແກລມໃນອຸປະກອນທີ່ແຜນທີ່ທັງຫມົດຫຼືບາງສ່ວນຂອງຫນ່ວຍຄວາມຈໍາຂອງໂຄງການຂອງພວກເຂົາເຂົ້າໄປໃນພື້ນທີ່ທີ່ຢູ່ຂໍ້ມູນ. ສໍາລັບອຸປະກອນເຫຼົ່ານີ້, ວັດຖຸດັ່ງກ່າວໃນປັດຈຸບັນໄດ້ຖືກຈັດໃສ່ໃນຫນ່ວຍຄວາມຈໍາຂອງໂຄງການ, ເຮັດໃຫ້ການດໍາເນີນງານຂອງເຂົາເຈົ້າສອດຄ່ອງກັບອຸປະກອນອື່ນໆ.

5.3. ເວີຊັ່ນ 2.39 (ການປ່ອຍຄວາມປອດໄພທີ່ມີປະໂຫຍດ)
ບໍ່ມີ.
5.4. ລຸ້ນ 2.36
ຜິດພາດໃນເວລາຊັກຊ້າ (XC8-2774) ການປ່ຽນແປງເລັກນ້ອຍໃນຄ່າເລີ່ມຕົ້ນການເພີ່ມປະສິດທິພາບຂອງ Free mode ປ້ອງກັນການພັບແບບຄົງທີ່ຂອງ operand expression ໄປສູ່ການຊັກຊ້າຂອງຟັງຊັນໃນຕົວ, ສົ່ງຜົນໃຫ້ພວກມັນຖືກຖືວ່າບໍ່ຄົງທີ່ ແລະເຮັດໃຫ້ເກີດຄວາມຜິດພາດ: buildin avr delay_cycles ຄາດວ່າຈະເປັນຈໍານວນເຕັມເວລາ compile constant.
5.5. ລຸ້ນ 2.35
ການຈັດສັນຕິດຕໍ່ກັນໂດຍໃຊ້ _at (XC8-2653) ການຈັດສັນທີ່ຕິດກັນຂອງຫຼາຍບ່ອນຢູ່ໃນພາກສ່ວນທີ່ມີຊື່ດຽວກັນ ແລະການໃຊ້ _at( ) ເຮັດວຽກບໍ່ຖືກຕ້ອງ. ຕົວຢ່າງample:
const char arr1[] __attribute__((section(“.mysec”)))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __attribute__((section(“.mysec”)))) = {0xEF, 0xFE};
ຄວນວາງ arr2 ທັນທີຫຼັງຈາກ arr1.
ການລະບຸທີ່ຢູ່ເລີ່ມຕົ້ນຂອງພາກ (XC8-2650) The -W1, –section-start option ບໍ່ໄດ້ຕັ້ງພາກສ່ວນຢູ່ໃນທີ່ຢູ່ເລີ່ມຕົ້ນທີ່ຖືກແຕ່ງຕັ້ງຢ່າງງຽບໆ. ບັນຫານີ້ໄດ້ຖືກແກ້ໄຂແລ້ວສໍາລັບພາກສ່ວນທີ່ມີຊື່ແບບກໍາຫນົດເອງ; ແນວໃດກໍ່ຕາມ, ມັນຈະບໍ່ເຮັດວຽກສໍາລັບພາກສ່ວນມາດຕະຖານເຊັ່ນ . ຂໍ້ຄວາມ ຫຼື . bss, ເຊິ່ງຕ້ອງຖືກວາງໄວ້ໂດຍໃຊ້ຕົວເລືອກ -W1, -T.
Linker ຂັດຂ້ອງໃນເວລາທີ່ຜ່ອນຄາຍ (XC8-2647) ເມື່ອການເພີ່ມປະສິດທິພາບ -mrelax ຖືກເປີດໃຊ້ແລະມີສ່ວນລະຫັດຫຼືຂໍ້ມູນທີ່ບໍ່ເຫມາະສົມກັບຫນ່ວຍຄວາມຈໍາທີ່ມີຢູ່, linker crashed. ໃນປັດຈຸບັນ, ໃນສະຖານະການດັ່ງກ່າວ, ຂໍ້ຄວາມຄວາມຜິດພາດແມ່ນອອກແທນ.

No-falling-back (XC8-2646) The –nofallback ທາງເລືອກບໍ່ໄດ້ຖືກປະຕິບັດຢ່າງຖືກຕ້ອງ, ຫຼືເອກະສານ. ດຽວນີ້ສາມາດເລືອກໄດ້ເພື່ອຮັບປະກັນວ່າ compiler ຈະບໍ່ກັບຄືນໄປຫາການຕັ້ງຄ່າການເພີ່ມປະສິດທິພາບທີ່ຕ່ໍາກວ່າຖ້າ compiler ບໍ່ມີໃບອະນຸຍາດ, ແລະແທນທີ່ຈະອອກຂໍ້ຜິດພາດ.

ການເພີ່ມປະສິດທິພາບຄວາມໄວທີ່ບໍ່ເຫມາະສົມ (X03-2637) ຂັ້ນຕອນການເພີ່ມປະສິດທິພາບ abstraction ໄດ້ຖືກເປີດໃຊ້ໃນເວລາທີ່ເລືອກການເພີ່ມປະສິດທິພາບລະດັບ 3 (-03). ການເພີ່ມປະສິດທິພາບເຫຼົ່ານີ້ຫຼຸດລົງຂະຫນາດລະຫັດໂດຍຄ່າໃຊ້ຈ່າຍຂອງຄວາມໄວລະຫັດ, ດັ່ງນັ້ນບໍ່ຄວນຖືກປະຕິບັດ.
EEPROM ບໍ່ດີ ການເຂົ້າເຖິງ (XC8-2629) ການ eeprom_read_block routine ເຮັດວຽກບໍ່ຖືກຕ້ອງໃນອຸປະກອນ Xmega ເມື່ອຕົວເລືອກ -mconst-data-in-progmem ຖືກເປີດໃຊ້ (ເຊິ່ງເປັນສະຖານະເລີ່ມຕົ້ນ), ສົ່ງຜົນໃຫ້ຫນ່ວຍຄວາມຈໍາ EEPROM ບໍ່ໄດ້ຮັບການອ່ານຢ່າງຖືກຕ້ອງ.
ການຈັດສັນຫນ່ວຍຄວາມຈໍາບໍ່ຖືກຕ້ອງ (XC8-2593, XC8-2651) ເມື່ອ -Ttext ຫຼື -Tdata ທາງເລືອກຕົວເຊື່ອມຕໍ່ (ສໍາລັບຕົວຢ່າງample ຜ່ານ​ການ​ນໍາ​ໃຊ້​ທາງ​ເລືອກ​ການ​ຂັບ -vl​) ແມ່ນ​ລະ​ບຸ​ໄວ້​, ຂໍ້​ຄວາມ​ທີ່​ສອດ​ຄ້ອງ​ກັນ / ຕົ້ນ​ກໍາ​ເນີດ​ຂໍ້​ມູນ​ໄດ້​ຮັບ​ການ​ປັບ​ປຸງ​; ຢ່າງໃດກໍຕາມ, ທີ່ຢູ່ສຸດທ້າຍບໍ່ໄດ້ຖືກປັບຕາມຄວາມເຫມາະສົມ, ຊຶ່ງສາມາດນໍາໄປສູ່ພາກພື້ນເກີນຂອບເຂດຄວາມຈໍາຂອງອຸປະກອນເປົ້າຫມາຍດັ່ງກ່າວ.
ການຂັດຂ້ອງກັບຟັງຊັນເກີນຄຸນສົມບັດ (XC8-2580) Compiler ຂັດຂ້ອງຖ້າຟັງຊັນຖືກປະກາດໃຊ້ຫຼາຍກວ່າໜຶ່ງຄຸນສົມບັດລົບກວນ, signal ຫຼື nmi, ເຊັ່ນ: attribute ( ( signal , interrupt ) ).
ລະຫັດຂັດຂວາງ ATtiny ບໍ່ຖືກຕ້ອງ (XC8-2465) ເມື່ອການສ້າງອຸປະກອນ ATtiny ແລະການເພີ່ມປະສິດທິພາບຖືກປິດໃຊ້ງານ (-00), ຟັງຊັນລົບກວນອາດຈະເຮັດໃຫ້ operand ອອກຈາກຂໍ້ຄວາມ assembler ໄລຍະ.
ທາງເລືອກທີ່ບໍ່ໄດ້ຜ່ານ (XC8-2452) ເມື່ອນໍາໃຊ້ທາງເລືອກທີ່ມີຫຼາຍທາງເລືອກຕົວເຊື່ອມຕໍ່ທີ່ແຍກກັນດ້ວຍເຄື່ອງໝາຍຈຸດ, ບໍ່ແມ່ນທຸກທາງເລືອກຂອງຕົວເຊື່ອມຕໍ່ຖືກສົ່ງໄປຫາຕົວເຊື່ອມຕໍ່.
ຄວາມຜິດພາດໃນການອ່ານຄວາມຊົງຈໍາຂອງໂປຣແກຣມໂດຍທາງອ້ອມ (X03-2450) ໃນບາງກໍລະນີ, compiler ໄດ້ຜະລິດຂໍ້ຜິດພາດພາຍໃນ (insn ທີ່ບໍ່ສາມາດຮັບຮູ້ໄດ້) ເມື່ອອ່ານຄ່າສອງ byte ຈາກຕົວຊີ້ໄປຫາຫນ່ວຍຄວາມຈໍາຂອງໂຄງການ.
5.6. ລຸ້ນ 2.32
ການເຂົ້າເຖິງທີສອງຂອງ ຫ້ອງສະໝຸດລົ້ມເຫລວ (XC8-2381) ກຳລັງເອີ້ນໃຊ້ xc8-ar ເວີຊັນ Windows. archiver ຫ້ອງສະຫມຸດ .exe ເປັນຄັ້ງທີສອງເພື່ອເຂົ້າເຖິງຄັງເກັບຂອງຫ້ອງສະຫມຸດທີ່ມີຢູ່ແລ້ວອາດຈະລົ້ມເຫລວໂດຍບໍ່ສາມາດປ່ຽນຊື່ຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດ.
5.7. ລຸ້ນ 2.31
ການລວບລວມທີ່ບໍ່ໄດ້ອະທິບາຍ ຄວາມລົ້ມເຫຼວ (XC8-2367) ເມື່ອແລ່ນຢູ່ໃນແພລດຟອມ Windows ທີ່ມີໄດເລກະທໍລີຊົ່ວຄາວຂອງລະບົບຕັ້ງເປັນເສັ້ນທາງທີ່ລວມເອົາຈຸດ '.'. ລັກສະນະ, compiler ອາດຈະລົ້ມເຫລວໃນການປະຕິບັດ.
5.8. ລຸ້ນ 2.30
ປ້າຍກຳກັບທົ່ວໂລກຖືກວາງໃສ່ຜິດຫຼັງຈາກກຳນົດ (XC8-2299) ລະຫັດການປະກອບທີ່ຂຽນດ້ວຍມືທີ່ວາງປ້າຍຊື່ທົ່ວໂລກພາຍໃນລຳດັບການປະກອບທີ່ແຍກອອກມາຈາກການສະສົມຂອງຂັ້ນຕອນອາດຈະບໍ່ໄດ້ຮັບການປ່ຽນຕຳແໜ່ງຢ່າງຖືກຕ້ອງ.
ອຸປະຕິເຫດທີ່ຜ່ອນຄາຍ (XC8-2287) ການໃຊ້ຕົວເລືອກ -mrelax ອາດຈະເຮັດໃຫ້ຕົວເຊື່ອມຕໍ່ລົ້ມລົງໃນເວລາທີ່ການເພີ່ມປະສິດທິພາບການຜ່ອນຄາຍການໂດດຫາງພະຍາຍາມເອົາຄໍາແນະນໍາ ret ທີ່ບໍ່ແມ່ນໃນຕອນທ້າຍຂອງພາກສ່ວນໃດຫນຶ່ງ.
ຂັດຂ້ອງໃນເວລາທີ່ການເພີ່ມປະສິດທິພາບປ້າຍກຳກັບເປັນຄ່າ (XC8-2282) ລະຫັດທີ່ໃຊ້ “Labels as values” ການຂະຫຍາຍພາສາ GNU C ອາດຈະເຮັດໃຫ້ການເພີ່ມປະສິດທິພາບຂອງ abstraction ຂັ້ນຕອນການຂັດຂ້ອງ, ໂດຍມີຂໍ້ຜິດພາດໃນການແກ້ໄຂໄລຍະ VMA ທີ່ໄດ້ກໍານົດໄວ້.
ບໍ່ແມ່ນແນວນັ້ນ (XC8-2271) ຕົວແບບສໍາລັບ st rsr ( ) ແລະຫນ້າທີ່ອື່ນໆຈາກ ບໍ່ໄດ້ລະບຸຄຸນສົມບັດ const ທີ່ບໍ່ແມ່ນມາດຕະຖານຢູ່ໃນຕົວຊີ້ສະຕຣິງທີ່ສົ່ງຄືນເມື່ອຄຸນສົມບັດ -mconst-data-inprogmem ປິດໃຊ້ງານ. ກະລຸນາຮັບຊາບວ່າດ້ວຍອຸປະກອນ avrxmega3 ແລະ avrtiny, ຄຸນສົມບັດນີ້ຈະຖືກເປີດໃຊ້ຢ່າງຖາວອນ.
ການສູນເສຍເບື້ອງຕົ້ນ (XC8-2269) ເມື່ອຫຼາຍກວ່າ ຫນຶ່ງໃນຕົວແປໃນຫນ່ວຍການແປພາສາໄດ້ຖືກຈັດໃສ່ໃນພາກ (ໂດຍໃຊ້ _section ຫຼື _attribute_ ( (section) )), ແລະຕົວແປທໍາອິດດັ່ງກ່າວແມ່ນສູນຫຼືບໍ່ມີຕົວກໍານົດເບື້ອງຕົ້ນ, ຕົວກໍານົດເບື້ອງຕົ້ນສໍາລັບຕົວແປອື່ນໆໃນຫນ່ວຍແປດຽວກັນທີ່ວາງໄວ້. ໃນພາກດຽວກັນໄດ້ຖືກສູນເສຍໄປ.
5.1. ເວີຊັ່ນ 2.29 (ການປ່ອຍຄວາມປອດໄພທີ່ມີປະໂຫຍດ)
ບໍ່ມີ.
5.2. ລຸ້ນ 2.20
ຜິດພາດກັບຄໍາສັ່ງຍາວ (XC8-1983) ເມື່ອໃຊ້ເປົ້າໝາຍ AVR, ຄອມພີວເຕີອາດຈະຢຸດດ້ວຍ a file ບໍ່ພົບຂໍ້ຜິດພາດ, ຖ້າເສັ້ນຄໍາສັ່ງມີຂະຫນາດໃຫຍ່ທີ່ສຸດແລະມີຕົວອັກສອນພິເສດເຊັ່ນຄໍາເວົ້າ, backslashes, ແລະອື່ນໆ.
ບໍ່ໄດ້ມອບໝາຍພາກສ່ວນ rodata (XC8-1920) ຕົວເຊື່ອມຕໍ່ AVR ລົ້ມເຫລວໃນການມອບໝາຍໜ່ວຍຄວາມຈຳສຳລັບພາກສ່ວນ rodata ແບບກຳນົດເອງ ເມື່ອສ້າງສຳລັບສະຖາປັດຕະຍະກຳ avrxmega3 ແລະ avrtiny, ອາດຈະເຮັດໃຫ້ເກີດຄວາມຜິດພາດການທັບຊ້ອນຂອງໜ່ວຍຄວາມຈຳ.
5.3. ລຸ້ນ 2.19 (ການປ່ອຍຄວາມປອດໄພທີ່ເປັນປະໂຫຍດ)
ບໍ່ມີ.
5.4. ລຸ້ນ 2.10
ການຍົກຍ້າຍລົ້ມເຫລວ (XC8-1891) ຜູ້ຈັດສັນທີ່ເໝາະສົມທີ່ສຸດແມ່ນປ່ອຍໃຫ້ຄວາມຊົງຈຳ 'ຮູ' ຢູ່ໃນລະຫວ່າງພາກສ່ວນຕ່າງໆຫຼັງຈາກການຜ່ອນຄາຍຕົວເຊື່ອມຕໍ່. ນອກເຫນືອຈາກຄວາມຊົງຈໍາທີ່ແຕກແຍກ, ນີ້ຈະເພີ່ມຄວາມເປັນໄປໄດ້ຂອງຄວາມລົ້ມເຫຼວຂອງການຍ້າຍຕົວເຊື່ອມຕໍ່ທີ່ກ່ຽວຂ້ອງກັບການກະໂດດຂອງ pc-relative jumps ຫຼືການໂທອອກຈາກຂອບເຂດ.
ຄໍາແນະນໍາທີ່ບໍ່ໄດ້ປ່ຽນແປງໂດຍການຜ່ອນຄາຍ (XC8-1889) ການຜ່ອນຄາຍຂອງ Linker ບໍ່ໄດ້ເກີດຂຶ້ນສໍາລັບການໂດດຫຼືໂທຫາຄໍາແນະນໍາທີ່ເປົ້າຫມາຍທີ່ສາມາດບັນລຸໄດ້ຖ້າຜ່ອນຄາຍ.
ຫາຍໄປ ການທໍາງານ (XC8E-388) ຫຼາຍຄໍານິຍາມຈາກ , ເຊັ່ນ: clock_div_t ແລະ clock_prescale ທີ່ກໍານົດໄວ້ () , ບໍ່ໄດ້ຖືກກໍານົດສໍາລັບອຸປະກອນ, ລວມທັງ ATmega324PB, ATmega328PB, ATtiny441, ແລະ ATtiny841.
ບໍ່ມີມາໂຄຣ ມາໂຄຣໂປຣເຊສເຊີກ່ອນ _XC8_MODE_, _XC8_VERS ION, _XC, ແລະ _XC8 ບໍ່ໄດ້ຖືກກຳນົດໂດຍອັດຕະໂນມັດໂດຍຄອມພີວເຊີ. ເຫຼົ່ານີ້ແມ່ນມີໃນປັດຈຸບັນ.
5.5. ລຸ້ນ 2.05
ການລວບລວມຂໍ້ມູນພາຍໃນຜິດພາດ (XC8-1822) ເມື່ອສ້າງພາຍໃຕ້ Windows, ຄວາມຜິດພາດການລວບລວມຂໍ້ມູນພາຍໃນອາດຈະຖືກຜະລິດໃນເວລາທີ່ເພີ່ມປະສິດທິພາບລະຫັດ.
ບໍ່ກວດພົບ RAM overflow (XC8-1800, XC8-1796) ໂປຣແກຣມທີ່ເກີນ RAM ທີ່ມີຢູ່ນັ້ນບໍ່ໄດ້ຖືກກວດພົບໂດຍ compiler ໃນບາງສະຖານະການ, ສົ່ງຜົນໃຫ້ລະຫັດ runtime ລົ້ມເຫລວ.
ໜ່ວຍຄວາມຈຳແຟລດຖືກລະເວັ້ນ (XC8-1792) ສໍາລັບອຸປະກອນ avrxmega3 ແລະ avrtiny, ບາງສ່ວນຂອງຫນ່ວຍຄວາມຈໍາ flash ອາດຈະຖືກປະໄວ້ໂດຍ MPLAB X. IDE.
ລົ້ມເຫລວໃນການປະຕິບັດຫຼັກ (XC8-1788) ໃນບາງສະຖານະການທີ່ໂປລແກລມບໍ່ມີຕົວແປທົ່ວໂລກກໍານົດ, ລະຫັດເລີ່ມຕົ້ນຂອງ runtime ບໍ່ໄດ້ອອກແລະຫນ້າທີ່ຕົ້ນຕໍ ( ) ບໍ່ເຄີຍມາຮອດ.
ຂໍ້ມູນຄວາມຈຳບໍ່ຖືກຕ້ອງ (XC8-1787) ສໍາລັບອຸປະກອນ avrxmega3 ແລະ avrtiny, ໂຄງການຂະຫນາດ avr ກໍາລັງລາຍງານວ່າຂໍ້ມູນແບບອ່ານເທົ່ານັ້ນກໍາລັງໃຊ້ RAM ແທນທີ່ຈະເປັນຫນ່ວຍຄວາມຈໍາຂອງໂຄງການ.
ການອ່ານໜ່ວຍຄວາມຈຳໂປຣແກຣມບໍ່ຖືກຕ້ອງ (XC8-1783) ໂຄງການທີ່ລວບລວມສໍາລັບອຸປະກອນທີ່ມີຫນ່ວຍຄວາມຈໍາຂອງໂປລແກລມທີ່ມີແຜນທີ່ເຂົ້າໄປໃນພື້ນທີ່ທີ່ຢູ່ຂໍ້ມູນແລະກໍານົດວັດຖຸໂດຍໃຊ້ macro/attribute PROGMEM ອາດຈະອ່ານວັດຖຸເຫຼົ່ານີ້ຈາກທີ່ຢູ່ທີ່ບໍ່ຖືກຕ້ອງ.
ຂໍ້ຜິດພາດພາຍໃນກັບຄຸນລັກສະນະ (XC8-1773) ມີຂໍ້ຜິດພາດພາຍໃນເກີດຂຶ້ນຖ້າທ່ານກໍານົດວັດຖຸຕົວຊີ້ດ້ວຍ
_at () ຫຼື attribute() tokens ລະຫວ່າງຊື່ຕົວຊີ້ແລະປະເພດການອ້າງອີງ, ສໍາລັບການຍົກຕົວຢ່າງ.ample, char *
_at (0x800150) cp; ດຽວນີ້ການເຕືອນໄພໄດ້ຖືກອອກຖ້າລະຫັດດັ່ງກ່າວພົບ.
ລົ້ມເຫລວໃນການປະຕິບັດຫຼັກ (XC8-1780, XC8-1767, XC8-1754) ການນໍາໃຊ້ຕົວແປ EEPROM ຫຼືກໍານົດ fuses ໂດຍໃຊ້ config pragma ອາດຈະເຮັດໃຫ້ເກີດການເລີ່ມຕົ້ນຂໍ້ມູນທີ່ບໍ່ຖືກຕ້ອງແລະ / ຫຼືຖືກລັອກການປະຕິບັດໂຄງການໃນລະຫັດເລີ່ມຕົ້ນຂອງ runtime, ກ່ອນທີ່ຈະເຖິງ main ( ) .
Fuse ຜິດພາດກັບອຸປະກອນຂະຫນາດນ້ອຍ (XC8-1778, XC8-1742) ອຸປະກອນ attiny4/5/9/10/20/40 ມີຄວາມຍາວຂອງຟິວທີ່ບໍ່ຖືກຕ້ອງທີ່ລະບຸໄວ້ໃນສ່ວນຫົວຂອງມັນ. files ທີ່ນໍາໄປສູ່ຄວາມຜິດພາດຂອງຕົວເຊື່ອມຕໍ່ໃນເວລາທີ່ພະຍາຍາມສ້າງລະຫັດທີ່ກໍານົດ fuses.
ການແບ່ງສ່ວນ ຄວາມຜິດ (XC8-1777) ຄວາມຜິດຂອງການແບ່ງສ່ວນແບບບໍ່ຢຸດຢັ້ງໄດ້ຖືກແກ້ໄຂແລ້ວ.
Assembler crash (XC8-1761) ເຄື່ອງປະກອບ avr-as ອາດຈະຂັດຂື້ນເມື່ອ compiler ເຮັດວຽກພາຍໃຕ້ Ubuntu 18.
ບໍ່ໄດ້ລຶບລ້າງວັດຖຸ (XC8-1752) ວັດຖຸໄລຍະເວລາການເກັບຮັກສາແບບຄົງທີ່ທີ່ບໍ່ໄດ້ໃຊ້ໃນເບື້ອງຕົ້ນອາດຈະບໍ່ຖືກລຶບລ້າງໂດຍລະຫັດເລີ່ມຕົ້ນຂອງ runtime.
ການລະເມີດຂໍ້ກໍາຫນົດອຸປະກອນທີ່ຂັດກັນຖືກລະເລີຍ (XC8-1749) ຄອມພີວເຕີບໍ່ໄດ້ສ້າງຂໍ້ຜິດພາດເມື່ອຕົວເລືອກສະເພາະອຸປະກອນຫຼາຍອັນຖືກໃຊ້ ແລະຊີ້ບອກອຸປະກອນຕ່າງໆ.
ຄວາມຈໍາເສຍຫາຍໂດຍ heap (XC8-1748) The ສັນ​ຍາ​ລັກ _heap_start ຖືກ​ຕັ້ງ​ໄວ້​ຢ່າງ​ບໍ່​ຖືກ​ຕ້ອງ, ສົ່ງ​ຜົນ​ໃຫ້​ຄວາມ​ເປັນ​ໄປ​ໄດ້​ຂອງ​ຕົວ​ແປ​ທົ່ວ​ໄປ​ຈະ​ຖືກ​ເສຍ​ຫາຍ​ໂດຍ heap.
ການຍ້າຍຕົວເຊື່ອມຕໍ່ຜິດພາດ (XC8-1739) ຄວາມຜິດພາດການຍ້າຍຕົວເຊື່ອມຕໍ່ອາດຈະຖືກປ່ອຍອອກມາເມື່ອລະຫັດມີ rjmp ຫຼື rcall ທີ່ມີເປົ້າໝາຍຢູ່ຫ່າງກັນ 4k bytes.
5.6. ລຸ້ນ 2.00
ບໍ່ມີ.

ບັນຫາທີ່ຮູ້ຈັກ

ຕໍ່ໄປນີ້ແມ່ນຂໍ້ຈໍາກັດໃນການເຮັດວຽກຂອງ compiler. ເຫຼົ່ານີ້ອາດຈະເປັນຂໍ້ຈໍາກັດການເຂົ້າລະຫັດທົ່ວໄປ, ຫຼື deviations ຈາກຂໍ້ມູນທີ່ມີຢູ່ໃນຄູ່ມືຂອງຜູ້ໃຊ້. ປ້າຍວົງເລັບໃນຫົວຂໍ້ແມ່ນການລະບຸບັນຫານັ້ນຢູ່ໃນຖານຂໍ້ມູນການຕິດຕາມ. ນີ້ອາດຈະເປັນປະໂຫຍດຖ້າຫາກວ່າທ່ານຕ້ອງການຕິດຕໍ່ສະຫນັບສະຫນູນ. ລາຍການເຫຼົ່ານັ້ນທີ່ບໍ່ມີປ້າຍກຳກັບແມ່ນຂໍ້ຈຳກັດທີ່ອະທິບາຍເຖິງ modi operandi ແລະ ເຊິ່ງມີແນວໂນ້ມທີ່ຈະຍັງຄົງມີຜົນຖາວອນ.
6.1. MPLAB X IDE ການປະສົມປະສານ
MPLAB IDE integration ຖ້າ Compiler ຈະຖືກນໍາໃຊ້ຈາກ MPLAB IDE, ຫຼັງຈາກນັ້ນທ່ານຕ້ອງຕິດຕັ້ງ MPLAB IDE ກ່ອນທີ່ຈະຕິດຕັ້ງ Compiler.
6.2. ການສ້າງລະຫັດ
Segfault with section-anchors option (XC8-3045) ໂປຣແກຣມທີ່ກໍານົດຟັງຊັນທີ່ມີລາຍການອາກິວເມັນທີ່ປ່ຽນແປງໄດ້ ແລະທີ່ໃຊ້ຕົວເລືອກ -fsection-anchors ອາດຈະເຮັດໃຫ້ເກີດຄວາມຜິດພາດ compiler ພາຍໃນ: Segmentation fault.
ຂໍ້​ມູນ​ແກ້​ໄຂ​ບັນ​ຫາ​ບໍ່​ໄດ້​ຊິ້ງ (XC8-2948​) ເມື່ອການເພີ່ມປະສິດທິພາບການຜ່ອນຄາຍຕົວເຊື່ອມຕໍ່ຫຼຸດລົງຄໍາແນະນໍາ (ສໍາລັບຕົວຢ່າງample call to rcall ຄໍາແນະນໍາ), ແຖວແຫຼ່ງໄປຫາແຜນທີ່ທີ່ຢູ່ອາດຈະບໍ່ຢູ່ໃນ sync ໃນເວລາທີ່ມີຫຼາຍກວ່າຫນຶ່ງການດໍາເນີນງານ shrink ເກີດຂຶ້ນໃນພາກສ່ວນ.
ໃນ ex ຂ້າງລຸ່ມນີ້ample, ມີສອງໂທຫາ foo ທີ່ສິ້ນສຸດການຜ່ອນຄາຍກັບການໂທພີ່ນ້ອງ.
ການຈັດສັນໜ່ວຍຄວາມຈຳ PA ລົ້ມເຫລວ (XC8-2881) ເມື່ອນໍາໃຊ້ຕົວເພີ່ມປະສິດທິພາບການ abstraction ຂັ້ນຕອນ, ຕົວເຊື່ອມຕໍ່ອາດຈະລາຍງານຄວາມຜິດພາດການຈັດສັນຫນ່ວຍຄວາມຈໍາເມື່ອຂະຫນາດລະຫັດຢູ່ໃກ້ກັບຈໍານວນຫນ່ວຍຄວາມຈໍາຂອງໂປລແກລມທີ່ມີຢູ່ໃນອຸປະກອນ, ເຖິງແມ່ນວ່າໂຄງການຄວນຈະເຫມາະສົມກັບພື້ນທີ່ທີ່ມີຢູ່.
ບໍ່ແມ່ນ Smart-I0 (XC8-2872) ຄຸນສົມບັດ smart-io ຂອງ compiler ຈະສ້າງລະຫັດຍ່ອຍທີ່ຖືກຕ້ອງແຕ່ທີ່ດີທີ່ສຸດສໍາລັບຟັງຊັນ snprint f ຖ້າຄຸນສົມບັດ const-data-in-progmem ໄດ້ຖືກປິດໃຊ້ງານຫຼືຖ້າອຸປະກອນມີແຟດທັງຫມົດຂອງມັນຢູ່ໃນຫນ່ວຍຄວາມຈໍາຂໍ້ມູນ.
Smart-I0 (XC8-2869) ອັດສະລິຍະໜ້ອຍກວ່າ ຄຸນສົມບັດ smart-io ຂອງ compiler ຈະສ້າງລະຫັດທີ່ຖືກຕ້ອງແຕ່ເໝາະສົມທີ່ສຸດເມື່ອຕົວເລືອກ -flto ແລະ -fno-builtin ຖືກໃຊ້ທັງສອງ.
ການຈັດວາງຂໍ້ມູນແບບອ່ານເທົ່ານັ້ນທີ່ເໝາະສົມທີ່ສຸດ (XC8-2849) ຕອນນີ້ຕົວເຊື່ອມຕໍ່ບໍ່ຮູ້ຈັກພາກສ່ວນຄວາມຈຳ APPCODE ແລະ APPDATA, ຫຼື ພາກສ່ວນ [No-Read-While-Write] ໃນແຜນທີ່ໜ່ວຍຄວາມຈຳ. ດັ່ງນັ້ນ, ມີໂອກາດຫນ້ອຍທີ່ຕົວເຊື່ອມຕໍ່ອາດຈະຈັດສັນຂໍ້ມູນທີ່ອ່ານເທົ່ານັ້ນໃນພື້ນທີ່ບໍ່ເຫມາະສົມຂອງຫນ່ວຍຄວາມຈໍາ. ໂອກາດຂອງຂໍ້ມູນທີ່ໃສ່ຜິດຈະເພີ່ມຂຶ້ນຖ້າຄຸນສົມບັດ const-data-in-progmem ຖືກເປີດໃຊ້, ໂດຍສະເພາະຖ້າຄຸນສົມບັດ const-data-in-config-mapped-progmem ຖືກເປີດໃຊ້ເຊັ່ນກັນ. ຄຸນສົມບັດເຫຼົ່ານີ້ສາມາດຖືກປິດໃຊ້ງານໄດ້ຖ້າຕ້ອງການ.
ວັດຖຸ file ຄໍາສັ່ງປະມວນຜົນ (XC8-2863) ຄໍາສັ່ງໃນວັດຖຸ files ຈະຖືກປຸງແຕ່ງໂດຍຕົວເຊື່ອມຕໍ່ອາດຈະແຕກຕ່າງກັນໂດຍອີງໃສ່ການນໍາໃຊ້ການເພີ່ມປະສິດທິພາບການ abstraction ຂັ້ນຕອນ (-mpa ທາງເລືອກ). ນີ້ຈະມີຜົນກະທົບພຽງແຕ່ລະຫັດທີ່ກໍານົດຫນ້າທີ່ອ່ອນແອໃນທົ່ວຫຼາຍໂມດູນ.
Linker error ກັບ absolute (XC8-2777) ເມື່ອວັດຖຸໄດ້ຖືກເຮັດໃຫ້ຢ່າງແທ້ຈິງຢູ່ໃນທີ່ຢູ່ໃນຕອນເລີ່ມຕົ້ນຂອງ RAM ແລະວັດຖຸທີ່ບໍ່ໄດ້ກໍານົດໄວ້ຍັງຖືກກໍານົດ, ຂໍ້ຜິດພາດຂອງຕົວເຊື່ອມຕໍ່ອາດຈະເກີດຂື້ນ.
ID ປຸກສັ້ນ (XC8-2775) ສໍາລັບອຸປະກອນ ATA5700/2, ການລົງທະບຽນ PHIDO/1 ຖືກກໍານົດພຽງແຕ່ວ່າກວ້າງ 16 ບິດ, ແທນທີ່ຈະກວ້າງ 32 ບິດ.
Linker crash ໃນ​ເວ​ລາ​ທີ່​ສັນ​ຍາ​ລັກ​ໂທ (XC8-2758​) ຕົວເຊື່ອມຕໍ່ອາດຈະຂັດຖ້າຕົວເລືອກໄດເວີ -mrelax ຖືກໃຊ້ເມື່ອລະຫັດແຫຼ່ງເອີ້ນສັນຍາລັກທີ່ຖືກກໍານົດໂດຍໃຊ້ຕົວເລືອກ -cc., –de f sym linker.
ການເລີ່ມຕົ້ນບໍ່ຖືກຕ້ອງ (XC8-2679) ຢູ່ທີ່ນັ້ນ ແມ່ນຄວາມແຕກຕ່າງລະຫວ່າງບ່ອນທີ່ຄ່າເບື້ອງຕົ້ນຂອງບາງວັດຖຸທີ່ມີຂະໜາດໄບຕ໌ທົ່ວໂລກ/ສະຖິດຢູ່ໃນໜ່ວຍຄວາມຈຳຂໍ້ມູນ ແລະບ່ອນທີ່ຕົວແປຈະຖືກເຂົ້າເຖິງໃນເວລາແລ່ນ.
ການເອີ້ນຟັງຊັນທາງອ້ອມທີ່ບໍ່ດີ (XC8-2628) ໃນບາງກໍລະນີ, ການເອີ້ນຟັງຊັນທີ່ເຮັດຜ່ານຕົວຊີ້ຟັງຊັນທີ່ເກັບໄວ້ເປັນສ່ວນຫນຶ່ງຂອງໂຄງສ້າງອາດຈະລົ້ມເຫລວ.
strtof ຕອບຄ່າສູນສຳລັບ floats ເລກຖານສິບຫົກ (XC8-2626) ຫ້ອງສະໝຸດປະຕິບັດໜ້າທີ່ strtof et al ແລະ scanf ( ) et al, ຈະປ່ຽນຕົວເລກເລກຖານສິບຫົກທີ່ເລື່ອນໄດ້ສະເໝີ ທີ່ບໍ່ລະບຸເລກກຳລັງເປັນສູນ. ຕົວຢ່າງample:
strtof (“Oxl”, &endptr);
ຈະສົ່ງຄ່າ 0, ບໍ່ແມ່ນ I.
ຂໍ້ຄວາມທີ່ປຶກສາ stack ບໍ່ຖືກຕ້ອງ (XC8-2542, XC8-2541) ໃນບາງກໍລະນີ, ການເຕືອນທີ່ປຶກສາ stack ກ່ຽວກັບ recursion ຫຼື stack indeterminate ຖືກນໍາໃຊ້ (ເປັນໄປໄດ້ໂດຍຜ່ານການນໍາໃຊ້ຂອງ alloca()) ບໍ່ໄດ້ຖືກປ່ອຍອອກມາ.
ຄວາມລົ້ມເຫລວກັບລະຫັດຂັດຂວາງຊໍ້າກັນ (XC8-2421) ບ່ອນທີ່ຟັງຊັນຂັດຂວາງຫຼາຍກວ່າຫນຶ່ງມີສ່ວນດຽວກັນ, compiler ອາດຈະມີຜົນຜະລິດສໍາລັບຟັງຊັນຂັດຂວາງຫນຶ່ງໂທຫາອີກອັນຫນຶ່ງ. ນີ້ຈະສົ່ງຜົນໃຫ້ການລົງທະບຽນການໂທ-clobbered ທັງຫມົດຖືກບັນທຶກໄວ້ໂດຍບໍ່ຈໍາເປັນ, ແລະການຂັດຂວາງຈະຖືກເປີດໃຊ້ເຖິງແມ່ນວ່າກ່ອນທີ່ epilogue ຂອງຕົວຈັດການຂັດຂວາງໃນປະຈຸບັນຈະດໍາເນີນການ, ເຊິ່ງອາດຈະເຮັດໃຫ້ລະຫັດລົ້ມເຫລວ.
ຜົນຜະລິດທີ່ບໍ່ດີກັບເສັ້ນທາງ DFP ທີ່ບໍ່ຖືກຕ້ອງ (XC8-2376) ຖ້າ compiler ຖືກເອີ້ນດ້ວຍເສັ້ນທາງ DFP ທີ່ບໍ່ຖືກຕ້ອງແລະ 'spec' file ມີຢູ່ສໍາລັບອຸປະກອນທີ່ເລືອກ, compiler ບໍ່ໄດ້ລາຍງານຊຸດຄອບຄົວອຸປະກອນທີ່ຂາດຫາຍໄປແລະແທນທີ່ຈະເລືອກ 'spec'. file, ຊຶ່ງຫຼັງຈາກນັ້ນອາດຈະເຮັດໃຫ້ຜົນຜະລິດທີ່ບໍ່ຖືກຕ້ອງ. 'ສະເພາະ' files ອາດຈະບໍ່ທັນສະໄຫມກັບ DFPs ທີ່ແຈກຢາຍແລະມີຈຸດປະສົງເພື່ອໃຊ້ກັບການທົດສອບ compiler ພາຍໃນເທົ່ານັ້ນ.
ບໍ່ກວດພົບຄວາມຈຳຊ້ອນກັນ (XC8-1966) compiler ບໍ່ກວດພົບການທັບຊ້ອນຂອງຫນ່ວຍຄວາມຈໍາຂອງວັດຖຸທີ່ເຮັດຢ່າງແທ້ຈິງຢູ່ໃນທີ່ຢູ່ (ຜ່ານ _at ( )) ແລະວັດຖຸອື່ນໆໂດຍໃຊ້ຕົວລະບຸພາກ ( ) ແລະທີ່ເຊື່ອມຕໍ່ກັບທີ່ຢູ່ດຽວກັນ.
ຄວາມລົ້ມເຫລວກັບຟັງຊັນຫ້ອງສະຫມຸດແລະ _memx (XC8-1763) ເອີ້ນວ່າ libgcc float functions ທີ່ມີ argument ໃນຊ່ອງທີ່ຢູ່ memx ອາດຈະລົ້ມເຫລວ. ຈື່ໄວ້ວ່າ routines ຫໍສະຫມຸດໄດ້ຖືກເອີ້ນຈາກບາງ C operator, ດັ່ງນັ້ນ, exampດັ່ງນັ້ນ, ລະຫັດຕໍ່ໄປນີ້ໄດ້ຮັບຜົນກະທົບ:
ກັບຄືນ regFloatVar > memxFloatVar;
ການປະຕິບັດ libgcc ຈໍາກັດ (AVRTC-731) ສໍາລັບຜະລິດຕະພັນ ATTiny4/5/9/10/20/40, ມາດຕະຖານການປະຕິບັດຫ້ອງສະຫມຸດ C / Math ໃນ libgcc ແມ່ນຈໍາກັດຫຼາຍຫຼືບໍ່ມີ.
ຂໍ້​ຈໍາ​ກັດ​ຄວາມ​ຈໍາ​ຂອງ​ໂຄງ​ການ (AVRTC-732​) ຮູບພາບຫນ່ວຍຄວາມຈໍາຂອງໂຄງການເກີນ 128 kb ແມ່ນສະຫນັບສະຫນູນໂດຍລະບົບຕ່ອງໂສ້ເຄື່ອງມື; ຢ່າງໃດກໍຕາມ, ມີຕົວຢ່າງທີ່ຮູ້ຈັກຂອງ linker aborts ໂດຍບໍ່ມີການຜ່ອນຄາຍແລະບໍ່ມີຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດທີ່ເປັນປະໂຫຍດແທນທີ່ຈະສ້າງ stubs ຫນ້າທີ່ທີ່ກໍານົດໄວ້ໃນເວລາທີ່ທາງເລືອກ -mre lax ຖືກນໍາໃຊ້.
ການຈຳກັດພື້ນທີ່ຊື່ (AVRTC-733) ສະຖານທີ່ທີ່ຢູ່ທີ່ມີຊື່ໄດ້ຮັບການສະຫນັບສະຫນູນໂດຍລະບົບຕ່ອງໂສ້ເຄື່ອງມື, ຂຶ້ນກັບຂໍ້ຈໍາກັດທີ່ໄດ້ກ່າວມາໃນພາກແນະນໍາຂອງຜູ້ໃຊ້ພິເສດຄຸນສົມບັດປະເພດ.
ເຂດເວລາ The ຟັງຊັນຫ້ອງສະໝຸດສົມມຸດ GMT ແລະບໍ່ຮອງຮັບເຂດເວລາທ້ອງຖິ່ນ, ດັ່ງນັ້ນເວລາທ້ອງຖິ່ນ ( ) ຈະກັບຄືນເວລາດຽວກັນກັບ gmtime ( ) , ສໍາລັບການຍົກຕົວຢ່າງ.ampເລ.

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

ເອກະສານ / ຊັບພະຍາກອນ

MICROCHIP MPLAB XC8 C Compiler ຊອບແວພັດທະນາ [pdf] ຄູ່ມືເຈົ້າຂອງ
MPLAB XC8 C, MPLAB XC8 C Compiler ຊອບແວພັດທະນາ, ຊອບແວພັດທະນາການລວບລວມ, ຊອບແວພັດທະນາ, ຊອບແວ

ເອກະສານອ້າງອີງ

ອອກຄໍາເຫັນ

ທີ່ຢູ່ອີເມວຂອງເຈົ້າຈະບໍ່ຖືກເຜີຍແຜ່. ຊ່ອງຂໍ້ມູນທີ່ຕ້ອງການຖືກໝາຍໄວ້ *