MPLAB® XC8 C Compiler Version 2.41 Release Notes សម្រាប់ AVR® MCU
សៀវភៅណែនាំរបស់ម្ចាស់
កម្មវិធីអភិវឌ្ឍន៍កម្មវិធីចងក្រង MPLAB XC8 C
ឯកសារនេះមានព័ត៌មានសំខាន់ៗដែលទាក់ទងនឹងឧបករណ៍ចងក្រង MPLAB XC8 C នៅពេលកំណត់គោលដៅឧបករណ៍មីក្រូជីប AVR ។
សូមអានវាមុនពេលដំណើរការកម្មវិធីនេះ។ សូមមើលការចេញផ្សាយការចងក្រង MPLAB XC8 សម្រាប់ឯកសារ PIC ប្រសិនបើអ្នកកំពុងប្រើឧបករណ៍ចងក្រងសម្រាប់ឧបករណ៍ PIC 8 ប៊ីត។
ជាងview
1.1. សេចក្តីផ្តើម
ការចេញផ្សាយនៃកម្មវិធីចងក្រង Microchip MPLAB® XC8 C នេះមានលក្ខណៈពិសេសថ្មីៗ និងដំណោះស្រាយបញ្ហាមួយចំនួន។
១.២. កាលបរិច្ឆេទសាងសង់
កាលបរិច្ឆេទបង្កើតជាផ្លូវការនៃកំណែចងក្រងនេះគឺថ្ងៃទី 8 ខែកុម្ភៈ ឆ្នាំ 2023។
១.៣. កំណែមុន។
កំណែចងក្រង MPLAB XC8 C ពីមុនគឺ 2.40 ត្រូវបានបង្កើតឡើងនៅថ្ងៃទី 3 ខែកក្កដា ឆ្នាំ 2022។
១.៤. សៀវភៅណែនាំសុវត្ថិភាពមុខងារ
សៀវភៅណែនាំសុវត្ថិភាពមុខងារសម្រាប់អ្នកចងក្រង MPLAB XC មាននៅក្នុងកញ្ចប់ឯកសារ នៅពេលអ្នកទិញអាជ្ញាប័ណ្ណសុវត្ថិភាពមុខងារ។
១.៥. អាជ្ញាប័ណ្ណសមាសភាគ និងកំណែ
MPLAB XC8 C Compiler សម្រាប់ឧបករណ៍ AVR MCUs ត្រូវបានសរសេរ និងចែកចាយក្រោម GNU General Public License (GPL) ដែលមានន័យថា ប្រភពកូដរបស់វាត្រូវបានចែកចាយដោយសេរី និងអាចរកបានជាសាធារណៈ។
កូដប្រភពសម្រាប់ឧបករណ៍នៅក្រោម GNU GPL អាចត្រូវបានទាញយកដាច់ដោយឡែកពី Microchip webគេហទំព័រ។ អ្នកអាចអាន GNU GPL នៅក្នុងឯកសារដែលមានទីតាំងថតរងនៃបញ្ជីដំឡើង 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; អ៊ូប៊ុនទូ 18.04; និង macOS® 10.15.5 ។ Binaries សម្រាប់ Windows ត្រូវបានចុះហត្ថលេខាដោយកូដ។ ប្រព័ន្ធគោលពីរសម្រាប់ macOS ត្រូវបានចុះហត្ថលេខាដោយកូដ និងកំណត់សំគាល់។ ម៉ាស៊ីនមេអាជ្ញាប័ណ្ណបណ្តាញ MPLAB XC មានសម្រាប់ប្រព័ន្ធប្រតិបត្តិការ 64 ប៊ីតជាច្រើន រួមទាំង Microsoft Windows 10 និងខ្ពស់ជាងនេះ។ អ៊ូប៊ុនទូ 18.04 និងខ្ពស់ជាងនេះ; ឬ macOS 10.15 និងខ្ពស់ជាងនេះ។ ម៉ាស៊ីនមេក៏អាចដំណើរការលើប្រព័ន្ធប្រតិបត្តិការផ្សេងៗរួមទាំង Windows Server, Linux distributions ដូចជា Oracle® Enterprise Linux® និង Red Hate Enterprise Linux ក៏ដូចជាកំណែចាស់នៃប្រព័ន្ធប្រតិបត្តិការដែលបានគាំទ្រផងដែរ។ ទោះយ៉ាងណាក៏ដោយ MPLAB XC Network License Server មិនត្រូវបានសាកល្បងលើប្រព័ន្ធប្រតិបត្តិការទាំងនេះទេ។ ម៉ាស៊ីនមេអាជ្ញាប័ណ្ណបណ្តាញ MPLAB XC អាចដំណើរការនៅលើម៉ាស៊ីននិម្មិតនៃ OS ដែលគាំទ្រដោយប្រើអាជ្ញាប័ណ្ណម៉ាស៊ីននិម្មិតសម្រាប់អាជ្ញាប័ណ្ណបណ្តាញ (SW006021-VM) ។ កំណែ 32 ប៊ីតទាំងអស់នៃម៉ាស៊ីនមេបណ្តាញ MPLAB XC ត្រូវបានបញ្ឈប់ដោយចាប់ផ្តើមពីកំណែ 3.00 ។
បានគាំទ្រឧបករណ៍
កម្មវិធីចងក្រងនេះគាំទ្រឧបករណ៍ AVR MCU 8 ប៊ីតដែលមានទាំងអស់នៅពេលចេញផ្សាយ។ សូមមើល (នៅក្នុងថតឯកសាររបស់អ្នកចងក្រង) សម្រាប់បញ្ជីឧបករណ៍ដែលគាំទ្រទាំងអស់។ ឯកសារទាំងនេះក៏មានបញ្ជីផងដែរ។
avr_chipinfo.html doc configuration bit settings សម្រាប់ឧបករណ៍នីមួយៗ។
១.៨. កំណែ និងការអាប់ដេតអាជ្ញាប័ណ្ណ
កម្មវិធីចងក្រង MPLAB XC8 អាចត្រូវបានធ្វើឱ្យសកម្មជាផលិតផលដែលមានអាជ្ញាប័ណ្ណ (PRO) ឬគ្មានអាជ្ញាប័ណ្ណ (ឥតគិតថ្លៃ) ។ អ្នកត្រូវទិញសោធ្វើឲ្យសកម្មដើម្បីផ្តល់អាជ្ញាប័ណ្ណអ្នកចងក្រងរបស់អ្នក។ អាជ្ញាប័ណ្ណអនុញ្ញាតឱ្យមានកម្រិតខ្ពស់នៃការបង្កើនប្រសិទ្ធភាពធៀបនឹងផលិតផលឥតគិតថ្លៃ។ កម្មវិធីចងក្រងដែលគ្មានអាជ្ញាប័ណ្ណអាចដំណើរការដោយគ្មានកំណត់ដោយគ្មានអាជ្ញាប័ណ្ណ។ ឧបករណ៍ចងក្រងសុវត្ថិភាពមុខងារ MPLAB XC8 ត្រូវតែត្រូវបានធ្វើឱ្យសកម្មជាមួយនឹងអាជ្ញាប័ណ្ណសុវត្ថិភាពមុខងារដែលបានទិញពី Microchip ។ កម្មវិធីចងក្រងនឹងមិនដំណើរការដោយគ្មានអាជ្ញាប័ណ្ណនេះទេ។ នៅពេលដែលបានធ្វើឱ្យសកម្ម អ្នកអាចជ្រើសរើសកម្រិតបង្កើនប្រសិទ្ធភាពណាមួយ ហើយប្រើមុខងារចងក្រងទាំងអស់។ ការចេញផ្សាយនេះនៃ MPLAB XC Functional Safety Compiler គាំទ្រអាជ្ញាប័ណ្ណម៉ាស៊ីនមេបណ្តាញ។
សូមមើលឯកសារដំឡើង និងផ្តល់អាជ្ញាប័ណ្ណ MPLAB XC C Compilers (DS50002059) សម្រាប់ព័ត៌មានអំពីប្រភេទអាជ្ញាប័ណ្ណ និងការដំឡើងកម្មវិធីចងក្រងដែលមានអាជ្ញាប័ណ្ណ។
ការតំឡើងនិងធ្វើឱ្យសកម្ម
សូមមើលផងដែរ ផ្នែកបញ្ហាការធ្វើចំណាកស្រុក និងដែនកំណត់សម្រាប់ព័ត៌មានសំខាន់ៗអំពីអ្នកគ្រប់គ្រងអាជ្ញាបណ្ណចុងក្រោយបង្អស់ដែលរួមបញ្ចូលជាមួយកម្មវិធីចងក្រងនេះ។
ប្រសិនបើប្រើ MPLAB IDE ត្រូវប្រាកដថាដំឡើង MPLAB X IDE កំណែ 5.0 ឬថ្មីជាងនេះ មុនពេលដំឡើងឧបករណ៍នេះ។ ចាកចេញពី IDE មុនពេលដំឡើងកម្មវិធីចងក្រង។ ដំណើរការកម្មវិធីដំឡើង (Windows), (Linux) ឬ (macOS) .exe .run .app compiler ឧ. ហើយធ្វើតាមការណែនាំនៅលើអេក្រង់។ XC8-1.00.11403-windows.exe បញ្ជីដំឡើងលំនាំដើមត្រូវបានណែនាំ។ ប្រសិនបើអ្នកកំពុងប្រើលីនុច អ្នកត្រូវតែដំឡើងកម្មវិធីចងក្រងដោយប្រើស្ថានីយ និងពីគណនីឫស។ ដំឡើងដោយប្រើគណនី macOS ដែលមានសិទ្ធិជាអ្នកគ្រប់គ្រង។
ការធ្វើឱ្យសកម្មឥឡូវនេះត្រូវបានអនុវត្តដោយឡែកពីគ្នាទៅនឹងការដំឡើង។ សូមមើលកម្មវិធីគ្រប់គ្រងអាជ្ញាប័ណ្ណឯកសារសម្រាប់MPLAB® XC C Compilers (DS52059) សម្រាប់ព័ត៌មានបន្ថែម។
ប្រសិនបើអ្នកជ្រើសរើសដំណើរការកម្មវិធីចងក្រងក្រោមអាជ្ញាប័ណ្ណវាយតម្លៃ ឥឡូវនេះអ្នកនឹងទទួលបានការព្រមានក្នុងអំឡុងពេលចងក្រង នៅពេលដែលអ្នកស្ថិតនៅក្នុងរយៈពេល 14 ថ្ងៃនៃចុងបញ្ចប់នៃរយៈពេលវាយតម្លៃរបស់អ្នក។ ការព្រមានដូចគ្នានេះត្រូវបានចេញប្រសិនបើអ្នកក្នុងរយៈពេល 14 ថ្ងៃបន្ទាប់ពីការបញ្ចប់នៃការជាវ HPA របស់អ្នក។
ម៉ាស៊ីនមេអាជ្ញាប័ណ្ណបណ្តាញ XC គឺជាកម្មវិធីដំឡើងដាច់ដោយឡែក ហើយមិនត្រូវបានរួមបញ្ចូលនៅក្នុងកម្មវិធីដំឡើងកម្មវិធីចងក្រងអ្នកប្រើតែមួយទេ។
ឥឡូវនេះ កម្មវិធីគ្រប់គ្រងអាជ្ញាប័ណ្ណ XC គាំទ្រការរ៉ូមីងនៃអាជ្ញាប័ណ្ណបណ្តាញអណ្តែត។ ផ្តោតលើអ្នកប្រើប្រាស់ទូរស័ព្ទ មុខងារនេះអនុញ្ញាតឱ្យមានអាជ្ញាប័ណ្ណអណ្តែតដើម្បីបិទបណ្តាញក្នុងរយៈពេលខ្លី។ ដោយប្រើមុខងារនេះ អ្នកអាចផ្តាច់ចេញពីបណ្តាញ ហើយនៅតែប្រើកម្មវិធីចងក្រង MPLAB XC របស់អ្នក។ សូមមើលថតឯកសារនៃការដំឡើង XCLM សម្រាប់បន្ថែមលើមុខងារនេះ។
MPLAB X IDE រួមបញ្ចូលបង្អួចអាជ្ញាប័ណ្ណ (ឧបករណ៍ > អាជ្ញាប័ណ្ណ) ដើម្បីគ្រប់គ្រងការរ៉ូមីងដោយមើលឃើញ។
១.៩.១. ការដោះស្រាយបញ្ហាការដំឡើង
ប្រសិនបើអ្នកជួបប្រទះការលំបាកក្នុងការដំឡើងកម្មវិធីចងក្រងនៅក្រោមប្រព័ន្ធប្រតិបត្តិការវីនដូណាមួយ សូមសាកល្បងការណែនាំខាងក្រោម។
ដំណើរការដំឡើងជាអ្នកគ្រប់គ្រង។
កំណត់ការអនុញ្ញាតរបស់កម្មវិធីដំឡើងទៅ 'ការគ្រប់គ្រងពេញលេញ' ។ (ចុចកណ្ដុរស្ដាំលើឯកសារ ជ្រើសរើស លក្ខណសម្បត្តិ ផ្ទាំងសុវត្ថិភាព ជ្រើសរើសអ្នកប្រើប្រាស់ កែសម្រួល។ )
កំណត់ការអនុញ្ញាតនៃថត temp ទៅ 'ការគ្រប់គ្រងពេញលេញ' ។
ដើម្បីកំណត់ទីតាំងនៃ Temp Folder វាយ %temp% ទៅក្នុងពាក្យបញ្ជា Run (Windows logo key + R)។
វានឹងបើកប្រអប់អ្នករុករកឯកសារដែលបង្ហាញថតនោះ ហើយនឹងអនុញ្ញាតឱ្យអ្នកកំណត់ផ្លូវនៃថតនោះ។
១.១០. ឯកសារចងក្រង
ការណែនាំរបស់អ្នកប្រើរបស់អ្នកចងក្រងអាចត្រូវបានបើកពីទំព័រ HTML ដែលបើកនៅក្នុងកម្មវិធីរុករករបស់អ្នក នៅពេលចុចប៊ូតុងជំនួយពណ៌ខៀវនៅក្នុងផ្ទាំងគ្រប់គ្រង MPLAB X IDE ដូចដែលបានបង្ហាញនៅក្នុងរូបថតអេក្រង់។
ប្រសិនបើអ្នកកំពុងបង្កើតគោលដៅ AVR 8 ប៊ីត មគ្គុទ្ទេសក៍អ្នកចងក្រង MPLAB® XC8 C សម្រាប់ AVR® MCU មានព័ត៌មានអំពីជម្រើសចងក្រងទាំងនោះ និងលក្ខណៈពិសេសដែលអាចអនុវត្តបានចំពោះស្ថាបត្យកម្មនេះ។
1.10.ការគាំទ្រអតិថិជន
Microchip ស្វាគមន៍របាយការណ៍កំហុស ការផ្ដល់យោបល់ ឬយោបល់ទាក់ទងនឹងកំណែចងក្រងនេះ។ សូមដឹកនាំរបាយការណ៍កំហុស ឬសំណើលក្ខណៈពិសេសតាមរយៈប្រព័ន្ធជំនួយ។
ការធ្វើបច្ចុប្បន្នភាពឯកសារ
សម្រាប់ឯកសារ MPLAB XC8 កំណែអនឡាញ និងចុងក្រោយបំផុត សូមចូលទៅកាន់ឯកសារបច្ចេកទេសអនឡាញរបស់ Microchip webគេហទំព័រ។ ឯកសារ AVR ថ្មី ឬបានធ្វើបច្ចុប្បន្នភាពនៅក្នុងការចេញផ្សាយនេះ៖
- MPLAB® XC8 C Compiler User Guide for AVR® MCU (ការកែប្រែ G)
- AVR® GNU Toolchain ទៅ MPLAB® XC8 មគ្គុទ្ទេសក៍ចំណាកស្រុក (ការកែប្រែ A)
- មគ្គុទ្ទេសក៍អ្នកប្រើប្រាស់ Hexmate (កំណែ B)
AVR® GNU Toolchain ទៅ MPLAB® XC8 Migration Guide ពិពណ៌នាអំពីការផ្លាស់ប្តូរកូដប្រភព និងជម្រើសបង្កើតដែលអាចត្រូវបានទាមទារ ប្រសិនបើអ្នកសម្រេចចិត្តផ្ទេរគម្រោង C-based ពី AVR 8-bit GNU Toolchain ទៅ Microchip MPLAB XC8 C Compiler។ មគ្គុទ្ទេសក៍យោងបណ្ណាល័យស្តង់ដារបង្រួបបង្រួម Microchip ពិពណ៌នាអំពីអាកប្បកិរិយា និងចំណុចប្រទាក់ទៅនឹងមុខងារដែលបានកំណត់ដោយបណ្ណាល័យស្តង់ដារបង្រួបបង្រួមមីក្រូឈីប ក៏ដូចជាការប្រើប្រាស់គោលបំណងនៃប្រភេទបណ្ណាល័យ និងម៉ាក្រូ។ ព័ត៌មានមួយចំនួនពីមុនត្រូវបានផ្ទុកនៅក្នុង មគ្គុទ្ទេសក៍អ្នកប្រើប្រាស់ MPLAB® XC8 C Compiler សម្រាប់ AVR® MCU ។ ព័ត៌មានបណ្ណាល័យសម្រាប់ឧបករណ៍ជាក់លាក់នៅតែមាននៅក្នុងការណែនាំចងក្រងនេះ។
ប្រសិនបើអ្នកទើបតែចាប់ផ្តើមជាមួយឧបករណ៍ 8 ប៊ីត និង MPLAB XC8 C Compiler មគ្គុទ្ទេសក៍អ្នកប្រើប្រាស់MPLAB® XC8 សម្រាប់វិស្វករបង្កប់ - AVR® MCUs (DS50003108) មានព័ត៌មានស្តីពីការបង្កើតគម្រោងនៅក្នុង MPLAB X IDE និងការសរសេរកូដសម្រាប់អ្នក។ គម្រោង MPLAB XC8 C ដំបូង។ ការណែនាំនេះត្រូវបានចែកចាយជាមួយកម្មវិធីចងក្រង។
មគ្គុទ្ទេសក៍របស់អ្នកប្រើ Hexmate ត្រូវបានបម្រុងទុកសម្រាប់អ្នកដែលកំពុងដំណើរការ Hexmate ជាកម្មវិធីឯករាជ្យ។
តើមានអ្វីថ្មី។
ខាងក្រោមនេះគឺជាលក្ខណៈពិសេស AVR-target ថ្មីដែលកម្មវិធីចងក្រងឥឡូវនេះគាំទ្រ។ លេខកំណែនៅក្នុងចំណងជើងរងបង្ហាញពីកំណែចងក្រងដំបូងដើម្បីគាំទ្រលក្ខណៈពិសេសដែលធ្វើតាម។
៣.២. កំណែ 3.1
ការគាំទ្រ Bootrow (XC8-3053) កម្មវិធីចងក្រងនឹងដាក់មាតិកានៃផ្នែកណាមួយដែលមានបុព្វបទ at.bootrow address 0x860000 នៅក្នុងឯកសារ HEX ។ ផ្នែកទាំងនេះត្រូវបានប្រើប្រាស់សម្រាប់អង្គចងចាំ BOOTROW ដែលត្រូវបានរចនាឡើងសម្រាប់ការផ្ទុកសោ និងព័ត៌មានសុវត្ថិភាពផ្សេងទៀត ដែលគួរតែអាចចូលប្រើបានសម្រាប់តែកម្មវិធីចាប់ផ្ដើមប្រព័ន្ធប៉ុណ្ណោះ។
ការលុបចោលការវិលត្រឡប់ដែលលែងត្រូវការវិញ (XC8-3048) ឥឡូវនេះ កម្មវិធីចងក្រងនឹងលុបបំបាត់ការណែនាំដែលមិនចាំបាច់ក្នុងមុខងារ ret ដោយមានការលោតកន្ទុយនៅពេលដែលស្គ្រីបតំណផ្ទាល់ខ្លួនត្រូវបានប្រើ។ នេះគឺជាការបង្កើនប្រសិទ្ធភាពស្រដៀងគ្នាទៅនឹងអ្វីដែលបានអនុវត្តពីមុន ប៉ុន្តែឥឡូវនេះវាត្រូវបានអនុវត្តនៅលើផ្នែកដែលកំព្រាទាំងអស់ បើទោះបីជាស្គ្រីបតំណភ្ជាប់ផ្ទាល់ខ្លួនត្រូវបានប្រើ ហើយគ្រោងការណ៍បែងចែកសមល្អបំផុតមិនដំណើរការក៏ដោយ។ ការផ្លាស់ប្តូរប្រភេទពេលវេលា (XC8-2982, 2932) ប្រភេទបណ្ណាល័យស្តង់ដារ C99 ត្រូវបានផ្លាស់ប្តូរពី time_t ទៅជាប្រភេទ ដែលផ្តល់នូវការកែលម្អទំហំកូដនៅក្នុងមុខងារដ៏វែងដែលទាក់ទងនឹងពេលវេលាមួយចំនួន ដូចជា។ មិនបានចុះហត្ថលេខាយូរ mktime()
ណុបថ្មី (XC8-2946, 2945) ម៉ាក្រូត្រូវបានបន្ថែមទៅ។ ម៉ាក្រូនេះបញ្ចូល no-NOP() សេចក្តីណែនាំប្រតិបត្តិការ nop ចូលទៅក្នុងលទ្ធផល។
អាប់ដេតទៅ XCLM (XC8-2944) កម្មវិធីគ្រប់គ្រងអាជ្ញាប័ណ្ណដែលប្រើជាមួយកម្មវិធីចងក្រងត្រូវបានធ្វើបច្ចុប្បន្នភាព ហើយឥឡូវនេះកាន់តែមានការឆ្លើយតបនៅពេលពិនិត្យមើលព័ត៌មានលម្អិតអំពីអាជ្ញាប័ណ្ណរបស់អ្នកចងក្រង។
Trampការហៅទូរសព្ទ olined (XC8-2760) ឥឡូវនេះ កម្មវិធីចងក្រងអាចអនុវត្តការជំនួសការណែនាំការហៅទម្រង់វែងជាមួយនឹងការហៅទូរសព្ទដែលទាក់ទងខ្លីជាង នៅពេលដែលទម្រង់នៃការណែនាំដែលទាក់ទងជាធម្មតានឹងនៅក្រៅជួរនៃទិសដៅរបស់ពួកគេ។ ក្នុងស្ថានភាពនេះ កម្មវិធីចងក្រងនឹងព្យាយាមជំនួសដោយការណែនាំដើម្បីហៅ rcall ការណែនាំដែលនឹង 'trampការប្រតិបត្តិ oline ទៅកាន់អាសយដ្ឋានដែលត្រូវការ ឧampលេ៖ jmp
rcall tramp_foo ត្រូវបានគេហៅថា foo
…
rcall tramp_ហ្វូ
…
tramp_ហ្វូ៖
jmp ហ្វូ
ការបង្កើនប្រសិទ្ធភាពនេះរួមជាមួយនឹងការបង្កើនប្រសិទ្ធភាពលំហូរកម្មវិធីស្រដៀងគ្នាត្រូវបានគ្រប់គ្រងដោយជម្រើស -mrelax ។
៣.២. កំណែ 3.2
ការគាំទ្រឧបករណ៍ថ្មីឥឡូវនេះមានសម្រាប់ផ្នែក AVR ខាងក្រោម៖ AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EAVR28, AVR64.
ធ្វើឱ្យប្រសើរឡើងនូវដំណើរការអរូបីនៃនីតិវិធី ឧបករណ៍បង្កើនប្រសិទ្ធភាពអរូបីដំណើរការ (PA) ត្រូវបានធ្វើឱ្យប្រសើរឡើង ដូច្នេះកូដដែលមានការណែនាំអំពីការហៅមុខងារ (/) អាចត្រូវបានប្រើប្រាស់។ វានឹងប្រព្រឹត្តទៅបានតែការហៅ rcall ប្រសិនបើជង់មិនត្រូវបានប្រើដើម្បីបញ្ជូនអាគុយម៉ង់ទៅ ឬទទួលបានតម្លៃត្រឡប់ពីមុខងារ។ ជង់ត្រូវបានប្រើនៅពេលហៅមុខងារដែលមានបញ្ជីអាគុយម៉ង់អថេរ ឬនៅពេលហៅមុខងារដែលយកអាគុយម៉ង់ច្រើនជាងការចុះឈ្មោះដែលបានកំណត់សម្រាប់គោលបំណងនេះ។ លក្ខណៈពិសេសនេះអាចត្រូវបានបិទដោយប្រើជម្រើស ឬដំណើរការអរូបីអាចត្រូវបានបិទទាំងស្រុងសម្រាប់ឯកសារ ឬមុខងារដោយប្រើ- និងរៀងគ្នា ឬដោយប្រើគុណលក្ខណៈ (ជាក់លាក់) ជ្រើសរើសដោយមុខងារ។
mno-pa-outline-calls -mno-pa-on-file -mno-pa-on-function nopa code coverage macro កម្មវិធីចងក្រងឥឡូវនេះកំណត់ម៉ាក្រូ ប្រសិនបើជម្រើសត្រឹមត្រូវគឺ __nopa __CODECOV -mcodecov បានបញ្ជាក់។
ជម្រើសនៃការកក់អង្គចងចាំ ឥឡូវនេះអ្នកបើកបរនឹងទទួលយកជម្រើស xc8-cc -mreserve=space@start:end នៅពេលសាងសង់សម្រាប់គោលដៅ AVR ។ ជម្រើសនេះរក្សាទុកជួរអង្គចងចាំដែលបានបញ្ជាក់នៅក្នុងទំហំអង្គចងចាំទិន្នន័យ ឬកម្មវិធី ដោយការពារអ្នកភ្ជាប់ពីការបញ្ចូលកូដ ឬវត្ថុនៅក្នុងតំបន់នេះ។ Smart IO ឆ្លាតវៃជាងមុន ការកែលម្អជាច្រើនត្រូវបានធ្វើឡើងចំពោះមុខងារ Smart IO រួមទាំងការកែប្រែទូទៅចំពោះកូដស្នូល printf ដោយចាត់ទុកឧបករណ៍បញ្ជាក់ការបំប្លែង %n ជាវ៉ារ្យ៉ង់ឯករាជ្យ ភ្ជាប់ក្នុងទម្រង់ការលេចឡើងរបស់ vararg តាមតម្រូវការ ដោយប្រើប្រភេទទិន្នន័យខ្លីជាង តាមដែលអាចធ្វើទៅបានសម្រាប់ការគ្រប់គ្រង។ អាគុយម៉ង់មុខងារ IO និងកត្តាកូដទូទៅនៅក្នុងទទឹងវាល និងការគ្រប់គ្រងភាពជាក់លាក់។ នេះអាចបណ្តាលឱ្យមានលេខកូដដ៏សំខាន់ និងការសន្សំទិន្នន័យ ក៏ដូចជាបង្កើនល្បឿនប្រតិបត្តិរបស់ IO ។
៣.១. កំណែ 3.3 (ការចេញផ្សាយសុវត្ថិភាពមុខងារ)
អាជ្ញាប័ណ្ណម៉ាស៊ីនមេបណ្តាញ ការចេញផ្សាយកម្មវិធីចងក្រងសុវត្ថិភាពមុខងារ MPLAB XC8 គាំទ្រអាជ្ញាប័ណ្ណម៉ាស៊ីនមេបណ្តាញ។
៣.២. កំណែ 3.4
គ្មាន។
៣.២. កំណែ 3.5
ការគាំទ្រឧបករណ៍ថ្មីគឺអាចរកបានសម្រាប់ផ្នែក 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 អ្នកចងក្រង MPLAB XC ទាំងអស់នឹងចែករំលែកបណ្ណាល័យស្តង់ដារបង្រួបបង្រួម Microchip ដែលឥឡូវនេះមានជាមួយការចេញផ្សាយ MPLAB XC8 នេះ។ MPLA# XC8 C Compiler User Guide for AVO MCU លែងរួមបញ្ចូលឯកសារសម្រាប់មុខងារស្តង់ដារទាំងនេះទៀតហើយ។ ឥឡូវនេះ ព័ត៌មាននេះអាចត្រូវបានរកឃើញនៅក្នុង មគ្គុទ្ទេសក៍យោងបណ្ណាល័យស្តង់ដារបង្រួបបង្រួមរបស់ Microchip ។ ចំណាំថាមុខងារមួយចំនួនដែលបានកំណត់ពីមុនដោយ avr-libc លែងមានទៀតហើយ។ (សូមមើលមុខងារ Lila ។ )
Smart I0 ជាផ្នែកនៃបណ្ណាល័យបង្រួបបង្រួមថ្មី មុខងារ I0 នៅក្នុងគ្រួសារ printf និង scanf ឥឡូវនេះត្រូវបានបង្កើតដោយខ្លួនឯងនៅលើ build នីមួយៗ ដោយផ្អែកលើរបៀបដែលមុខងារទាំងនេះត្រូវបានប្រើប្រាស់នៅក្នុងកម្មវិធី។ វាអាចកាត់បន្ថយធនធានដែលបានប្រើដោយកម្មវិធីយ៉ាងច្រើន។
ជម្រើសជំនួយ Smart ICI នៅពេលវិភាគការហៅទៅកាន់មុខងារ Smart I0 (ដូចជា print f() ឬ scanf()) កម្មវិធីចងក្រងមិនអាចកំណត់ពីទម្រង់ខ្សែអក្សរ ឬសន្និដ្ឋានពីអាគុយម៉ង់ដែលឧបករណ៍បញ្ជាក់ការបំប្លែងដែលត្រូវការដោយការហៅនោះទេ។ ពីមុន អ្នកចងក្រងតែងតែមិនធ្វើការសន្មត់ ហើយធានាថាមុខងារទាំង 10 ដែលមានមុខងារពេញលេញត្រូវបានភ្ជាប់ទៅក្នុងរូបភាពកម្មវិធីចុងក្រោយ។ ជម្រើសថ្មី – msmart-io-format=fmt ត្រូវបានបន្ថែម ដូច្នេះអ្នកចងក្រងអាចត្រូវបានជូនដំណឹងដោយអ្នកប្រើប្រាស់នៃកម្មវិធីបញ្ជាក់ការបំប្លែងដែលប្រើដោយមុខងារ smart I0 ដែលការប្រើប្រាស់មានភាពមិនច្បាស់លាស់ ការពារទម្លាប់ 10 យូរហួសពីការភ្ជាប់។ (សូមមើល smart-io-format Option សម្រាប់ព័ត៌មានលម្អិតបន្ថែម។ )
ការដាក់ផ្នែកផ្ទាល់ខ្លួនពីមុន ជម្រើស -W1, –section-start បានដាក់តែផ្នែកដែលបានបញ្ជាក់នៅអាសយដ្ឋានដែលបានស្នើសុំ នៅពេលដែលស្គ្រីប linker កំណត់ផ្នែកលទ្ធផលដែលមានឈ្មោះដូចគ្នា។ នៅពេលនោះមិនមែនជាករណីនោះទេ ផ្នែកត្រូវបានដាក់នៅអាសយដ្ឋានដែលបានជ្រើសរើសដោយអ្នកភ្ជាប់ ហើយជម្រើសនេះត្រូវបានគេមិនអើពើជាសំខាន់។ ឥឡូវនេះជម្រើសនឹងត្រូវបានផ្តល់កិត្តិយសសម្រាប់ផ្នែកផ្ទាល់ខ្លួនទាំងអស់ ទោះបីជាស្គ្រីបតំណភ្ជាប់មិនកំណត់ផ្នែកក៏ដោយ។ ទោះជាយ៉ាងណាក៏ដោយ ចំណាំថាសម្រាប់ផ្នែកស្តង់ដារ ដូចជា . អត្ថបទ, ។ bss ឬ . ទិន្នន័យ អ្នកបែងចែកសមល្អបំផុតនឹងនៅតែមានការគ្រប់គ្រងពេញលេញលើការដាក់របស់ពួកគេ ហើយជម្រើសនឹងមិនមានឥទ្ធិពលទេ។ ប្រើជម្រើស -ton, -Tsection=addr ដូចដែលបានពិពណ៌នានៅក្នុងការណែនាំរបស់អ្នកប្រើ។
៣.២. កំណែ 3.6
ការណែនាំអំពីជង់អាចប្រើបានជាមួយនឹងអាជ្ញាប័ណ្ណចងក្រង PRO លក្ខណៈពិសេសការណែនាំជង់របស់អ្នកចងក្រងអាចត្រូវបានប្រើដើម្បីប៉ាន់ប្រមាណជម្រៅអតិបរមានៃជង់ណាមួយដែលប្រើដោយកម្មវិធី។ វាបង្កើត និងវិភាគក្រាហ្វការហៅរបស់កម្មវិធី កំណត់ការប្រើប្រាស់ជង់នៃមុខងារនីមួយៗ និងបង្កើតរបាយការណ៍ ដែលជម្រៅនៃជង់ដែលប្រើដោយកម្មវិធីអាចត្រូវបានសន្និដ្ឋាន។ មុខងារនេះត្រូវបានបើកតាមរយៈជម្រើសបន្ទាត់ពាក្យបញ្ជា -mchp-stack-usage ។ សេចក្តីសង្ខេបនៃការប្រើប្រាស់ជង់ត្រូវបានបោះពុម្ពបន្ទាប់ពីការប្រតិបត្តិ។ របាយការណ៍ជង់លម្អិតមាននៅក្នុងផែនទី fileដែលអាចត្រូវបានស្នើសុំតាមវិធីធម្មតា។
ការគាំទ្រឧបករណ៍ថ្មីគឺអាចរកបានសម្រាប់ផ្នែក AVR ខាងក្រោម៖ ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 ការគាំទ្រឧបករណ៍ដែលបានដកថយ ការគាំទ្រលែងមានសម្រាប់ផ្នែក AVR ខាងក្រោមទៀតហើយ៖ AVR32DA48, AVR16DA28 និង, AVR16DA32។
៣.២. កំណែ 3.7
គ្មាន។
៣.២. កំណែ 3.8
ជម្រើសថ្មីដើម្បីការពារការចាប់ផ្តើមទិន្នន័យ ជម្រើសកម្មវិធីបញ្ជា -mno-data-init ថ្មីរារាំងការចាប់ផ្តើមទិន្នន័យ និងការសម្អាតផ្នែក bss ។ វាដំណើរការដោយការទប់ស្កាត់លទ្ធផលនៃ do copy data និងធ្វើឱ្យច្បាស់នូវនិមិត្តសញ្ញា bss នៅក្នុងការជួបប្រជុំគ្នា។ files ដែលនឹងរារាំងការរួមបញ្ចូលទម្លាប់ទាំងនោះដោយអ្នកភ្ជាប់។
ការធ្វើឱ្យប្រសើរការបង្កើនប្រសិទ្ធភាពការកែលម្អការបង្កើនប្រសិទ្ធភាពមួយចំនួនត្រូវបានធ្វើឡើង រួមទាំងការដកចេញនូវការណែនាំត្រឡប់មកវិញដែលលែងត្រូវការ ការដកចេញនូវការលោតមួយចំនួនបន្ទាប់ពីការណែនាំរំលងប្រសិនបើប៊ីត និងធ្វើឱ្យប្រសើរឡើងនូវដំណើរការអរូបី និងសមត្ថភាពក្នុងការធ្វើម្តងទៀតនូវដំណើរការនេះ។ ជម្រើសបន្ថែមឥឡូវនេះមានដើម្បីគ្រប់គ្រងការបង្កើនប្រសិទ្ធភាពទាំងនេះមួយចំនួន ជាពិសេស -f section-anchors ដែលអនុញ្ញាតឱ្យចូលប្រើវត្ថុឋិតិវន្តដែលត្រូវបានអនុវត្តទាក់ទងទៅនឹងនិមិត្តសញ្ញាមួយ។ -mpa-iterations=n ដែលអនុញ្ញាតឱ្យចំនួននៃការធ្វើឡើងវិញអរូបីនៃនីតិវិធីត្រូវបានផ្លាស់ប្តូរពីលំនាំដើមនៃ 2; និង -mpa-callcost-shortcall ដែលអនុវត្តការអរូបីតាមនីតិវិធីកាន់តែឈ្លានពាន ដោយសង្ឃឹមថាអ្នកភ្ជាប់អាចបន្ធូរបន្ថយការហៅយូរ។ ជម្រើសចុងក្រោយនេះអាចបង្កើនទំហំកូដ ប្រសិនបើការសន្មត់មូលដ្ឋានមិនត្រូវបានសម្រេច។
ការគាំទ្រឧបករណ៍ថ្មីមានសម្រាប់ផ្នែក AVR ដូចខាងក្រោម៖ AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DAVR64, AVR128DB, ១២៨DB៦៤។ ឧបករណ៍ដែលបានដកថយ ជំនួយគាំទ្រលែងមានសម្រាប់ផ្នែក AVR ខាងក្រោមទៀតហើយ៖ ATA28, ATA128, ATA32N, ATA128, ATA48, ATA128, ATA64, ATA5272C, ATA5790C, ATA5790Q, 5791AC5795ATA6285ATA6286C
៣.១. កំណែ 3.9 (ការចេញផ្សាយសុវត្ថិភាពមុខងារ)
បឋមកថា file សម្រាប់កម្មវិធីចងក្រងភ្ជាប់មកជាមួយ ដើម្បីធានាថាកម្មវិធីចងក្រងអាចអនុលោមតាមលក្ខណៈជាក់លាក់នៃភាសាដូចជា MISRA ។ ក្បាល fileដែលត្រូវបានរួមបញ្ចូលដោយស្វ័យប្រវត្តិដោយ , ត្រូវបានធ្វើបច្ចុប្បន្នភាព។ បឋមកថានេះមានគំរូដើមសម្រាប់មុខងារដែលភ្ជាប់មកជាមួយទាំងអស់ ដូចជា buildin_avr_nop ( ) និង builtin avr delay_cycles () ។ ការភ្ជាប់មកជាមួយមួយចំនួនប្រហែលជាមិនអនុលោមតាម MISRA ទេ។ ទាំងនេះអាចត្រូវបានលុបចោលដោយបន្ថែម defineXCSTRICT_MISRA ទៅបន្ទាត់ពាក្យបញ្ជាចងក្រង។ ការភ្ជាប់មកជាមួយ និងការប្រកាសរបស់ពួកគេត្រូវបានធ្វើបច្ចុប្បន្នភាពដើម្បីប្រើប្រភេទទទឹងថេរ។
៣.២. កំណែ 3.10
ការគាំទ្រឧបករណ៍ថ្មីគឺអាចរកបានសម្រាប់ផ្នែក AVR ខាងក្រោម៖ ATTINY1624, ATTINY1626, និង ATTINY1627។
ការបែងចែកសមល្អបំផុតកាន់តែប្រសើរ អ្នកបែងចែកសមល្អបំផុត (BFA) នៅក្នុងកម្មវិធីចងក្រងត្រូវបានធ្វើឱ្យប្រសើរឡើង ដូច្នេះផ្នែកត្រូវបានបែងចែកតាមលំដាប់ដែលអនុញ្ញាតឱ្យមានការបង្កើនប្រសិទ្ធភាពកាន់តែប្រសើរ។ ឥឡូវនេះ BFA គាំទ្រចន្លោះអាសយដ្ឋានដែលមានឈ្មោះ និងគ្រប់គ្រងការចាប់ផ្តើមទិន្នន័យបានប្រសើរជាងមុន។
ការធ្វើឱ្យប្រសើរឡើងនូវដំណើរការអរូបី ការធ្វើឱ្យប្រសើរនៃដំណើរការអរូបីឥឡូវនេះត្រូវបានអនុវត្តលើលំដាប់កូដបន្ថែមទៀត។ ស្ថានភាពពីមុនដែលការបង្កើនប្រសិទ្ធភាពនេះអាចបង្កើនទំហំកូដត្រូវបានដោះស្រាយដោយការធ្វើឱ្យកូដបង្កើនប្រសិទ្ធភាពដឹងពីដំណើរការប្រមូលសំរាមរបស់អ្នកភ្ជាប់។
អវត្ដមាននៃ AVR Assembler AVR Assembler មិនត្រូវបានរួមបញ្ចូលជាមួយនឹងការចែកចាយនេះទៀតទេ។
៣.១. កំណែ 3.11 (ការចេញផ្សាយសុវត្ថិភាពមុខងារ)
គ្មាន។
៣.២. កំណែ 3.12
Code Coverage ការចេញផ្សាយនេះរួមបញ្ចូលនូវមុខងារគ្របដណ្តប់កូដដែលជួយសម្រួលដល់ការវិភាគនៃវិសាលភាពដែលកូដប្រភពរបស់គម្រោងត្រូវបានប្រតិបត្តិ។ ប្រើជម្រើស -mcodecov=ram ដើម្បីបើកវា។ បន្ទាប់ពីដំណើរការកម្មវិធីនៅលើ Hardware របស់អ្នក ព័ត៌មានអំពីការគ្របដណ្តប់កូដនឹងត្រូវបានរួមបញ្ចូលនៅក្នុងឧបករណ៍ ហើយវាអាចត្រូវបានផ្ទេរទៅ និងបង្ហាញដោយ MPLAB X IDE តាមរយៈកម្មវិធីជំនួយការគ្របដណ្តប់កូដ។ សូមមើលឯកសារ IDE សម្រាប់ព័ត៌មានអំពីកម្មវិធីជំនួយនេះអាចទទួលបាន។ #pragma nocodecov អាចត្រូវបានប្រើដើម្បីមិនរាប់បញ្ចូលមុខងារជាបន្តបន្ទាប់ពីការវិភាគការគ្របដណ្តប់។ តាមឧត្ដមគតិ pragma គួរតែត្រូវបានបន្ថែមនៅដើមដំបូងនៃ file ដើម្បីដកចេញទាំងស្រុងនោះ។ file ពីការវិភាគគ្របដណ្តប់។ ជាជម្រើស _attribute_ ( (nocodecov) ) អាចត្រូវបានប្រើដើម្បីដកមុខងារជាក់លាក់មួយចេញពីការវិភាគគ្របដណ្តប់។
ការពិពណ៌នាឧបករណ៍ files ឧបករណ៍ថ្មី។ file ហៅថា avr_chipinfo ។ html មានទីតាំងនៅក្នុងថតឯកសារនៃការចែកចាយអ្នកចងក្រង។ នេះ។ file រាយឧបករណ៍ទាំងអស់ដែលគាំទ្រដោយកម្មវិធីចងក្រង។ ចុចលើឈ្មោះឧបករណ៍ ហើយវានឹងបើកទំព័រដែលបង្ហាញការកំណត់កំណត់/តម្លៃប៊ីតដែលអនុញ្ញាតទាំងអស់សម្រាប់ឧបករណ៍នោះ ដោយមានឧ.amples ។ អរូបីតាមនីតិវិធី
ការបង្កើនប្រសិទ្ធភាពអរូបីតាមនីតិវិធី ដែលជំនួសប្លុកទូទៅនៃកូដជួបប្រជុំគ្នាជាមួយនឹងការហៅទៅកាន់ច្បាប់ចម្លងដែលបានស្រង់ចេញនៃប្លុកនោះត្រូវបានបន្ថែមទៅកម្មវិធីចងក្រង។ ទាំងនេះត្រូវបានអនុវត្តដោយកម្មវិធីដាច់ដោយឡែក ដែលត្រូវបានហៅដោយស្វ័យប្រវត្តិដោយអ្នកចងក្រង នៅពេលជ្រើសរើសការបង្កើនប្រសិទ្ធភាពកម្រិត 2, 3 ឬ s ។ ការបង្កើនប្រសិទ្ធភាពទាំងនេះកាត់បន្ថយទំហំកូដ ប៉ុន្តែវាអាចកាត់បន្ថយល្បឿននៃការប្រតិបត្តិ និងការបំបាត់កំហុសកូដ។ អរូបីតាមនីតិវិធីអាចត្រូវបានបិទនៅកម្រិតបង្កើនប្រសិទ្ធភាពខ្ពស់ដោយប្រើជម្រើស -mno-pa ឬអាចត្រូវបានបើកនៅកម្រិតបង្កើនប្រសិទ្ធភាពទាប (អាស្រ័យលើអាជ្ញាប័ណ្ណរបស់អ្នក) ដោយប្រើ -mpa ។ វាអាចត្រូវបានបិទសម្រាប់វត្ថុមួយ។ file ការប្រើប្រាស់ -mno-pa-on-file=fileឈ្មោះ ឬបិទសម្រាប់អនុគមន៍ដោយប្រើ -mno-pa-on-function=function។ នៅខាងក្នុងកូដប្រភពរបស់អ្នក ការអរូបីតាមនីតិវិធីអាចត្រូវបានបិទសម្រាប់មុខងារមួយដោយប្រើ attribute ( (nopa) ) ជាមួយនឹងនិយមន័យនៃអនុគមន៍ ឬដោយប្រើ nopa ដែលពង្រីកទៅ attribute ((nopa, noinline) ) ហើយដូច្នេះការពារមុខងារ inlining ពីការកើតឡើង។ ហើយមានការអរូបីនៃកូដខាងក្នុង។
ចាក់សោប៊ីតគាំទ្រក្នុង pragma ការកំណត់ #pragma ឥឡូវនេះអាចត្រូវបានប្រើដើម្បីបញ្ជាក់ប៊ីតចាក់សោ AVR ក៏ដូចជាប៊ីតកំណត់រចនាសម្ព័ន្ធផ្សេងទៀត។ ពិនិត្យ avr_chipinfo ។ html file (បានរៀបរាប់ខាងលើ) សម្រាប់ការកំណត់/តម្លៃគូដែលត្រូវប្រើជាមួយការអនុវត្តនេះ។ ការគាំទ្រឧបករណ៍ថ្មី ការគាំទ្រមានសម្រាប់ផ្នែកខាងក្រោម៖ AVR28DAl28, AVR64DAl28, AVR32DA 128, និង AVR48DA 128 ។
៣.២. កំណែ 3.13
ប៊ីតច្រើនទៀតសម្រាប់លុយកាក់របស់អ្នក កំណែ macOS នៃកម្មវិធីចងក្រង និងកម្មវិធីគ្រប់គ្រងអាជ្ញាបណ្ណនេះគឺជាកម្មវិធី 64 ប៊ីត។ វានឹងធានាថាកម្មវិធីចងក្រងនឹងដំឡើង និងដំណើរការដោយគ្មានការព្រមានលើកំណែចុងក្រោយនៃ macOS ។
Const objects in program memory ឥឡូវនេះអ្នកចងក្រងអាចដាក់វត្ថុដែលមានលក្ខណៈសម្បត្តិគ្រប់គ្រាន់នៅក្នុងកម្មវិធី Flash memory ជាជាងអោយវត្ថុទាំងនេះស្ថិតនៅក្នុង RAM។ កម្មវិធីចងក្រងត្រូវបានកែប្រែ ដើម្បីឱ្យទិន្នន័យសកលដែលមានគុណវុឌ្ឍិរបស់ t ត្រូវបានរក្សាទុកក្នុងអង្គចងចាំពន្លឺរបស់កម្មវិធី ហើយទិន្នន័យនេះអាចចូលប្រើដោយផ្ទាល់ និងដោយប្រយោលដោយប្រើការណែនាំកម្មវិធី-អង្គចងចាំសមស្រប។ មុខងារថ្មីនេះត្រូវបានបើកតាមលំនាំដើម ប៉ុន្តែអាចត្រូវបានបិទដោយប្រើជម្រើស -mno-const-data-in-progmem។ សម្រាប់ស្ថាបត្យកម្ម avrxmega3 និង avrtiny មុខងារនេះមិនត្រូវបានទាមទារទេ ហើយតែងតែត្រូវបានបិទ ដោយសារអង្គចងចាំកម្មវិធីត្រូវបានគូសវាសទៅក្នុងទំហំអាសយដ្ឋានទិន្នន័យសម្រាប់ឧបករណ៍ទាំងនេះ។
កំណែស្តង់ដារដោយឥតគិតថ្លៃ (ឥតគិតថ្លៃ) នៃកម្មវិធីចងក្រងនេះឥឡូវនេះអនុញ្ញាតឱ្យមានការបង្កើនប្រសិទ្ធភាពរហូតដល់កម្រិត 2។ វានឹងអនុញ្ញាតឱ្យមានលទ្ធផលស្រដៀងគ្នា បើទោះបីជាមិនដូចគ្នាក៏ដោយ ប៉ុន្តែអ្វីដែលអាចធ្វើទៅបានពីមុនដោយប្រើអាជ្ញាប័ណ្ណស្តង់ដារ។
សូមស្វាគមន៍ AVRASM2 ឧបករណ៍ដំឡើង AVRASM2 សម្រាប់ឧបករណ៍ 8 ប៊ីតឥឡូវនេះត្រូវបានរួមបញ្ចូលនៅក្នុងកម្មវិធីដំឡើងកម្មវិធីចងក្រង XC8 ។ ឧបករណ៍ដំឡើងនេះមិនត្រូវបានប្រើដោយអ្នកចងក្រង XC8 ទេ ប៉ុន្តែមានសម្រាប់គម្រោងដោយផ្អែកលើប្រភពដំឡើងដែលសរសេរដោយដៃ។
ការគាំទ្រឧបករណ៍ថ្មីគឺអាចរកបានសម្រាប់ផ្នែកខាងក្រោម៖ ATMEGA1608, ATMEGA1609, ATMEGA808, និង ATMEGA809។
៣.២. កំណែ 3.14
កម្មវិធីបញ្ជាកម្រិតកំពូល កម្មវិធីបញ្ជាថ្មីដែលហៅថា xc8-cc ឥឡូវនេះស្ថិតនៅពីលើកម្មវិធីបញ្ជា avr-gcc មុន និងកម្មវិធីបញ្ជា xc8 ហើយវាអាចហៅទៅកម្មវិធីចងក្រងដែលសមស្របដោយផ្អែកលើការជ្រើសរើសឧបករណ៍គោលដៅ។ កម្មវិធីបញ្ជានេះទទួលយកជម្រើសរចនាប័ទ្ម GCC ដែលត្រូវបានបកប្រែសម្រាប់ ឬឆ្លងកាត់ទៅកាន់កម្មវិធីចងក្រងដែលកំពុងដំណើរការ។ កម្មវិធីបញ្ជានេះអនុញ្ញាតឱ្យសំណុំនៃជម្រើសស្រដៀងគ្នាដែលមានអត្ថន័យស្រដៀងគ្នាដើម្បីប្រើជាមួយគោលដៅ AVR ឬ PIC ហើយដូច្នេះគឺជាវិធីដែលត្រូវបានណែនាំដើម្បីហៅកម្មវិធីចងក្រង។ ប្រសិនបើចាំបាច់ កម្មវិធីបញ្ជា avr-gcc ចាស់អាចត្រូវបានហៅដោយផ្ទាល់ដោយប្រើជម្រើសរចនាប័ទ្មចាស់ដែលវាបានទទួលយកនៅក្នុងកំណែចងក្រងមុន។
Common C Interface ឥឡូវនេះកម្មវិធីចងក្រងនេះអាចអនុលោមតាម MPLAB Common C Interface ដែលអនុញ្ញាតឱ្យកូដប្រភពត្រូវបានបញ្ជូនកាន់តែងាយស្រួលឆ្លងកាត់អ្នកចងក្រង MPLAB XC ទាំងអស់។ ជម្រើស -mext=cci ស្នើសុំលក្ខណៈពិសេសនេះ ដោយបើកវាក្យសម្ព័ន្ធជំនួសសម្រាប់ផ្នែកបន្ថែមភាសាជាច្រើន។
កម្មវិធីបញ្ជាបណ្ណារក្សថ្មី កម្មវិធីបញ្ជាបណ្ណារក្សថ្មីត្រូវបានដាក់នៅខាងលើបណ្ណារក្សបណ្ណាល័យ PIC មុន និងបណ្ណារក្ស AVR avr-ar ។ កម្មវិធីបញ្ជានេះទទួលយកជម្រើសរចនាប័ទ្ម GCC-archiver ដែលត្រូវបានបកប្រែសម្រាប់ ឬឆ្លងកាត់ទៅបណ្ណារក្សដែលកំពុងដំណើរការ។ កម្មវិធីបញ្ជាថ្មីអនុញ្ញាតឱ្យសំណុំនៃជម្រើសស្រដៀងគ្នាដែលមានអត្ថន័យស្រដៀងគ្នា ត្រូវបានប្រើដើម្បីបង្កើត ឬរៀបចំបណ្ណាល័យ PIC ឬ AVR file ដូច្នេះហើយ គឺជាវិធីណែនាំក្នុងការហៅបណ្ណារក្ស។ ប្រសិនបើត្រូវការសម្រាប់គម្រោងកេរដំណែល បណ្ណារក្សមុនអាចត្រូវបានហៅដោយផ្ទាល់ដោយប្រើជម្រើសរចនាប័ទ្មចាស់ដែលវាបានទទួលយកនៅក្នុងកំណែចងក្រងមុន។
បញ្ហាចំណាកស្រុក
ខាងក្រោមនេះគឺជាលក្ខណៈពិសេសដែលឥឡូវត្រូវបានដោះស្រាយខុសគ្នាដោយអ្នកចងក្រង។ ការផ្លាស់ប្តូរទាំងនេះអាចតម្រូវឱ្យមានការកែប្រែកូដប្រភពរបស់អ្នក ប្រសិនបើការបញ្ជូនកូដទៅកាន់កំណែចងក្រងនេះ។ លេខកំណែនៅក្នុងចំណងជើងរងបង្ហាញពីកំណែចងក្រងដំបូងដើម្បីគាំទ្រការផ្លាស់ប្តូរដែលធ្វើតាម។
៣.២. កំណែ 4.1
មុខងារ fma មិនត្រឹមត្រូវត្រូវបានដកចេញ (XC8-2913) បណ្ណាល័យស្តង់ដារ C99 fma 0 -family functions ( ) មិនបានគណនាការបន្ថែមគុណដោយភាពជាក់លាក់គ្មានកំណត់ទៅនឹងការបង្គត់តែមួយទេ ប៉ុន្តែជំនួសមកវិញនូវកំហុសការបង្គត់ដែលបានបង្គរជាមួយនឹងប្រតិបត្តិការនីមួយៗ។ មុខងារទាំងនេះត្រូវបានដកចេញពីបណ្ណាល័យដែលបានផ្គត់ផ្គង់។
៣.២. កំណែ 4.2
គ្មាន។
៣.១. កំណែ 4.3 (ការចេញផ្សាយសុវត្ថិភាពមុខងារ)
គ្មាន។
៣.៥. កំណែ 4.4 គ្មាន។
៣.២. កំណែ 4.5
ការគ្រប់គ្រងខ្សែអក្សរទៅមូលដ្ឋាន (XC8-2420) ដើម្បីធានាបាននូវភាពស៊ីសង្វាក់គ្នាជាមួយនឹងកម្មវិធីចងក្រង XC ផ្សេងទៀត មុខងារខ្សែអក្សរ XC8 ដូចជា sttol () ជាដើម នឹងលែងព្យាយាមបំប្លែងខ្សែអក្សរបញ្ចូល ប្រសិនបើមូលដ្ឋានដែលបានបញ្ជាក់មានទំហំធំជាង 36 ហើយជំនួសមកវិញនឹងកំណត់ errno ទៅ EINVAL ។ ស្តង់ដារ C មិនបញ្ជាក់ពីឥរិយាបទនៃមុខងារនៅពេលដែលតម្លៃគោលនេះត្រូវបានលើស។
ការបង្កើនប្រសិទ្ធភាពល្បឿនមិនសមរម្យ ការបង្កើនប្រសិទ្ធភាពអរូបីតាមនីតិវិធីកំពុងត្រូវបានបើកនៅពេលជ្រើសរើសការបង្កើនប្រសិទ្ធភាពកម្រិត 3 (-03)។ ការបង្កើនប្រសិទ្ធភាពទាំងនេះកាត់បន្ថយទំហំកូដដោយចំណាយលើល្បឿនកូដ ដូច្នេះមិនគួរត្រូវបានអនុវត្តទេ។ គម្រោងដែលប្រើកម្រិតបង្កើនប្រសិទ្ធភាពនេះអាចនឹងឃើញភាពខុសគ្នាក្នុងទំហំកូដ និងល្បឿនប្រតិបត្តិនៅពេលបង្កើតឡើងជាមួយនឹងការចេញផ្សាយនេះ។
មុខងារបណ្ណាល័យ កូដសម្រាប់មុខងារបណ្ណាល័យ C ស្តង់ដារជាច្រើនឥឡូវនេះបានមកពីបណ្ណាល័យស្តង់ដារបង្រួបបង្រួមរបស់ Microchip ដែលអាចបង្ហាញអាកប្បកិរិយាខុសៗគ្នាក្នុងកាលៈទេសៈមួយចំនួនបើប្រៀបធៀបទៅនឹងអ្វីដែលផ្តល់ដោយអតីតបណ្ណាល័យ avr-libc ។ សម្រាប់អតីតampដូច្នេះ វាមិនចាំបាច់ក្នុងការភ្ជាប់ក្នុងបណ្ណាល័យ 1printf flt (ជម្រើស -1printf_flt) ដើម្បីបើកទម្រង់ I0 ការគាំទ្រសម្រាប់អ្នកបញ្ជាក់ទម្រង់អណ្តែត។ ឆ្លាត I0 លក្ខណៈពិសេសនៃបណ្ណាល័យស្តង់ដារបង្រួបបង្រួម Microchip ធ្វើឱ្យជម្រើសនេះលែងត្រូវការតទៅទៀត។ លើសពីនេះ ការប្រើប្រាស់ទម្លាប់បច្ច័យ _P សម្រាប់មុខងារខ្សែអក្សរ និងអង្គចងចាំ (ឧទាហរណ៍ strcpy_P ( ) ។ ទម្លាប់ C ស្តង់ដារ (ឧ. strcpy) នឹងដំណើរការបានត្រឹមត្រូវជាមួយទិន្នន័យបែបនេះ នៅពេលដែលមុខងារ const-data-in-program-memory ត្រូវបានបើក។
៣.២. កំណែ 4.6
គ្មាន។
៣.២. កំណែ 4.7
គ្មាន។
៣.២. កំណែ 4.8
គ្មាន។
៣.១. កំណែ 4.1 (ការចេញផ្សាយសុវត្ថិភាពមុខងារ)
គ្មាន។
៣.២. កំណែ 4.2
បានផ្លាស់ប្តូរប្លង់ DFP ឥឡូវនេះកម្មវិធីចងក្រងសន្មតថាប្លង់ផ្សេងគ្នាដែលប្រើដោយ DFPs (កញ្ចប់គ្រួសារឧបករណ៍)។ នេះនឹងមានន័យថា DFP ចាស់ប្រហែលជាមិនដំណើរការជាមួយនឹងការចេញផ្សាយនេះទេ ហើយអ្នកចងក្រងចាស់នឹងមិនអាចប្រើ DFPs ចុងក្រោយបង្អស់បានទេ។
៣.១. កំណែ 4.3 (ការចេញផ្សាយសុវត្ថិភាពមុខងារ)
គ្មាន។
៣.២. កំណែ 4.4
គ្មាន
៣.២. កំណែ 4.5
Const objects in program memory ចំណាំថា តាមលំនាំដើម វត្ថុ const-qualfiied នឹងត្រូវបានដាក់ និងចូលប្រើក្នុងអង្គចងចាំកម្មវិធី (ដូចពណ៌លាំដែលបានពណ៌នា)។ វានឹងប៉ះពាល់ដល់ទំហំ និងល្បឿនប្រតិបត្តិនៃគម្រោងរបស់អ្នក ប៉ុន្តែគួរតែកាត់បន្ថយការប្រើប្រាស់ RAM។ មុខងារនេះអាចត្រូវបានបិទ ប្រសិនបើចាំបាច់ ដោយប្រើជម្រើស -mnoconst-data-in-progmem ។
៣.២. កំណែ 4.6
Configuration fuses ឥឡូវនេះ fuses configuration device អាចដាក់កម្មវិធីដោយប្រើ config pragma អមដោយ set-value pairs ដើម្បីបញ្ជាក់ស្ថានភាព fuse ឧ.
#pragma config WDTON = SET
#pragma config BODLEVEL = BODLEVEL_4V3
វត្ថុនិងមុខងារដាច់ខាត ឥឡូវនេះ វត្ថុ និងមុខងារអាចត្រូវបានដាក់នៅអាសយដ្ឋានជាក់លាក់នៅក្នុងអង្គចងចាំដោយប្រើឧបករណ៍បញ្ជាក់ CCI (អាសយដ្ឋាន) សម្រាប់ឧ។ampលេ៖
# រួមបញ្ចូល
int foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
អាគុយម៉ង់ចំពោះអ្នកបញ្ជាក់នេះត្រូវតែជា ថេរដែលតំណាងឱ្យអាសយដ្ឋានដែលបៃដំបូង ឬការណែនាំនឹងត្រូវបានដាក់។ អាសយដ្ឋាន RAM ត្រូវបានចង្អុលបង្ហាញដោយប្រើអុហ្វសិត 0x800000 ។ បើកដំណើរការ CCI ដើម្បីប្រើមុខងារនេះ។
វាក្យសម្ព័ន្ធមុខងាររំខានថ្មី។ ឥឡូវនេះកម្មវិធីចងក្រងទទួលយកកម្មវិធីបញ្ជាក់ CCI _interrupt (num) ដើម្បីបង្ហាញថាមុខងារ C គឺជាអ្នកដោះស្រាយការរំខាន។ អ្នកបញ្ជាក់យកលេខរំខាន ឧទាហរណ៍ampលេ៖
# រួមបញ្ចូល
មោឃៈ __រំខាន(SPI_STC_vect_num) spi_Isr(មោឃៈ) { … }
បញ្ហាថេរ
ខាងក្រោមនេះគឺជាការកែតម្រូវដែលត្រូវបានធ្វើឡើងចំពោះអ្នកចងក្រង។ ទាំងនេះអាចជួសជុលកំហុសនៅក្នុងកូដដែលបានបង្កើត ឬផ្លាស់ប្តូរប្រតិបត្តិការរបស់អ្នកចងក្រងទៅជាអ្វីដែលមានបំណង ឬបញ្ជាក់ដោយការណែនាំរបស់អ្នកប្រើប្រាស់។ លេខកំណែនៅក្នុងចំណងជើងរងបង្ហាញពីកំណែចងក្រងដំបូងដើម្បីមានការជួសជុលសម្រាប់បញ្ហាដែលកើតឡើង។ ស្លាកសញ្ញាតង្កៀបនៅក្នុងចំណងជើងគឺជាការកំណត់អត្តសញ្ញាណបញ្ហានៅក្នុងមូលដ្ឋានទិន្នន័យតាមដាន។ ទាំងនេះអាចមានប្រយោជន៍ ប្រសិនបើអ្នកត្រូវការទាក់ទងផ្នែកជំនួយ។
ចំណាំថាបញ្ហាជាក់លាក់នៃឧបករណ៍មួយចំនួនត្រូវបានកែតម្រូវនៅក្នុងកញ្ចប់គ្រួសារឧបករណ៍ (DFP) ដែលភ្ជាប់ជាមួយឧបករណ៍។ សូមមើលកម្មវិធីគ្រប់គ្រងកញ្ចប់ MPLAB សម្រាប់ព័ត៌មានអំពីការផ្លាស់ប្តូរដែលបានធ្វើឡើងចំពោះ DFPs និងដើម្បីទាញយកកញ្ចប់ចុងក្រោយបំផុត។
៣.២. កំណែ 5.1
បញ្ហា Dongle នៅលើ Ventura (XC8-3088) Dongles ត្រូវបានប្រើដើម្បីផ្តល់អាជ្ញាប័ណ្ណកម្មវិធីចងក្រងប្រហែលជាមិនត្រូវបានអានត្រឹមត្រូវនៅលើម៉ាស៊ីន macOS Ventura ដែលបណ្តាលឱ្យមានការបរាជ័យក្នុងការផ្តល់អាជ្ញាប័ណ្ណ។ ការផ្លាស់ប្តូរទៅអ្នកគ្រប់គ្រងអាជ្ញាប័ណ្ណ XCLM ដោះស្រាយបញ្ហានេះ។
ការចង្អុលបង្ហាញមិនត្រឹមត្រូវនៃការបែងចែកអង្គចងចាំ (XC8-2925) ការប៉ុនប៉ងបែងចែក SIZE_MAX បៃ (ឬតម្លៃជិតនឹងនេះ) នៃអង្គចងចាំដោយប្រើមុខងារគ្រប់គ្រងអង្គចងចាំបណ្ណាល័យស្តង់ដារ (malloc () et al) បានជោគជ័យ។ វាមិនបានគិតថាត្រូវការបៃបន្ថែមបន្ថែមលើប្លុកដែលបានស្នើនៅពេលប្រើការអនុវត្តការបែងចែកអង្គចងចាំថាមវន្តសាមញ្ញទេ។ ឥឡូវនេះ ទ្រនិច NULL នឹងត្រូវបានត្រឡប់ ហើយ errno កំណត់ទៅ ENOMEM ក្នុងស្ថានភាពបែបនេះ។
មុខងារ fma មិនត្រឹមត្រូវត្រូវបានដកចេញ (XC8-2913) បណ្ណាល័យស្តង់ដារ C99 fma ( ) -family functions ( ) មិនបានគណនាការបន្ថែមគុណដោយភាពជាក់លាក់គ្មានកំណត់ទៅនឹងការបង្គត់តែមួយទេ ប៉ុន្តែជំនួសមកវិញនូវកំហុសការបង្គត់ដែលបានបង្គរជាមួយនឹងប្រតិបត្តិការនីមួយៗ។ មុខងារទាំងនេះត្រូវបានដកចេញពីបណ្ណាល័យដែលបានផ្គត់ផ្គង់។
ការគ្រប់គ្រងមិនល្អនៃការបំប្លែងខ្សែអក្សរ (XC8-2921, XC8-2652) នៅពេលដែល 'subject sequence' សម្រាប់ការបំប្លែងដោយ strtod Cr មានអ្វីដែលហាក់ដូចជាលេខអណ្តែតក្នុងទម្រង់អិចស្ប៉ូណង់ស្យែល ហើយមានតួអក្សរដែលមិននឹកស្មានដល់បន្ទាប់ពីតួអក្សរ e/E បន្ទាប់មកកន្លែងដែល endptr ត្រូវបានផ្តល់ឱ្យ វាត្រូវបានផ្តល់អាសយដ្ឋានដែល ឱ្យវាចង្អុលទៅតួអក្សរបន្ទាប់ពី e/E ខណៈពេលដែលវាគួរត្រូវបានចង្អុលទៅតួអក្សរ e/E ដោយខ្លួនឯង ចាប់តាំងពីវាមិនត្រូវបានបំប្លែង។ សម្រាប់អតីតample, strtod (“100exx”, &ep) គួរតែត្រឡប់ 100.00 ហើយកំណត់ ep ដើម្បីចង្អុលទៅផ្នែក “exx” នៃខ្សែអក្សរ ខណៈពេលដែលមុខងារកំពុងត្រឡប់តម្លៃត្រឹមត្រូវ ប៉ុន្តែកំណត់ ep ដើម្បីចង្អុលទៅផ្នែក “xx” នៃខ្សែអក្សរ។ .
៣.២. កំណែ 5.2
សម្រាកពេក (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 ដើម្បីជៀសវាង flash mapping (XC8-2847) ការងារជុំវិញសម្រាប់បញ្ហាជាមួយមុខងារឧបករណ៍ flash-mapping ដែលបានរាយការណ៍នៅក្នុង 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 ជាមួយនឹងមុខងារដែលមានឈ្មោះ assembler របស់វាបានបញ្ជាក់ដោយប្រើ asm ( ) បង្កសារកំហុសពី assembler ។ ការរួមបញ្ចូលគ្នានេះមិនអាចទៅរួចទេ។
ការបរាជ័យមុខងារ 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 ត្រូវបានបើក ហើយអាសយដ្ឋានរបស់ string literal ត្រូវបានបញ្ជូនយ៉ាងជាក់លាក់ទៅកាន់ data address space (ទម្លាក់ const qualifier) ឧទាហរណ៍ample, (uint 8_t *) “ជំរាបសួរពិភពលោក!” ។ ការព្រមានគឺមានបញ្ហាប្រសិនបើអាសយដ្ឋានអាចនឹងមិនត្រឹមត្រូវ នៅពេលដែលទ្រនិចទិន្នន័យ const ត្រូវបានបញ្ជូនយ៉ាងច្បាស់ទៅកាន់ទំហំអាសយដ្ឋានទិន្នន័យ។
ការដាក់វត្ថុ const មិនទាន់ចាប់ផ្តើម (XC8-2408) វត្ថុដែលមិនងាយនឹងបង្កជាហេតុ const និង const មិនត្រូវបានដាក់ក្នុងអង្គចងចាំកម្មវិធីនៅលើឧបករណ៍ដែលគូសផែនទីទាំងអស់ ឬផ្នែកនៃអង្គចងចាំកម្មវិធីរបស់ពួកគេទៅក្នុងចន្លោះអាសយដ្ឋានទិន្នន័យ។ សម្រាប់ឧបករណ៍ទាំងនេះ វត្ថុបែបនេះឥឡូវនេះត្រូវបានដាក់ក្នុងអង្គចងចាំកម្មវិធី ដែលធ្វើឱ្យប្រតិបត្តិការរបស់ពួកគេស្របជាមួយនឹងឧបករណ៍ផ្សេងទៀត។
៣.១. កំណែ 5.3 (ការចេញផ្សាយសុវត្ថិភាពមុខងារ)
គ្មាន។
៣.២. កំណែ 5.4
កំហុសនៅពេលពន្យារពេល (XC8-2774) ការផ្លាស់ប្តូរតិចតួចនៅក្នុងការបង្កើនប្រសិទ្ធភាពរបៀបឥតគិតថ្លៃលំនាំដើមបានរារាំងការបត់ថេរនៃកន្សោម operand ទៅនឹងមុខងារដែលភ្ជាប់មកជាមួយពន្យាពេល ដែលនាំឱ្យពួកវាត្រូវបានចាត់ទុកថាមិនថេរ និងបង្កឱ្យមានកំហុស៖ builtin avr delay_cycles រំពឹងថានឹងមានចំនួនគត់ពេលចងក្រងថេរ។
៣.២. កំណែ 5.5
ការបែងចែកជាប់គ្នាដោយប្រើ _at (XC8-2653) ការបែងចែកវត្ថុច្រើនកន្លែងជាប់គ្នាក្នុងផ្នែកដែលមានឈ្មោះដូចគ្នា និងការប្រើ _at ( ) មិនដំណើរការត្រឹមត្រូវ។ សម្រាប់អតីតampលេ៖
const char arr1[] __attribute__((section(“.mysec”)))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __attribute__((section(“.mysec”))) = {0xEF, 0xFE};
គួរតែដាក់ arr2 ភ្លាមៗបន្ទាប់ពី arr1។
ការបញ្ជាក់អាសយដ្ឋានចាប់ផ្តើមផ្នែក (XC8-2650) The -W1, –section-start option បានបរាជ័យក្នុងការដាក់ផ្នែកនៅអាសយដ្ឋានចាប់ផ្តើមដែលបានតែងតាំង។ បញ្ហានេះត្រូវបានជួសជុលសម្រាប់ផ្នែកដែលមានឈ្មោះផ្ទាល់ខ្លួន។ ទោះយ៉ាងណាក៏ដោយ វានឹងមិនដំណើរការសម្រាប់ផ្នែកស្តង់ដារណាមួយ ដូចជា . អត្ថបទឬ។ bss ដែលត្រូវតែដាក់ដោយប្រើជម្រើស -W1, -T ។
Linker គាំងនៅពេលសម្រាក (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 តំណភ្ជាប់ជម្រើស (សម្រាប់ឧample បានឆ្លងកាត់ដោយប្រើជម្រើសកម្មវិធីបញ្ជា -vl) ត្រូវបានបញ្ជាក់ ប្រភពដើមនៃតំបន់អត្ថបទ/ទិន្នន័យដែលត្រូវគ្នាត្រូវបានធ្វើបច្ចុប្បន្នភាព។ ទោះយ៉ាងណាក៏ដោយ អាសយដ្ឋានបញ្ចប់មិនត្រូវបានកែតម្រូវតាមនោះ ដែលអាចនាំទៅដល់តំបន់លើសពីជួរអង្គចងចាំរបស់ឧបករណ៍គោលដៅ។
ការគាំងជាមួយនឹងមុខងារលើសគុណលក្ខណៈ (XC8-2580) កម្មវិធីចងក្រងបានគាំង ប្រសិនបើមុខងារមួយត្រូវបានប្រកាសដោយប្រើគុណលក្ខណៈ interrupt, signal ឬ nmi ច្រើនជាងមួយ ឧ, attribute ( ( signal , interrupt ) )។
លេខកូដរំខាន ATtiny មិនត្រឹមត្រូវ (XC8-2465) នៅពេលបង្កើតសម្រាប់ឧបករណ៍ ATtiny និងការបង្កើនប្រសិទ្ធភាពត្រូវបានបិទ (-00) មុខងាររំខានអាចបណ្តាលឱ្យដំណើរការហើយចេញពីសារដំឡើងជួរ។
ជម្រើសមិនត្រូវបានឆ្លងកាត់ (XC8-2452) នៅពេលប្រើជម្រើសជាមួយជម្រើសតំណភ្ជាប់ជាច្រើនដែលបំបែកដោយសញ្ញាក្បៀស មិនមែនជម្រើសតំណភ្ជាប់ទាំងអស់ត្រូវបានបញ្ជូនទៅអ្នកភ្ជាប់នោះទេ។
កំហុសក្នុងការអានអង្គចងចាំកម្មវិធីដោយប្រយោល (X03-2450) ក្នុងករណីខ្លះ កម្មវិធីចងក្រងបង្កើតកំហុសខាងក្នុង (មិនអាចស្គាល់ insn) នៅពេលអានតម្លៃពីរបៃពីទ្រនិចទៅអង្គចងចាំកម្មវិធី។
៣.២. កំណែ 5.6
ការចូលដំណើរការទីពីរនៃ បណ្ណាល័យបរាជ័យ (XC8-2381) ការហៅកំណែ Windows នៃ xc8-ar ។ បណ្ណសារបណ្ណាល័យ .exe ជាលើកទីពីរ ដើម្បីចូលប្រើបណ្ណសារបណ្ណាល័យដែលមានស្រាប់ អាចនឹងបរាជ័យ ដោយសារមិនអាចប្តូរឈ្មោះសារកំហុសបាន។
៣.២. កំណែ 5.7
កម្មវិធីចងក្រងដែលមិនអាចពន្យល់បាន។ ការបរាជ័យ (XC8-2367) នៅពេលដំណើរការលើប្រព័ន្ធប្រតិបត្តិការ Windows ដែលមានថតបណ្តោះអាសន្នរបស់ប្រព័ន្ធកំណត់ទៅផ្លូវដែលរួមបញ្ចូលចំណុច '.' ។ តួអក្សរ អ្នកចងក្រងអាចបរាជ័យក្នុងការប្រតិបត្តិ។
៣.២. កំណែ 5.8
ស្លាកសកលត្រូវបានដាក់ខុសបន្ទាប់ពីការគូសបញ្ជាក់ (XC8-2299) កូដការជួបប្រជុំដែលសរសេរដោយដៃដែលដាក់ស្លាកសកលនៅក្នុងលំដាប់នៃការជួបប្រជុំគ្នាដែលត្រូវបានដកចេញដោយអរូបីតាមនីតិវិធី ប្រហែលជាមិនត្រូវបានកំណត់ទីតាំងត្រឹមត្រូវទេ។
ការគាំងបន្ធូរអារម្មណ៍ (XC8-2287) ការប្រើជម្រើស -mrelax អាចបណ្តាលឱ្យ linker គាំងនៅពេលដែលការបង្កើនប្រសិទ្ធភាពការបន្ធូរបន្ថយកន្ទុយព្យាយាមដកចេញការណែនាំដែលមិនមែននៅចុងបញ្ចប់នៃផ្នែកមួយ។
គាំងនៅពេលបង្កើនប្រសិទ្ធភាពស្លាកជាតម្លៃ (XC8-2282) កូដដែលប្រើ "Labels as values" ផ្នែកបន្ថែមភាសា GNU C អាចនឹងបណ្តាលឱ្យការបង្កើនប្រសិទ្ធភាពអរូបីតាមនីតិវិធីត្រូវគាំង ដោយមានកំហុសក្នុងការជួសជុលជួរ VMA ដែលបានគ្រោងទុក។
មិនដូច្នេះទេ (XC8-2271) គំរូសម្រាប់ st rstr ( ) និងមុខងារផ្សេងទៀតពី លែងបញ្ជាក់គុណវុឌ្ឍិ const មិនស្តង់ដារលើទ្រនិចខ្សែដែលបានត្រឡប់វិញ នៅពេលមុខងារ -mconst-data-inprogmem ត្រូវបានបិទ។ ចំណាំថាជាមួយនឹងឧបករណ៍ avrxmega3 និង avrtiny មុខងារនេះត្រូវបានបើកជាអចិន្ត្រៃយ៍។
បាត់បង់កម្មវិធីចាប់ផ្តើម (XC8-2269) នៅពេលដែលច្រើនជាង អថេរមួយនៅក្នុងឯកតាការបកប្រែត្រូវបានដាក់ក្នុងផ្នែកមួយ (ដោយប្រើ _section ឬ _attribute_ ((section) )) ហើយអថេរបែបនេះដំបូងគឺសូន្យ រឺមិនមានការចាប់ផ្តើមទេ ការចាប់ផ្តើមសម្រាប់អថេរផ្សេងទៀតនៅក្នុងឯកតាបកប្រែដូចគ្នាដែលត្រូវបានដាក់ នៅក្នុងផ្នែកដូចគ្នាត្រូវបានបាត់បង់។
៣.១. កំណែ 5.1 (ការចេញផ្សាយសុវត្ថិភាពមុខងារ)
គ្មាន។
៣.២. កំណែ 5.2
កំហុសជាមួយពាក្យបញ្ជាវែង (XC8-1983) នៅពេលប្រើគោលដៅ AVR កម្មវិធីចងក្រងអាចឈប់ដោយ a file រកមិនឃើញកំហុស ប្រសិនបើបន្ទាត់ពាក្យបញ្ជាមានទំហំធំខ្លាំង និងមានតួអក្សរពិសេសដូចជា សម្រង់ សញ្ញាសម្គាល់ ជាដើម។
ផ្នែក rodata ដែលមិនបានកំណត់ (XC8-1920) កម្មវិធីភ្ជាប់ AVR បានបរាជ័យក្នុងការកំណត់អង្គចងចាំសម្រាប់ផ្នែក rodata ផ្ទាល់ខ្លួន នៅពេលសាងសង់សម្រាប់ស្ថាបត្យកម្ម avrxmega3 និង avrtiny ដែលអាចបង្កើតកំហុសត្រួតគ្នានៃអង្គចងចាំ
៣.២. កំណែ 5.3 (ការចេញផ្សាយសុវត្ថិភាពមុខងារ)
គ្មាន។
៣.២. កំណែ 5.4
ការបរាជ័យក្នុងការផ្លាស់ទីលំនៅ (XC8-1891) អ្នកបែងចែកសមល្អបំផុតគឺទុក 'រន្ធ' នៃការចងចាំនៅចន្លោះផ្នែកបន្ទាប់ពីការបន្ធូរបន្ថយតំណភ្ជាប់។ ក្រៅពីការបំបែកអង្គចងចាំ នេះបង្កើនលទ្ធភាពនៃការបរាជ័យនៃការផ្លាស់ប្តូរទីតាំងរបស់តំណភ្ជាប់ដែលទាក់ទងនឹងការលោតដែលទាក់ទងនឹងកុំព្យូទ័រ ឬការហៅចេញក្រៅជួរ។
ការណែនាំដែលមិនត្រូវបានផ្លាស់ប្តូរដោយការសម្រាក (XC8-1889) ការសំរាកលំហែ Linker មិនបានកើតឡើងសម្រាប់ការលោត ឬហៅការណែនាំដែលគោលដៅអាចទៅដល់បាន ប្រសិនបើសម្រាក។
បាត់ មុខងារ (XC8E-388) និយមន័យជាច្រើនពី ដូចជា clock_div_t និង clock_prescale set () មិនត្រូវបានកំណត់សម្រាប់ឧបករណ៍ រួមទាំង ATmega324PB, ATmega328PB, ATtiny441, និង ATtiny841។
បាត់ម៉ាក្រូ ម៉ាក្រូរបស់ម៉ាស៊ីនដំណើរការមុន _XC8_MODE_, _XC8_VERS ION, _XC និង _XC8 មិនត្រូវបានកំណត់ដោយស្វ័យប្រវត្តិដោយកម្មវិធីចងក្រងទេ។ ទាំងនេះគឺឥឡូវនេះ។
៣.២. កំណែ 5.5
កំហុសក្នុងការចងក្រងខាងក្នុង (XC8-1822) នៅពេលបង្កើតនៅក្រោម Windows កំហុសក្នុងការចងក្រងខាងក្នុងអាចនឹងត្រូវបានបង្កើតឡើងនៅពេលបង្កើនប្រសិទ្ធភាពកូដ។
លើស RAM មិនត្រូវបានរកឃើញ (XC8-1800, XC8-1796) កម្មវិធីដែលលើសពី RAM ដែលអាចប្រើបានមិនត្រូវបានរកឃើញដោយអ្នកចងក្រងក្នុងស្ថានភាពមួយចំនួន ដែលបណ្តាលឱ្យមានការបរាជ័យកូដពេលដំណើរការ។
អង្គចងចាំពន្លឺដែលបានលុប (XC8-1792) សម្រាប់ឧបករណ៍ avrxmega3 និង avrtiny ផ្នែកនៃអង្គចងចាំពន្លឺអាចត្រូវបានទុកចោលដោយគ្មានកម្មវិធីដោយ MPLAB X អាយឌីអេ។
បរាជ័យក្នុងការប្រតិបត្តិមេ (XC8-1788) នៅក្នុងស្ថានភាពមួយចំនួនដែលកម្មវិធីមិនមានអថេរសកលដែលបានកំណត់ កូដចាប់ផ្តើមពេលដំណើរការមិនចេញទេ ហើយមុខងារចម្បង ( ) មិនត្រូវបានទៅដល់ទេ។
ព័ត៌មានអង្គចងចាំមិនត្រឹមត្រូវ (XC8-1787) សម្រាប់ឧបករណ៍ avrxmega3 និង avrtiny កម្មវិធីទំហំ avr កំពុងរាយការណ៍ថាទិន្នន័យបានតែអានកំពុងប្រើប្រាស់ RAM ជំនួសឱ្យអង្គចងចាំកម្មវិធី។
ការអានអង្គចងចាំកម្មវិធីមិនត្រឹមត្រូវ (XC8-1783) គម្រោងដែលបានចងក្រងសម្រាប់ឧបករណ៍ដែលមានអង្គចងចាំកម្មវិធីដែលបានគូសផែនទីទៅក្នុងចន្លោះអាសយដ្ឋានទិន្នន័យ ហើយដែលកំណត់វត្ថុដោយប្រើម៉ាក្រូ/គុណលក្ខណៈ PROGMEM ប្រហែលជាបានអានវត្ថុទាំងនេះពីអាសយដ្ឋានខុស។
កំហុសខាងក្នុងជាមួយគុណលក្ខណៈ (XC8-1773) កំហុសខាងក្នុងបានកើតឡើងប្រសិនបើអ្នកបានកំណត់វត្ថុទ្រនិចជាមួយនឹង
_at () ឬ attribute() tokens នៅចន្លោះឈ្មោះទ្រនិច និងប្រភេទ dereferenced សម្រាប់ exampឡេ, char *
_at (0x800150) cp; ឥឡូវនេះការព្រមានត្រូវបានចេញប្រសិនបើកូដបែបនេះត្រូវបានជួបប្រទះ។
បរាជ័យក្នុងការប្រតិបត្តិមេ (XC8-1780, XC8-1767, XC8-1754) ការប្រើអថេរ EEPROM ឬកំណត់ fuses ដោយប្រើ config pragma អាចបណ្តាលឱ្យមានការចាប់ផ្តើមទិន្នន័យមិនត្រឹមត្រូវ និង/ឬចាក់សោការប្រតិបត្តិកម្មវិធីនៅក្នុងកូដចាប់ផ្តើមពេលដំណើរការ មុនពេលឈានដល់ main ( ) ។
កំហុស Fuse ជាមួយឧបករណ៍តូចៗ (XC8-1778, XC8-1742) ឧបករណ៍ attiny4/5/9/10/20/40 មានប្រវែង fuse មិនត្រឹមត្រូវដែលបានបញ្ជាក់នៅក្នុងបឋមកថារបស់ពួកគេ files ដែលនាំឱ្យមានកំហុសតំណភ្ជាប់នៅពេលព្យាយាមបង្កើតកូដដែលកំណត់ fuses ។
ការបែងចែក កំហុស (XC8-1777) កំហុសនៃការបែងចែកបណ្តោះអាសន្នត្រូវបានកែតម្រូវ។
ឧប្បត្តិហេតុធ្លាក់ (XC8-1761) ឧបករណ៍ដំឡើង avr-as អាចគាំងនៅពេលដែលកម្មវិធីចងក្រងត្រូវបានដំណើរការក្រោមអ៊ូប៊ុនទូ 18 ។
វត្ថុមិនត្រូវបានសម្អាត (XC8-1752) វត្ថុរយៈពេលផ្ទុកឋិតិវន្តដែលមិនទាន់បង្កើតអាចមិនត្រូវបានសម្អាតដោយលេខកូដចាប់ផ្ដើមពេលដំណើរការទេ។
មិនអើពើការបញ្ជាក់ឧបករណ៍ដែលមានជម្លោះ (XC8-1749) កម្មវិធីចងក្រងមិនបានបង្កើតកំហុសទេ នៅពេលដែលជម្រើសជាក់លាក់នៃឧបករណ៍ជាច្រើនត្រូវបានប្រើប្រាស់ និងចង្អុលបង្ហាញឧបករណ៍ផ្សេងៗ។
ខូចការចងចាំដោយ heap (XC8-1748) The និមិត្តសញ្ញា _heap_start កំពុងត្រូវបានកំណត់មិនត្រឹមត្រូវ ដែលជាលទ្ធផលអាចធ្វើឱ្យអថេរធម្មតាត្រូវបានខូចដោយ heap។
កំហុសក្នុងការផ្លាស់ទីលំនៅរបស់ Linker (XC8-1739) កំហុសផ្លាស់ប្តូរទីតាំងរបស់ linker អាចត្រូវបានបញ្ចេញនៅពេលដែលកូដមាន rjmp ឬ rcall ដែលមានគោលដៅពិតប្រាកដ 4k bytes ឆ្ងាយ។
៣.២. កំណែ 5.6
គ្មាន។
បញ្ហាដែលគេស្គាល់
ខាងក្រោមនេះគឺជាដែនកំណត់ក្នុងប្រតិបត្តិការរបស់អ្នកចងក្រង។ ទាំងនេះអាចជាការរឹតបន្តឹងការសរសេរកូដទូទៅ ឬគម្លាតពីព័ត៌មានដែលមាននៅក្នុងសៀវភៅណែនាំរបស់អ្នកប្រើ។ ស្លាកសញ្ញាតង្កៀបនៅក្នុងចំណងជើងគឺជាការកំណត់អត្តសញ្ញាណបញ្ហានៅក្នុងមូលដ្ឋានទិន្នន័យតាមដាន។ វាអាចមានប្រយោជន៍ ប្រសិនបើអ្នកត្រូវការទាក់ទងផ្នែកជំនួយ។ ធាតុទាំងនោះដែលមិនមានស្លាកគឺជាដែនកំណត់ដែលពណ៌នាអំពី modi operandi ហើយដែលទំនងជានៅតែមានសុពលភាពជាអចិន្ត្រៃយ៍។
៦.១. MPLAB X IDE សមាហរណកម្ម
MPLAB IDE ការរួមបញ្ចូល ប្រសិនបើ Compiler នឹងត្រូវប្រើពី MPLAB IDE នោះអ្នកត្រូវតែដំឡើង MPLAB IDE មុនពេលដំឡើង Compiler ។
៦.២. ការបង្កើតកូដ
Segfault with section-anchors option (XC8-3045) កម្មវិធីដែលបានកំណត់មុខងារជាមួយបញ្ជីអាគុយម៉ង់អថេរ ហើយដែលប្រើជម្រើស -fsection-anchors អាចបង្កឱ្យមានកំហុសក្នុងការចងក្រងខាងក្នុង៖ កំហុសផ្នែកការបែងចែក។
ព័ត៌មានបំបាត់កំហុសចេញពីការធ្វើសមកាលកម្ម (XC8-2948) នៅពេលដែលការបង្កើនប្រសិទ្ធភាពការបន្ធូរបន្ថយ linker បង្រួញការណែនាំ (សម្រាប់ឧample call to rcall សេចក្តីណែនាំ) បន្ទាត់ប្រភពទៅនឹងការគូសផែនទីអាសយដ្ឋានប្រហែលជាមិននៅស៊ីសង្វាក់គ្នាទេ នៅពេលដែលមានប្រតិបត្តិការបង្រួមច្រើនជាងមួយកើតឡើងនៅក្នុងផ្នែកមួយ។
នៅក្នុង example, មានការហៅទូរស័ព្ទចំនួនពីរទៅកាន់ foo ដែលបញ្ចប់ដោយការសម្រាកចំពោះការហៅដែលទាក់ទង។
បរាជ័យក្នុងការបែងចែកអង្គចងចាំ PA (XC8-2881) នៅពេលប្រើកម្មវិធីបង្កើនប្រសិទ្ធភាពអរូបីតាមនីតិវិធី អ្នកភ្ជាប់អាចរាយការណ៍ពីកំហុសក្នុងការបែងចែកអង្គចងចាំ នៅពេលដែលទំហំកូដជិតនឹងចំនួនអង្គចងចាំកម្មវិធីដែលមាននៅលើឧបករណ៍ ទោះបីជាកម្មវិធីគួរតែអាចបំពេញទំហំដែលអាចប្រើបានក៏ដោយ។
មិនសូវឆ្លាត Smart-I0 (XC8-2872) មុខងារ smart-io របស់កម្មវិធីចងក្រងនឹងបង្កើតលេខកូដត្រឹមត្រូវ ប៉ុន្តែអនុភាពល្អបំផុតសម្រាប់អនុគមន៍ snprint f ប្រសិនបើមុខងារ const-data-in-progmem ត្រូវបានបិទ ឬប្រសិនបើឧបករណ៍មាន flash ទាំងអស់របស់វាដែលត្រូវបានគូសវាសទៅក្នុងអង្គចងចាំទិន្នន័យ។
សូម្បីតែ Smart-I0 (XC8-2869) មុខងារ smart-io របស់កម្មវិធីចងក្រងនឹងបង្កើតកូដត្រឹមត្រូវ ប៉ុន្តែល្អបំផុតនៅពេលដែលជម្រើស -flto និង -fno-builtin ត្រូវបានប្រើប្រាស់ទាំងពីរ។
ការដាក់ទិន្នន័យបានតែអានល្អបំផុត (XC8-2849) អ្នកភ្ជាប់បច្ចុប្បន្នមិនដឹងអំពីផ្នែកអង្គចងចាំ APPCODE និង APPDATA ឬផ្នែក [No-Read-While-Write នៅក្នុងផែនទីអង្គចងចាំទេ។ ជាលទ្ធផល មានឱកាសតិចតួចដែលអ្នកភ្ជាប់អាចបែងចែកទិន្នន័យបានតែអាននៅក្នុងតំបន់អង្គចងចាំដែលមិនសមស្រប។ ឱកាសនៃទិន្នន័យមិនត្រឹមត្រូវកើនឡើង ប្រសិនបើមុខងារ const-data-in-progmem ត្រូវបានបើក ជាពិសេសប្រសិនបើមុខងារ const-data-in-config-mapped-progmem ត្រូវបានបើកផងដែរ។ មុខងារទាំងនេះអាចត្រូវបានបិទប្រសិនបើចាំបាច់។
វត្ថុ file ការបញ្ជាទិញដំណើរការ (XC8-2863) លំដាប់នៃវត្ថុ files នឹងត្រូវបានដំណើរការដោយអ្នកភ្ជាប់អាចខុសគ្នាដោយផ្អែកលើការប្រើប្រាស់ការបង្កើនប្រសិទ្ធភាពអរូបីតាមនីតិវិធី (-mpa option)។ វានឹងប៉ះពាល់តែកូដដែលកំណត់មុខងារខ្សោយនៅទូទាំងម៉ូឌុលច្រើន។
កំហុសតំណភ្ជាប់ជាមួយដាច់ខាត (XC8-2777) នៅពេលដែលវត្ថុមួយត្រូវបានធ្វើឡើងដាច់ខាតនៅអាសយដ្ឋាននៅដើម RAM ហើយវត្ថុដែលមិនទាន់បានកំណត់ក៏ត្រូវបានកំណត់ផងដែរ កំហុសនៃតំណភ្ជាប់អាចត្រូវបានបង្កឡើង។
លេខសម្គាល់ការភ្ញាក់ខ្លី (XC8-2775) សម្រាប់ឧបករណ៍ ATA5700/2 ការចុះឈ្មោះ PHIDO/1 ត្រូវបានកំណត់ត្រឹមតែទទឹង 16 ប៊ីត ជាជាង 32 ប៊ីត។
Linker គាំងនៅពេលហៅនិមិត្តសញ្ញា (XC8-2758) តំណភ្ជាប់អាចគាំងប្រសិនបើជម្រើសកម្មវិធីបញ្ជា -mrelax ត្រូវបានប្រើនៅពេលដែលកូដប្រភពហៅនិមិត្តសញ្ញាដែលត្រូវបានកំណត់ដោយប្រើជម្រើស -cc., –de f sym linker ។
ការចាប់ផ្តើមមិនត្រឹមត្រូវ (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 អាចនឹងមិនទាន់សម័យជាមួយ DFPs ដែលបានចែកចាយ ហើយត្រូវបានបម្រុងទុកសម្រាប់ប្រើជាមួយនឹងការធ្វើតេស្ដចងក្រងខាងក្នុងប៉ុណ្ណោះ។
អង្គចងចាំត្រួតលើគ្នាមិនត្រូវបានរកឃើញ (XC8-1966) កម្មវិធីចងក្រងមិនបានរកឃើញការត្រួតលើគ្នានៃអង្គចងចាំនៃវត្ថុដែលបានធ្វើឡើងដាច់ខាតនៅអាសយដ្ឋានមួយ (តាមរយៈ _at ( )) និងវត្ថុផ្សេងទៀតដោយប្រើឧបករណ៍បញ្ជាក់ផ្នែក ( ) ហើយដែលត្រូវបានភ្ជាប់ទៅអាសយដ្ឋានដូចគ្នា។
ការបរាជ័យជាមួយមុខងារបណ្ណាល័យ និង _memx (XC8-1763) ហៅថាមុខងារអណ្តែត libgcc ជាមួយនឹងអាគុយម៉ង់ក្នុងចន្លោះអាសយដ្ឋាន memx អាចនឹងបរាជ័យ។ ចំណាំថាទម្លាប់បណ្ណាល័យត្រូវបានហៅពីប្រតិបត្តិករ C មួយចំនួន ដូច្នេះឧទាហរណ៍ampដូច្នេះ កូដខាងក្រោមត្រូវបានប៉ះពាល់៖
ត្រឡប់ regFloatVar > memxFloatVar;
ការអនុវត្ត libgcc មានកំណត់ (AVRTC-731) សម្រាប់ផលិតផល ATTiny4/5/9/10/20/40 ការអនុវត្តបណ្ណាល័យ C/Math ស្តង់ដារនៅក្នុង libgcc មានកម្រិត ឬមិនមានវត្តមាន។
ដែនកំណត់នៃការចងចាំកម្មវិធី (AVRTC-732) រូបភាពអង្គចងចាំកម្មវិធីលើសពី 128 kb ត្រូវបានគាំទ្រដោយ toolchain ។ ទោះយ៉ាងណាក៏ដោយ មានករណីដែលគេស្គាល់ថា linker aborts ដោយគ្មានការបន្ធូរបន្ថយ និងដោយគ្មានសារកំហុសមានប្រយោជន៍ ជាជាងបង្កើត stubs មុខងារដែលត្រូវការ នៅពេលដែលជម្រើស -mre lax ត្រូវបានប្រើ។
ដាក់ឈ្មោះដែនកំហិត (AVRTC-733) ចន្លោះអាស័យដ្ឋានដែលមានឈ្មោះត្រូវបានគាំទ្រដោយ toolchain ដែលស្ថិតនៅក្រោមដែនកំណត់ដែលបានរៀបរាប់នៅក្នុងផ្នែកណែនាំរបស់អ្នកប្រើ ការកំណត់ប្រភេទពិសេស។
តំបន់ពេលវេលា The មុខងារបណ្ណាល័យសន្មតថា GMT និងមិនគាំទ្រតំបន់ម៉ោងក្នុងស្រុក ដូច្នេះម៉ោងក្នុងស្រុក ( ) នឹងត្រឡប់ពេលវេលាដូចគ្នាជាមួយ gmtime ( ) សម្រាប់ឧ។ampលេ
file///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm
ឯកសារ/ធនធាន
![]() |
កម្មវិធីអភិវឌ្ឍន៍កម្មវិធីចងក្រង MICROCHIP MPLAB XC8 C [pdf] សៀវភៅណែនាំរបស់ម្ចាស់ MPLAB XC8 C, កម្មវិធីអភិវឌ្ឍន៍កម្មវិធីចងក្រង MPLAB XC8 C, កម្មវិធីអភិវឌ្ឍន៍កម្មវិធីចងក្រង, កម្មវិធីអភិវឌ្ឍន៍, កម្មវិធី |