MPLAB® XC8 C შემდგენელი ვერსია 2.41 გამოშვების შენიშვნები AVR® MCU-სთვის
მფლობელის სახელმძღვანელო
MPLAB XC8 C შემდგენელის განვითარების პროგრამა
ეს დოკუმენტი შეიცავს მნიშვნელოვან ინფორმაციას MPLAB XC8 C კომპილატორთან დაკავშირებით, როდესაც მიზნად ისახავს მიკროჩიპის AVR მოწყობილობებს.
გთხოვთ, წაიკითხოთ იგი ამ პროგრამული უზრუნველყოფის გაშვებამდე. იხილეთ MPLAB XC8 C კომპილერის გამოშვების შენიშვნები PIC დოკუმენტისთვის, თუ თქვენ იყენებთ კომპილერს 8-ბიტიანი PIC მოწყობილობებისთვის.
დასრულდაview
1.1. შესავალი
Microchip MPLAB® XC8 C კომპილერის ეს გამოშვება შეიცავს რამდენიმე ახალ ფუნქციას და შეცდომების გამოსწორებას.
1.2. აშენების თარიღი
ამ შემდგენლის ვერსიის ოფიციალური აშენების თარიღი არის 8 წლის 2023 თებერვალი.
1.3. Წინა ვერსია
წინა MPLAB XC8 C შემდგენელი ვერსია იყო 2.40, რომელიც აშენდა 3 წლის 2022 ივლისს.
1.4. ფუნქციური უსაფრთხოების სახელმძღვანელო
ფუნქციური უსაფრთხოების სახელმძღვანელო MPLAB XC შემდგენელებისთვის ხელმისაწვდომია დოკუმენტაციის პაკეტში ფუნქციონალური უსაფრთხოების ლიცენზიის შეძენისას.
1.5. კომპონენტის ლიცენზიები და ვერსიები
MPLAB XC8 C შემდგენელი AVR MCU ინსტრუმენტებისთვის დაწერილი და განაწილებულია GNU General Public License (GPL) ქვეშ, რაც ნიშნავს, რომ მისი საწყისი კოდი თავისუფლად ნაწილდება და ხელმისაწვდომია საზოგადოებისთვის.
GNU GPL-ის ქვეშ არსებული ხელსაწყოების წყაროს კოდი შეიძლება ჩამოიტვირთოს მიკროჩიპისგან დამოუკიდებლად webსაიტი. თქვენ შეგიძლიათ წაიკითხოთ GNU GPL ფაილში, სახელწოდებით, რომელიც მდებარეობს თქვენი install license.txt avr/doc დირექტორიაში. GPL-ის საფუძველში მყოფი პრინციპების ზოგადი განხილვა შეგიძლიათ იხილოთ აქ.
სათაურის ფაილებისთვის, დამაკავშირებელი სკრიპტებისა და გაშვების ბიბლიოთეკებისთვის მოწოდებული დამხმარე კოდი არის საკუთრების კოდი და არ ვრცელდება GPL-ში.
ეს შემდგენელი არის GCC ვერსიის 5.4.0, binutils 2.26 ვერსიის იმპლემენტაცია და იყენებს avr-libc ვერსია 2.0.0.
1.6. სისტემური მოთხოვნები
MPLAB XC8 C შემდგენელი და მასში გამოყენებული სალიცენზიო პროგრამული უზრუნველყოფა ხელმისაწვდომია სხვადასხვა ოპერაციული სისტემებისთვის, მათ შორის შემდეგი 64-ბიტიანი ვერსიებისთვის: Microsoft® Windows® 10-ის პროფესიონალური გამოცემები; Ubuntu® 18.04; და macOS® 10.15.5. ბინარები Windows-ისთვის კოდირებულია. ბინარები macOS-ისთვის კოდირებულია და დამოწმებულია ნოტარიულად. MPLAB XC Network License Server ხელმისაწვდომია სხვადასხვა 64-ბიტიანი ოპერაციული სისტემებისთვის, მათ შორის Microsoft Windows 10 და ზემოთ; Ubuntu 18.04 და ზემოთ; ან macOS 10.15 და ზემოთ. სერვერი ასევე შეიძლება იმუშაოს სხვადასხვა ოპერაციულ სისტემაზე, მათ შორის Windows Server, Linux დისტრიბუციებზე, როგორიცაა Oracle® Enterprise Linux® და Red Hate Enterprise Linux, ისევე როგორც მხარდაჭერილი ოპერაციული სისტემების უფრო ძველი ვერსიები. თუმცა, MPLAB XC ქსელის სალიცენზიო სერვერი არ არის გამოცდილი ამ ოპერაციულ სისტემებზე. MPLAB XC ქსელის სალიცენზიო სერვერის გაშვება შესაძლებელია მხარდაჭერილი OS-ის ვირტუალურ მანქანებზე, ვირტუალური მანქანის ლიცენზიის გამოყენებით ქსელის ლიცენზიებისთვის (SW006021-VM). MPLAB XC ქსელის სერვერის ყველა 32-ბიტიანი ვერსია შეწყვეტილია 3.00 ვერსიიდან დაწყებული.
მოწყობილობები მხარდაჭერილია
ეს კომპილერი მხარს უჭერს ყველა ხელმისაწვდომ 8-ბიტიან AVR MCU მოწყობილობას გამოშვების დროს. იხილეთ (შემდგენელის დირექტორიაში) ყველა მხარდაჭერილი მოწყობილობის სია. ეს ფაილები ასევე ჩამოთვლილია
avr_chipinfo.html დოკუმენტის კონფიგურაციის ბიტის პარამეტრები თითოეული მოწყობილობისთვის.
1.7. გამოცემები და ლიცენზიის განახლებები
MPLAB XC8 შემდგენელი შეიძლება გააქტიურდეს როგორც ლიცენზირებული (PRO) ან არალიცენზირებული (უფასო) პროდუქტი. თქვენ უნდა შეიძინოთ აქტივაციის გასაღები თქვენი კომპილერის ლიცენზირებისთვის. ლიცენზია იძლევა ოპტიმიზაციის უფრო მაღალ დონეს უფასო პროდუქტთან შედარებით. არალიცენზირებული შემდგენელი შეიძლება მუშაობდეს განუსაზღვრელი ვადით ლიცენზიის გარეშე. MPLAB XC8 ფუნქციური უსაფრთხოების შემდგენელი უნდა გააქტიურდეს მიკროჩიპიდან შეძენილი ფუნქციური უსაფრთხოების ლიცენზიით. შემდგენელი არ იმუშავებს ამ ლიცენზიის გარეშე. გააქტიურების შემდეგ, შეგიძლიათ აირჩიოთ ნებისმიერი ოპტიმიზაციის დონე და გამოიყენოთ კომპილერის ყველა ფუნქცია. MPLAB XC ფუნქციური უსაფრთხოების შემდგენელის ეს გამოშვება მხარს უჭერს ქსელის სერვერის ლიცენზიას.
იხილეთ MPLAB XC C შემდგენელების ინსტალაცია და ლიცენზირება (DS50002059) დოკუმენტი ლიცენზიის ტიპებისა და ლიცენზიით შემდგენლის ინსტალაციის შესახებ ინფორმაციისთვის.
1.8. ინსტალაცია და გააქტიურება
აგრეთვე იხილეთ მიგრაციის საკითხები და შეზღუდვები სექციები მნიშვნელოვანი ინფორმაციისთვის უახლესი ლიცენზიის მენეჯერის შესახებ, რომელიც შედის ამ შემდგენელთან.
თუ იყენებთ MPLAB IDE-ს, დარწმუნდით, რომ დააინსტალირეთ MPLAB X IDE-ის უახლესი ვერსია 5.0 ან უფრო ახალი ამ ხელსაწყოს ინსტალაციამდე. გამოდით IDE-დან კომპილერის დაყენებამდე. გაუშვით (Windows), (Linux) ან (macOS) .exe .run .app compiler ინსტალერი აპლიკაცია, მაგ. და მიჰყევით ეკრანზე მითითებებს. XC8-1.00.11403-windows.exe რეკომენდებულია ნაგულისხმევი ინსტალაციის დირექტორია. თუ იყენებთ Linux-ს, უნდა დააინსტალიროთ შემდგენელი ტერმინალის გამოყენებით და root ანგარიშიდან. დააინსტალირეთ macOS ანგარიშის გამოყენებით ადმინისტრატორის პრივილეგიებით.
გააქტიურება ახლა ინსტალაციისგან ცალკე ხორციელდება. დამატებითი ინფორმაციისთვის იხილეთ დოკუმენტის ლიცენზიის მენეჯერი MPLAB® XC C შემდგენელებისთვის (DS52059).
თუ თქვენ აირჩევთ შემდგენელის გაშვებას შეფასების ლიცენზიის ქვეშ, ახლა მიიღებთ გაფრთხილებას შედგენისას, როდესაც თქვენი შეფასების პერიოდის დასრულებიდან 14 დღეში იქნებით. იგივე გაფრთხილება გაიცემა, თუ თქვენი HPA გამოწერის დასრულებიდან 14 დღის განმავლობაში ხართ.
XC ქსელის სალიცენზიო სერვერი არის ცალკე ინსტალერი და არ შედის ერთი მომხმარებლის შემდგენელის ინსტალერში.
XC ლიცენზიის მენეჯერი ახლა მხარს უჭერს მცურავი ქსელის ლიცენზიების როუმინგს. მობილურის მომხმარებლებისთვის განკუთვნილი ეს ფუნქცია საშუალებას აძლევს მცურავ ლიცენზიას მოკლე დროში გამორთოს ქსელი. ამ ფუნქციის გამოყენებით შეგიძლიათ გათიშოთ ქსელი და კვლავ გამოიყენოთ თქვენი MPLAB XC შემდგენელი. ამ ფუნქციის შესახებ მეტი ინფორმაციისთვის იხილეთ XCLM ინსტალაციის doc საქაღალდე.
MPLAB X IDE მოიცავს ლიცენზიების ფანჯარას (ინსტრუმენტები > ლიცენზიები) როუმინგის ვიზუალურად მართვისთვის.
1.8.1. ინსტალაციის საკითხების მოგვარება
თუ Windows-ის რომელიმე ოპერაციული სისტემის ქვეშ შემდგენლის დაყენებისას სირთულეები გაქვთ, სცადეთ შემდეგი წინადადებები.
გაუშვით ინსტალაცია ადმინისტრატორის სახით.
დააყენეთ საინსტალაციო აპლიკაციის ნებართვები „სრული კონტროლი“. (დააწკაპუნეთ მაუსის მარჯვენა ღილაკით ფაილზე, აირჩიეთ თვისებები, უსაფრთხოების ჩანართი, აირჩიეთ მომხმარებელი, შეცვალეთ.)
დააყენეთ დროებითი საქაღალდის ნებართვები "სრული კონტროლი".
Temp საქაღალდის ადგილმდებარეობის დასადგენად, Run ბრძანებაში ჩაწერეთ %temp% (Windows logo key + R).
ეს გახსნის ფაილების მკვლევარის დიალოგს, რომელიც აჩვენებს ამ დირექტორიას და საშუალებას მოგცემთ განსაზღვროთ ამ საქაღალდის გზა.
1.9. შემდგენელი დოკუმენტაცია
შემდგენელის მომხმარებლის სახელმძღვანელო შეიძლება გაიხსნას HTML გვერდიდან, რომელიც იხსნება თქვენს ბრაუზერში MPLAB X IDE დაფაზე დახმარების ლურჯი ღილაკის დაწკაპუნებისას, როგორც ეს ნაჩვენებია ეკრანის სურათზე.
თუ თქვენ აშენებთ 8-ბიტიან AVR სამიზნეებს, MPLAB® XC8 C შემდგენელის მომხმარებლის სახელმძღვანელო AVR® MCU-სთვის შეიცავს ინფორმაციას შემდგენელის ვარიანტებისა და ფუნქციების შესახებ, რომლებიც გამოიყენება ამ არქიტექტურისთვის.
1.10.მომხმარებლის მხარდაჭერა
Microchip მიესალმება შეცდომების შესახებ შეტყობინებებს, წინადადებებს ან კომენტარებს ამ შემდგენლის ვერსიასთან დაკავშირებით. გთხოვთ, მიმართოთ შეცდომების შესახებ შეტყობინებებს ან ფუნქციების მოთხოვნას მხარდაჭერის სისტემის მეშვეობით.
დოკუმენტაციის განახლებები
MPLAB XC8 დოკუმენტაციის ონლაინ და განახლებული ვერსიებისთვის, გთხოვთ, ეწვიოთ Microchip-ის ონლაინ ტექნიკურ დოკუმენტაციას webსაიტი. ახალი ან განახლებული AVR დოკუმენტაცია ამ გამოშვებაში:
- MPLAB® XC8 C შემდგენელის მომხმარებლის სახელმძღვანელო AVR® MCU-სთვის (რევიზია G)
- AVR® GNU Toolchain to MPLAB® XC8 მიგრაციის სახელმძღვანელო (რევიზია A)
- Hexmate-ის მომხმარებლის სახელმძღვანელო (რევიზია B)
AVR® GNU Toolchain-ში MPLAB® XC8 მიგრაციის გზამკვლევი აღწერს ცვლილებებს წყაროს კოდში და build-ის ვარიანტებში, რომლებიც შეიძლება საჭირო გახდეს, თუ გადაწყვეტთ C-ზე დაფუძნებული პროექტის მიგრაციას AVR 8-ბიტიანი GNU Toolchain-დან მიკროჩიპის MPLAB XC8 C შემდგენელში. მიკროჩიპის ერთიანი სტანდარტული ბიბლიოთეკის საცნობარო სახელმძღვანელო აღწერს მიკროჩიპის ერთიანი სტანდარტული ბიბლიოთეკის მიერ განსაზღვრული ფუნქციების ქცევას და ინტერფეისს, ასევე ბიბლიოთეკის ტიპებისა და მაკროების დანიშნულ გამოყენებას. ამ ინფორმაციის ნაწილი ადრე იყო MPLAB® XC8 C შემდგენელის მომხმარებლის სახელმძღვანელოში AVR® MCU. მოწყობილობის სპეციფიკური ბიბლიოთეკის ინფორმაცია კვლავ შეიცავს ამ შემდგენლის სახელმძღვანელოში.
თუ თქვენ ახლახან იწყებთ 8-ბიტიანი მოწყობილობებით და MPLAB XC8 C შემდგენელით, MPLAB® XC8 მომხმარებლის სახელმძღვანელო ჩაშენებული ინჟინრებისთვის – AVR® MCUs (DS50003108) შეიცავს ინფორმაციას MPLAB X IDE-ში პროექტების დაყენებისა და თქვენი კოდის დაწერის შესახებ. პირველი MPLAB XC8 C პროექტი. ეს სახელმძღვანელო ახლა განაწილებულია შემდგენელთან ერთად.
Hexmate-ის მომხმარებლის სახელმძღვანელო განკუთვნილია მათთვის, ვინც მუშაობს Hexmate-ზე, როგორც ცალკეული აპლიკაცია.
რა არის ახალი
შემდეგი არის ახალი AVR-სამიზნე ფუნქციები, რომლებსაც შემდგენელი ახლა მხარს უჭერს. ვერსიის ნომერი ქვესათაურებში მიუთითებს შემდგენელის პირველ ვერსიაზე, რომელიც მხარს უჭერს შემდეგ ფუნქციებს.
3.1. ვერსია 2.41
Bootrow მხარდაჭერა (XC8-3053) შემდგენელი განათავსებს ნებისმიერი განყოფილების შინაარსს პრეფიქსით at.bootrow მისამართი 0x860000 HEX ფაილში. ეს სექციები გამოიყენება BOOTROW მეხსიერებისთვის, რომელიც განკუთვნილია გასაღებებისა და სხვა უსაფრთხო ინფორმაციის შესანახად, რომელიც ხელმისაწვდომი უნდა იყოს მხოლოდ ჩამტვირთველისთვის.
ზედმეტი დაბრუნების აღმოფხვრა (XC8-3048) შემდგენელი ახლა აღმოფხვრის ზედმეტ ინსტრუქციებს ret ფუნქციებში კუდის ნახტომით, როდესაც გამოიყენება მორგებული ლინკერის სკრიპტები. ეს არის ადრე შესრულებული ოპტიმიზაციის მსგავსი, მაგრამ ახლა ის შესრულებულია ყველა ობოლი სექციაზე, მაშინაც კი, თუ გამოყენებულია მორგებული ლინკერის სკრიპტი და საუკეთესო მორგებული განაწილების სქემა არ არის თამაშში. დროის ტიპის შეცვლა (XC8-2982, 2932) C99 სტანდარტული ბიბლიოთეკის ტიპი, შეიცვალა time_t ტიპზე, რაც იძლევა კოდის ზომის გაუმჯობესებას ზოგიერთ დროსთან დაკავშირებულ ხანგრძლივ ფუნქციებში, მაგ. ხელმოუწერელი ხანგრძლივი mktime()
ახალი nop (XC8-2946, 2945) მაკრო დაემატა. ეს მაკრო ათავსებს no- NOP() nop ოპერაციის ინსტრუქცია გამოსავალში.
განახლება XCLM-ზე (XC8-2944) შემდგენლთან ერთად გამოყენებული ლიცენზიის მენეჯერი განახლებულია და ახლა უფრო რეაგირებს შემდგენელის ლიცენზიის დეტალების შემოწმებისას.
Trampოლინირებული ზარები (XC8-2760) შემდგენელს ახლა შეუძლია შეცვალოს გრძელი ფორმის ზარის ინსტრუქციები უფრო მოკლე ფარდობითი ზარებით, როდესაც ინსტრუქციების ფარდობითი ფორმები ჩვეულებრივ იქნება მათი დანიშნულების არეალის მიღმა. ამ სიტუაციაში, შემდგენელი შეეცდება შეცვალოს ინსტრუქციებით, რათა გამოიძახოს rcall ინსტრუქცია, რომელიც იქნება 'trampoline' შესრულება საჭირო მისამართზე, მაგample: ჯმპ
rcall tramp_ფუ ;ფოო იყო
…
rcall tramp_ფუ
…
tramp_foo:
ჯმპ ფოო
ეს ოპტიმიზაცია, პროგრამის ნაკადის მსგავს ოპტიმიზაციებთან ერთად, კონტროლდება -mrelax ვარიანტით.
3.2. ვერსია 2.40
ახალი მოწყობილობის მხარდაჭერა ახლა ხელმისაწვდომია შემდეგ AVR ნაწილებზე: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64DAV28, AVR64D32, AVR64, AVR48, AVRXNUMX, AVRXNUMX, AVRXNUMXDDXNUMX AVRXNUMXEAXNUMX.
გაუმჯობესებული პროცედურული აბსტრაქცია პროცედურული აბსტრაქციის (PA) ოპტიმიზაციის ინსტრუმენტი გაუმჯობესებულია ისე, რომ კოდის შემცველი ფუნქციის გამოძახების ინსტრუქცია (/) შეიძლება გამოიწეროს. ეს მოხდება მხოლოდ იმ შემთხვევაში, თუ დასტა არ გამოიყენება არგუმენტების გადასაცემად და ფუნქციიდან დაბრუნებული მნიშვნელობის მისაღებად. სტეკი გამოიყენება ცვლადი არგუმენტების სიით ფუნქციის გამოძახებისას ან ფუნქციის გამოძახებისას, რომელიც უფრო მეტ არგუმენტს იღებს, ვიდრე ამ მიზნისთვის განკუთვნილი რეგისტრებია. ამ მახასიათებლის გამორთვა შესაძლებელია ოფციის გამოყენებით, ან პროცედურული აბსტრაქცია შეიძლება მთლიანად გამორთოთ ობიექტის ფაილისთვის ან ფუნქციისთვის, the- და, შესაბამისად, ან ატრიბუტის (სპეციფიკატორის) შერჩევით ფუნქციების გამოყენებით.
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 სამიზნეების შექმნისას. ეს პარამეტრი ინახავს მითითებულ მეხსიერების დიაპაზონს მონაცემთა ან პროგრამის მეხსიერების სივრცეში, რაც ხელს უშლის ლინკერს ამ ზონაში კოდის ან ობიექტების დასახლებაში. ჭკვიანი IO Smart IO ფუნქციებში განხორციელდა რამდენიმე გაუმჯობესება, მათ შორის printf-ის ძირითადი კოდის ზოგადი შესწორებები, %n კონვერტაციის სპეციფიკატორის დამოუკიდებელ ვარიანტად განხილვა, მოთხოვნისამებრ დაკავშირება vararg pop რუტინებში, მონაცემთა მოკლე ტიპების გამოყენებით, სადაც შესაძლებელია, დამუშავებისთვის. IO ფუნქციის არგუმენტები და საერთო კოდის ფაქტორინგი ველის სიგანისა და ზუსტი დამუშავებისას. ამან შეიძლება გამოიწვიოს მნიშვნელოვანი კოდის და მონაცემთა დაზოგვა, ასევე გაზარდოს IO-ს შესრულების სიჩქარე.
3.3. ვერსია 2.39 (ფუნქციური უსაფრთხოების გამოშვება)
ქსელის სერვერის ლიცენზია MPLAB XC8 ფუნქციური უსაფრთხოების შემდგენელი მხარს უჭერს ქსელის სერვერის ლიცენზიას.
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 ოფცია შეიძლება გამოყენებულ იქნას იმისთვის, რომ ლინკერმა მოათავსოს ყველა const-კვალიფიცირებული მონაცემი ერთ 32k განყოფილებაში და ავტომატურად მოახდინოს შესაბამისი SFR რეგისტრის ინიციალიზაცია, რათა უზრუნველყოს, რომ ეს მონაცემები დაფიქსირდეს მონაცემთა მეხსიერებაში. სივრცე, სადაც უფრო ეფექტური იქნება წვდომა.
მიკროჩიპის ერთიანი სტანდარტული ბიბლიოთეკები MPLAB XC-ის ყველა შემდგენელი იზიარებს მიკროჩიპის ერთიან სტანდარტულ ბიბლიოთეკას, რომელიც ახლა ხელმისაწვდომია MPLAB XC8-ის ამ გამოშვებით. MPLA# XC8 C შემდგენელის მომხმარებლის სახელმძღვანელო AVO MCU-სთვის აღარ შეიცავს ამ სტანდარტული ფუნქციების დოკუმენტაციას. ეს ინფორმაცია ახლა შეგიძლიათ იხილოთ Microchip Unified Standard Library Reference Guide-ში. გაითვალისწინეთ, რომ avr-libc-ის მიერ ადრე განსაზღვრული ზოგიერთი ფუნქცია აღარ არის ხელმისაწვდომი. (იხილეთ ლილას ფუნქცია.)
Smart I0 როგორც ახალი ერთიანი ბიბლიოთეკების ნაწილი, I0 ფუნქციები printf და scanf ოჯახებში ახლა პერსონალურად გენერირებულია თითოეულ build-ზე, იმის მიხედვით, თუ როგორ გამოიყენება ეს ფუნქციები პროგრამაში. ამან შეიძლება მნიშვნელოვნად შეამციროს პროგრამის მიერ გამოყენებული რესურსები.
Smart ICI დახმარების ვარიანტი ჭკვიანი I0 ფუნქციების ზარების ანალიზის დროს (როგორიცაა print f () ან scanf ()), შემდგენელი ყოველთვის ვერ განსაზღვრავს ფორმატის სტრიქონიდან ან არგუმენტებიდან გამოიტანს ზარისთვის საჭირო კონვერტაციის სპეციფიკატორებს. ადრე, შემდგენელი ყოველთვის არ აკეთებდა ვარაუდებს და დარწმუნდა, რომ სრულად ფუნქციონალური 10 ფუნქცია იყო დაკავშირებული პროგრამის საბოლოო სურათში. დამატებულია ახალი – msmart-io-format=fmt ოფცია, რათა შემდგენელმა შეძლოს მომხმარებლის მიერ ინფორმირებული კონვერტაციის სპეციფიკაციების შესახებ, რომლებიც გამოიყენება ჭკვიანი I0 ფუნქციების მიერ, რომელთა გამოყენება ორაზროვანია, რაც ხელს უშლის ზედმეტად გრძელი 10 რუტინის დაკავშირებას. (დამატებითი ინფორმაციისთვის იხილეთ smart-io-format Option.)
მორგებული სექციების განთავსება ადრე, -W1, -section-start ოფცია ათავსებდა მითითებულ განყოფილებას მოთხოვნილ მისამართზე მხოლოდ მაშინ, როდესაც ლინკერის სკრიპტი განსაზღვრავდა გამომავალ განყოფილებას იმავე სახელით. როდესაც ეს ასე არ იყო, განყოფილება განთავსდა ლინკერის მიერ არჩეულ მისამართზე და ეს ვარიანტი არსებითად იგნორირებული იყო. ახლა ეს პარამეტრი იქნება დაცული ყველა მორგებული განყოფილებისთვის, მაშინაც კი, თუ ლინკერის სკრიპტი არ განსაზღვრავს განყოფილებას. ამასთან, გაითვალისწინეთ, რომ სტანდარტული სექციებისთვის, ასეთი. ტექსტი,. bss ან . მონაცემების მიხედვით, საუკეთესო მორგებულ ალოკატორს კვლავ ექნება სრული კონტროლი მათ განთავსებაზე და ოფციონს არანაირი ეფექტი არ ექნება. გამოიყენეთ -ton, -Tsection=addr ვარიანტი, როგორც აღწერილია მომხმარებლის სახელმძღვანელოში.
3.6. ვერსია 2.32
Stack Guidance ხელმისაწვდომია PRO შემდგენელის ლიცენზიით, შემდგენელის დატის სახელმძღვანელოს ფუნქცია შეიძლება გამოყენებულ იქნას პროგრამის მიერ გამოყენებული ნებისმიერი სტეკის მაქსიმალური სიღრმის შესაფასებლად. იგი აყალიბებს და აანალიზებს პროგრამის გამოძახების გრაფიკს, განსაზღვრავს თითოეული ფუნქციის დასტას გამოყენებას და აწარმოებს ანგარიშს, საიდანაც პროგრამის მიერ გამოყენებული სტეკების სიღრმის დასკვნა შეიძლება. ეს ფუნქცია ჩართულია -mchp-stack-usage ბრძანების ხაზის ვარიანტის მეშვეობით. სტეკის გამოყენების შეჯამება იბეჭდება შესრულების შემდეგ. დეტალური სტეკის ანგარიში ხელმისაწვდომია რუკაზე file, რომელიც შეიძლება მოითხოვოს ჩვეულებრივი გზით.
მოწყობილობის ახალი მხარდაჭერა ხელმისაწვდომია შემდეგი AVR ნაწილებისთვის: Attiny427, Attiny424, Attiny426, Attiny827, Attiny824, Attiny826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32, AVR32DB48, AVR16DB28 ამოღებული მოწყობილობის მხარდაჭერა მხარდაჭერა აღარ არის ხელმისაწვდომი შემდეგი AVR ნაწილებისთვის: AVR16DA32, AVR16DA48 და AVRXNUMXDAXNUMX.
3.7. ვერსია 2.31
არცერთი.
3.8. ვერსია 2.30
ახალი ვარიანტი მონაცემთა ინიციალიზაციის თავიდან ასაცილებლად ახალი -mno-data-init დრაივერის ვარიანტი ხელს უშლის მონაცემთა ინიციალიზაციას და bss სექციების გასუფთავებას. ის მუშაობს docopy მონაცემების გამომავალი ჩახშობის გზით და ასუფთავებს bss სიმბოლოებს ასამბლეაში files, რაც თავის მხრივ ხელს შეუშლის ლინკერის მიერ ამ რუტინების ჩართვას.
გაძლიერებული ოპტიმიზაცია განხორციელდა ოპტიმიზაციის მთელი რიგი გაუმჯობესება, მათ შორის ზედმეტი დაბრუნების ინსტრუქციების წაშლა, ზოგიერთი ნახტომის ამოღება skip-if-bit-is ინსტრუქციის შემდეგ და გაუმჯობესებული პროცედურული აბსტრაქცია და ამ პროცესის გამეორების შესაძლებლობა. ამ ოპტიმიზაციის ზოგიერთი ოპტიმიზაციის გასაკონტროლებლად ახლა უკვე ხელმისაწვდომია დამატებითი ოფციები, კონკრეტულად -f section-anchors, რაც საშუალებას აძლევს სტატიკური ობიექტების წვდომას განხორციელდეს ერთი სიმბოლოს მიმართ; -mpa-iterations=n, რომელიც საშუალებას იძლევა შეიცვალოს პროცედურული აბსტრაქციის გამეორებების რაოდენობა ნაგულისხმევი 2-დან; და, -mpa-callcost-shortcall, რომელიც ახორციელებს უფრო აგრესიულ პროცედურულ აბსტრაქციას, იმ იმედით, რომ ლინკერს შეუძლია შეამსუბუქოს გრძელი ზარები. ამ ბოლო ვარიანტს შეუძლია გაზარდოს კოდის ზომა, თუ ძირითადი ვარაუდები არ განხორციელდება.
ახალი მოწყობილობის მხარდაჭერა ხელმისაწვდომია შემდეგ AVR ნაწილებზე: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64, AVR64DA128, AVR28DA128 32, AVR128DB48 და AVR128DB64. ამოღებული მოწყობილობის მხარდაჭერის მხარდაჭერა აღარ არის ხელმისაწვდომი შემდეგი AVR ნაწილებისთვის: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616, ATA6617.
3.9. ვერსია 2.29 (ფუნქციური უსაფრთხოების გამოშვება)
სათაური file კომპილერის ჩაშენებული ინსტრუმენტებისთვის იმისათვის, რომ დარწმუნდეთ, რომ შემდგენელი შეძლებს შეესაბამებოდეს ენის სპეციფიკაციებს, როგორიცაა MISRA, სათაური file, რომელიც ავტომატურად შედის , განახლებულია. ეს სათაური შეიცავს ყველა ჩაშენებული ფუნქციის პროტოტიპებს, როგორიცაა buildin_avr_nop ( ) და ჩაშენებული avr delay_cycles () . ზოგიერთი ჩაშენებული შეიძლება არ იყოს MISRA-ს შესაბამისი; მათი გამოტოვება შესაძლებელია კომპილერის ბრძანების ხაზში defineXCSTRICT_MISRA-ის დამატებით. ჩაშენებული ნაწილები და მათი დეკლარაციები განახლებულია ფიქსირებული სიგანის ტიპების გამოსაყენებლად.
3.10. ვერსია 2.20
ახალი მოწყობილობის მხარდაჭერის მხარდაჭერა ხელმისაწვდომია შემდეგი AVR ნაწილებისთვის: ATTINY1624, ATTINY1626 და ATTINY1627.
საუკეთესო მორგების განაწილება საუკეთესო მორგების გამანაწილებელი (BFA) კომპილატორში გაუმჯობესდა ისე, რომ სექციები გამოიყოს იმ თანმიმდევრობით, რაც უკეთეს ოპტიმიზაციას იძლევა. BFA ახლა მხარს უჭერს დასახელებულ მისამართებს და უკეთ ამუშავებს მონაცემთა ინიციალიზაციას.
გაუმჯობესებული პროცედურული აბსტრაქცია პროცედურული აბსტრაქციის ოპტიმიზაცია ახლა უფრო მეტი კოდის თანმიმდევრობებზე ხორციელდება. წინა სიტუაციები, როდესაც ამ ოპტიმიზაციას შესაძლოა გაზრდილიყო კოდის ზომა, მოგვარებული იყო ოპტიმიზაციის კოდის გაცნობით ლინკერის ნაგვის შეგროვების პროცესის შესახებ.
AVR Assembler-ის არარსებობა AVR Assembler აღარ შედის ამ განაწილებაში.
3.11. ვერსია 2.19 (ფუნქციური უსაფრთხოების გამოშვება)
არცერთი.
3.12. ვერსია 2.10
კოდის დაფარვა ეს გამოშვება მოიცავს კოდის დაფარვის ფუნქციას, რომელიც ხელს უწყობს პროექტის წყაროს კოდის შესრულებული მასშტაბის ანალიზს. მის გასააქტიურებლად გამოიყენეთ ვარიანტი -mcodecov=ram. თქვენს აპარატურაზე პროგრამის შესრულების შემდეგ, კოდის დაფარვის ინფორმაცია დაჯგუფდება მოწყობილობაში და ეს შეიძლება გადაიცეს და ნაჩვენები იყოს MPLAB X IDE-ში კოდის დაფარვის მოდულის მეშვეობით. იხილეთ IDE დოკუმენტაცია ამ მოდულის შესახებ ინფორმაციის მისაღებად. #pragma nocodecov შეიძლება გამოყენებულ იქნას შემდგომი ფუნქციების გამოსარიცხად დაფარვის ანალიზიდან. იდეალურ შემთხვევაში, პრაგმა უნდა დაემატოს დასაწყისში file რომ მთლიანად გამოირიცხოს file დაფარვის ანალიზიდან. ალტერნატიულად, _ატრიბუტი_ ( (nocodecov) ) შეიძლება გამოყენებულ იქნას კონკრეტული ფუნქციის გამოსარიცხად დაფარვის ანალიზიდან.
მოწყობილობის აღწერა fileახალი მოწყობილობა file მოუწოდა avr_chipinfo . html მდებარეობს შემდგენელის განაწილების docs დირექტორიაში. ეს file ჩამოთვლის კომპილერის მიერ მხარდაჭერილ ყველა მოწყობილობას. დააწკაპუნეთ მოწყობილობის სახელზე და ის გაიხსნება გვერდი, სადაც ნაჩვენებია ყველა დასაშვები კონფიგურაციის ბიტის პარამეტრი/მნიშვნელობის ტკივილი ამ მოწყობილობისთვის, მაგ.amples. პროცედურული აბსტრაქცია
პროცედურული აბსტრაქციის ოპტიმიზაცია, რომელიც ანაცვლებს ასამბლეის კოდის საერთო ბლოკებს ამ ბლოკის ამოღებულ ასლზე ზარებით, დაემატა კომპილატორს. ისინი შესრულებულია ცალკეული აპლიკაციით, რომელსაც ავტომატურად გამოიძახებს შემდგენელი მე-2, მე-3 ან ს დონის ოპტიმიზაციის არჩევისას. ეს ოპტიმიზაცია ამცირებს კოდის ზომას, მაგრამ მათ შეუძლიათ შეამცირონ შესრულების სიჩქარე და კოდის გამართვა. პროცედურული აბსტრაქცია შეიძლება გამორთოთ ოპტიმიზაციის მაღალ დონეზე ოფციის -mno-pa გამოყენებით, ან შეიძლება ჩართოთ ოპტიმიზაციის დაბალ დონეზე (თქვენი ლიცენზიის მიხედვით) -mpa გამოყენებით. ის შეიძლება გამორთოთ ობიექტისთვის file -mno-pa-on-ის გამოყენებითfile=fileსახელი, ან გამორთულია ფუნქციისთვის -mno-pa-on-function=function-ის გამოყენებით. თქვენი წყაროს კოდის შიგნით, პროცედურული აბსტრაქცია შეიძლება გამორთოთ ფუნქციისთვის ატრიბუტის ( (nopa) ) გამოყენებით ფუნქციის განსაზღვრებით, ან nopa გამოყენებით, რომელიც ფართოვდება ატრიბუტამდე ( (nopa, noinline) ) და ამით ხელს უშლის ფუნქციის ჩასმას. და არის ჩასმული კოდის აბსტრაქცია.
დაბლოკვის ბიტის მხარდაჭერა პრაგმაში #pragma config ახლა შეიძლება გამოყენებულ იქნას AVR დაბლოკვის ბიტების და ასევე სხვა კონფიგურაციის ბიტების დასაზუსტებლად. შეამოწმეთ avr_chipinfo. html file (ზემოთ ნახსენები) პარამეტრის/მნიშვნელობის წყვილებისთვის ამ პრაგმაში გამოსაყენებლად. ახალი მოწყობილობის მხარდაჭერა ხელმისაწვდომია შემდეგი ნაწილებისთვის: AVR28DAl28, AVR64DAl28, AVR32DA 128 და AVR48DA 128.
3.13. ვერსია 2.05
მეტი ბიტი თქვენი ფულისთვის ამ შემდგენელისა და ლიცენზიის მენეჯერის macOS ვერსია ახლა 64-ბიტიანი აპლიკაციაა. ეს უზრუნველყოფს, რომ შემდგენელი დააინსტალირებს და იმუშავებს გაფრთხილების გარეშე macOS-ის ბოლო ვერსიებზე.
Const ობიექტები პროგრამის მეხსიერებაში შემდგენელს ახლა შეუძლია განათავსოს const-კვალიფიცირებული ობიექტები პროგრამის Flash მეხსიერებაში, ვიდრე ისინი განთავსებული იყოს RAM-ში. შემდგენელი შეცვლილია ისე, რომ cons t-კვალიფიცირებული გლობალური მონაცემები ინახება პროგრამის ფლეშ მეხსიერებაში და ამ მონაცემებზე წვდომა შეიძლება პირდაპირ და ირიბად იყოს შესაბამისი პროგრამის მეხსიერების ინსტრუქციების გამოყენებით. ეს ახალი ფუნქცია ჩართულია ნაგულისხმევად, მაგრამ მისი გამორთვა შესაძლებელია -mno-const-data-in-progmem ვარიანტის გამოყენებით. avrxmega3 და avrtiny არქიტექტურისთვის, ეს ფუნქცია არ არის საჭირო და ყოველთვის გამორთულია, რადგან პროგრამის მეხსიერება დატანილია ამ მოწყობილობების მონაცემთა მისამართების სივრცეში.
სტანდარტული უფასოდ ამ კომპილერის არალიცენზირებული (უფასო) ვერსიები ახლა იძლევა ოპტიმიზაციას მე-2 დონემდე და მათ შორის. ეს საშუალებას მისცემს მსგავსი, თუმცა არა იდენტური, გამომავალი, რაც ადრე შესაძლებელი იყო სტანდარტული ლიცენზიის გამოყენებით.
მოგესალმებით AVRASM2 AVRASM2 ასამბლეერი 8-ბიტიანი მოწყობილობებისთვის ახლა შედის XC8 შემდგენელის ინსტალერში. ეს ასამბლეერი არ გამოიყენება XC8 შემდგენელის მიერ, მაგრამ ხელმისაწვდომია პროექტებისთვის, რომლებიც დაფუძნებულია ხელით დაწერილი ასამბლეის წყაროზე.
ახალი მოწყობილობის მხარდაჭერის მხარდაჭერა ხელმისაწვდომია შემდეგი ნაწილებისთვის: ATMEGA1608, ATMEGA1609, ATMEGA808 და ATMEGA809.
3.14. ვერსია 2.00
უმაღლესი დონის დრაივერი ახალი დრაივერი, სახელად xc8-cc, ახლა ზის წინა avr-gcc დრაივერის და xc8 დრაივერის ზემოთ და მას შეუძლია გამოიძახოს შესაბამისი შემდგენელი სამიზნე მოწყობილობის შერჩევის საფუძველზე. ეს დრაივერი იღებს GCC-ის სტილის ვარიანტებს, რომლებიც ან ითარგმნება ან გადაეცემა შესრულებულ შემდგენელს. ეს დრაივერი საშუალებას აძლევს მსგავსი სემანტიკის მსგავსი პარამეტრების გამოყენებას ნებისმიერ AVR ან PIC სამიზნეებთან და, შესაბამისად, არის კომპილატორის გამოძახების რეკომენდებული გზა. საჭიროების შემთხვევაში, ძველი avr-gcc დრაივერი შეიძლება პირდაპირ გამოიძახოთ ძველი სტილის ვარიანტების გამოყენებით, რომლებიც მიღებული იყო კომპილერის ადრინდელ ვერსიებში.
საერთო C ინტერფეისი ამ შემდგენელს ახლა შეუძლია შეესაბამებოდეს MPLAB Common C ინტერფეისს, რაც საშუალებას აძლევს წყაროს კოდის უფრო ადვილად პორტირებას ყველა MPLAB XC შემდგენელში. -mext=cci ოფცია ითხოვს ამ ფუნქციას, რაც საშუალებას აძლევს ალტერნატიულ სინტაქსს მრავალი ენის გაფართოებისთვის.
ახალი ბიბლიოთეკარის დრაივერი ახალი ბიბლიოთეკარის დრაივერი განთავსებულია წინა PIC ბიბლიოთეკარის და AVR avr-ar ბიბლიოთეკარის ზემოთ. ეს დრაივერი იღებს GCC-არქივერის სტილის ვარიანტებს, რომლებიც ან ითარგმნება ან გადაეცემა ბიბლიოთეკარს, რომელიც შესრულდება. ახალი დრაივერი საშუალებას აძლევს მსგავსი სემანტიკის პარამეტრების გამოყენებას ნებისმიერი PIC ან AVR ბიბლიოთეკის შესაქმნელად ან მანიპულირებისთვის. file და ამდენად არის რეკომენდირებული გზა ბიბლიოთეკარის გამოსაძახებლად. თუ საჭიროა მემკვიდრეობითი პროექტებისთვის, წინა ბიბლიოთეკარის გამოძახება შეიძლება უშუალოდ ძველი სტილის ვარიანტების გამოყენებით, რომლებიც მიღებული იყო კომპილერის ადრინდელ ვერსიებში.
მიგრაციის საკითხები
ქვემოთ მოცემულია ფუნქციები, რომლებსაც ახლა სხვაგვარად ამუშავებს შემდგენელი. ამ ცვლილებებმა შეიძლება მოითხოვოს თქვენი წყაროს კოდის შეცვლა, თუ კოდი გადაიტანეთ კომპილერის ამ ვერსიაზე. ქვესათაურებში ვერსიის ნომერი მიუთითებს შემდგენელის პირველ ვერსიაზე, რომელიც მხარს უჭერს შემდგომ ცვლილებებს.
4.1. ვერსია 2.41
ამოღებულია არაზუსტი fma ფუნქციები (XC8-2913) C99 სტანდარტული ბიბლიოთეკა fma 0 -ოჯახის ფუნქციები ( ) არ გამოთვალა გამრავლება-დამატება უსასრულო სიზუსტით ერთ დამრგვალებაზე, სამაგიეროდ დააგროვა დამრგვალების შეცდომები ყოველი ოპერაციის დროს. ეს ფუნქციები ამოღებულია მოწოდებული ბიბლიოთეკიდან.
4.2. ვერსია 2.40
არცერთი.
4.3. ვერსია 2.39 (ფუნქციური უსაფრთხოების გამოშვება)
არცერთი.
4.4. ვერსია 2.36 არცერთი.
4.5. ვერსია 2.35
სტრიქონების ბაზების მართვა (XC8-2420) XC-ის სხვა შემდგენელებთან თანმიმდევრულობის უზრუნველსაყოფად, XC8 string-to ფუნქციები, როგორიცაა strtol () და ა.შ., აღარ შეეცდება შეყვანის სტრიქონის გადაქცევას, თუ მითითებული ბაზა 36-ზე მეტია. და სამაგიეროდ დააყენებს შეცდომას EINVAL-ზე. C სტანდარტი არ აკონკრეტებს ფუნქციების ქცევას, როდესაც ეს საბაზისო მნიშვნელობა აღემატება.
სიჩქარის შეუსაბამო ოპტიმიზაცია პროცედურული აბსტრაქციის ოპტიმიზაცია ჩართული იყო მე-3 დონის ოპტიმიზაციის არჩევისას (-03). ეს ოპტიმიზაცია ამცირებს კოდის ზომას კოდის სიჩქარის ხარჯზე, ამიტომ არ უნდა შესრულებულიყო. პროექტებმა, რომლებიც იყენებენ ამ ოპტიმიზაციის დონეს, შეიძლება დაინახონ განსხვავებები კოდის ზომასა და შესრულების სიჩქარეში, როდესაც აშენდება ამ გამოშვებით.
ბიბლიოთეკის ფუნქციონირება C ბიბლიოთეკის მრავალი სტანდარტული ფუნქციის კოდი ახლა მომდინარეობს Microchip-ის ერთიანი სტანდარტული ბიბლიოთეკიდან, რომელიც შეიძლება გამოავლინოს განსხვავებული ქცევა ზოგიერთ ვითარებაში ყოფილი avr-libc ბიბლიოთეკის მიერ მოწოდებულთან შედარებით. მაგampდა ფორმატირებული ჩასართავად აღარ არის საჭირო 1printf flt ბიბლიოთეკაში ბმული (-1printf_flt ვარიანტი) I0 float-format specifiers-ის მხარდაჭერა. ჭკვიანი I0 მიკროჩიპის ერთიანი სტანდარტული ბიბლიოთეკის მახასიათებლები ამ პარამეტრს ზედმეტად აქცევს. გარდა ამისა, აღარ არის საჭირო _P სუფიქსის რუტინების გამოყენება სტრიქონების და მეხსიერების ფუნქციებისთვის (მაგ. strcpy_P ( ) და ა.შ.), რომლებიც მოქმედებენ const სტრიქონებზე ფლეშში. სტანდარტული C რუტინები (მაგ. strcpy ) სწორად იმუშავებს ასეთ მონაცემებთან, როდესაც ჩართულია const-data-in-program-memory ფუნქცია.
4.6. ვერსია 2.32
არცერთი.
4.7. ვერსია 2.31
არცერთი.
4.8. ვერსია 2.30
არცერთი.
4.1. ვერსია 2.29 (ფუნქციური უსაფრთხოების გამოშვება)
არცერთი.
4.2. ვერსია 2.20
შეიცვალა DFP განლაგება შემდგენელი ახლა იღებს განსხვავებულ განლაგებას, რომელსაც იყენებენ DFP-ები (მოწყობილობის საოჯახო პაკეტები). ეს ნიშნავს, რომ ძველი DFP შეიძლება არ იმუშაოს ამ გამოშვებასთან და ძველი შემდგენელები ვერ შეძლებენ უახლესი DFP-ების გამოყენებას.
4.3. ვერსია 2.19 (ფუნქციური უსაფრთხოების გამოშვება)
არცერთი.
4.4. ვერსია 2.10
არცერთი
4.5. ვერსია 2.05
Const ობიექტები პროგრამის მეხსიერებაში გაითვალისწინეთ, რომ ნაგულისხმევად, const-qualfied ობიექტები განთავსდება და ხელმისაწვდომი იქნება პროგრამის მეხსიერებაში (როგორც აღწერილია ელფერი). ეს გავლენას მოახდენს თქვენი პროექტის ზომასა და შესრულების სიჩქარეზე, მაგრამ უნდა შეამციროს RAM-ის გამოყენება. საჭიროების შემთხვევაში, ამ ფუნქციის გამორთვა შესაძლებელია -mnoconst-data-in-progmem ოფციის გამოყენებით.
4.6. ვერსია 2.00
კონფიგურაციის ფუჟები მოწყობილობის კონფიგურაციის დვრილები ახლა შეიძლება დაპროგრამდეს კონფიგურაციის პრაგმის გამოყენებით, რასაც მოჰყვება პარამეტრის მნიშვნელობის წყვილები დაუკრავენ მდგომარეობის დასაზუსტებლად, მაგ.
#pragma config WDTON = SET
#pragma კონფიგურაცია BODLEVEL = BODLEVEL_4V3
აბსოლუტური ობიექტები და ფუნქციები ობიექტები და ფუნქციები ახლა შეიძლება განთავსდეს მეხსიერებაში კონკრეტულ მისამართზე CCI (მისამართის) სპეციფიკატორის გამოყენებით, მაგ.ampლე:
#შეიცავს
int foobar_at(0x800100);
char __at(0x250) getID(int offset) {… }
ამ სპეციფიკატორის არგუმენტი უნდა იყოს მუდმივი, რომელიც წარმოადგენს მისამართს, რომელზეც განთავსდება პირველი ბაიტი ან ინსტრუქცია. RAM მისამართები მითითებულია 0x800000 ოფსეტურით. ჩართეთ CCI ამ ფუნქციის გამოყენებისთვის.
შეწყვეტის ფუნქციის ახალი სინტაქსი შემდგენელი ახლა იღებს CCI _interrupt (num) სპეციფიკატორს, რათა მიუთითოს, რომ C ფუნქციები არის შეფერხების დამმუშავებლები. დამახასიათებელი იღებს შეწყვეტის ნომერს, მაგampლე:
#შეიცავს
void __interrupt(SPI_STC_vect_num) spi_Isr(void) {…}
დაფიქსირებული საკითხები
ქვემოთ მოცემულია შესწორებები, რომლებიც გაკეთდა შემდგენელში. ამან შეიძლება გამოასწოროს შეცდომები გენერირებულ კოდში ან შეცვალოს შემდგენელის მოქმედება იმით, რაც განკუთვნილი იყო ან მითითებული იყო მომხმარებლის სახელმძღვანელოში. ვერსიის ნომერი ქვესათაურებში მიუთითებს შემდგენელის პირველ ვერსიაზე, რომელიც შეიცავს შესწორებებს შემდგომ საკითხებზე. სათაურში ფრჩხილებში ჩასმული იარლიყ(ებ)ი არის ამ საკითხის იდენტიფიკაცია თვალთვალის მონაცემთა ბაზაში. ეს შეიძლება იყოს სასარგებლო, თუ თქვენ გჭირდებათ დაუკავშირდეთ მხარდაჭერას.
გაითვალისწინეთ, რომ მოწყობილობასთან დაკავშირებული ზოგიერთი პრობლემა გამოსწორებულია მოწყობილობასთან დაკავშირებულ Device Family Pack-ში (DFP). იხილეთ MPLAB პაკეტის მენეჯერი DFP-ებში განხორციელებული ცვლილებებისა და უახლესი პაკეტების ჩამოტვირთვის შესახებ ინფორმაციისთვის.
5.1. ვერსია 2.41
Dongle გამოშვება Ventura (XC8-3088) Dongles-ზე გამოყენებული ლიცენზირებისთვის, შემდგენელი შესაძლოა არ იყოს სათანადოდ წაკითხული macOS Ventura ჰოსტებზე, რამაც გამოიწვია ლიცენზირების წარუმატებლობა. XCLM ლიცენზიის მენეჯერის ცვლილებები ამ საკითხს ასწორებს.
მეხსიერების განაწილების არასწორი მითითება (XC8-2925) ბიბლიოთეკის მეხსიერების მართვის სტანდარტული ფუნქციების გამოყენებით (malloc () et al) მეხსიერების SIZE_MAX ბაიტის (ან მასთან მიახლოებული მნიშვნელობის) გამოყოფის მცდელობა არასწორად დასრულდა. არ იყო გათვალისწინებული, რომ მეხსიერების მარტივი დინამიური განაწილების განხორციელებისას მოთხოვნილი ბლოკის გარდა დამატებითი ბაიტები იყო საჭირო. NULL მაჩვენებელი ახლა დაბრუნდება და შეცდომით დაყენებულია ENOMEM-ზე ასეთ სიტუაციებში.
ამოღებულია არაზუსტი fma ფუნქციები (XC8-2913) C99 სტანდარტული ბიბლიოთეკა fma ( ) -ოჯახის ფუნქციები ( ) არ გამოთვალა გამრავლება-დამატება უსასრულო სიზუსტით ერთ დამრგვალებაზე, სამაგიეროდ დააგროვა დამრგვალების შეცდომები ყოველი ოპერაციის დროს. ეს ფუნქციები ამოღებულია მოწოდებული ბიბლიოთეკიდან.
სტრიქონების კონვერტაციის არასწორი მართვა (XC8-2921, XC8-2652) როდესაც strtod Cr-ის მიერ კონვერტაციისთვის „საგნის მიმდევრობა“ შეიცავდა მცურავი წერტილის რიცხვს ექსპონენციალურ ფორმატში და იყო მოულოდნელი სიმბოლო e/E სიმბოლოს შემდეგ, მაშინ, სადაც endptr იყო მოწოდებული, მას მიენიჭა მისამართი, რომელიც მიუთითებდა სიმბოლოზე e/E-ს შემდეგ, მაშინ როცა ის თავად უნდა მიუთითებდეს e/E სიმბოლოზე, რადგან ის არ იყო გარდაქმნილი. მაგample, strtod („100exx“, &ep) უნდა დააბრუნოს 100.00 და დააყენოს ep სტრიქონის „exx“ ნაწილზე მითითებით, მაშინ როდესაც ფუნქცია აბრუნებდა სწორ მნიშვნელობას, მაგრამ აყენებდა ep-ს, რათა მიუთითებდეს სტრიქონის „xx“ ნაწილზე. .
5.2. ვერსია 2.40
ძალიან მოდუნებული (XCS-2876) -mrelax ოფციის გამოყენებისას შემდგენელი არ ანაწილებდა ზოგიერთ განყოფილებას ერთად, რაც იწვევს კოდის ნაკლებად ოპტიმალურ ზომებს. ეს შეიძლება მომხდარიყო კოდით, რომელიც იყენებდა ახალ MUSL ბიბლიოთეკებს ან სუსტი სიმბოლოებით.
რუკების ფუნქცია არ არის გამორთული, როგორც ეს მითითებულია გაფრთხილებაში (XC8-2875) const-data-in-config-mappedprogmem ფუნქცია დამოკიდებულია const-data-in-progmem ფუნქციაზე, რომელიც ჩართულია. თუ const-data-inconfig-mapped-progmem ფუნქცია აშკარად ჩართული იყო ოფციის გამოყენებით და const-data-inprogmem ფუნქცია გამორთული იყო, ბმულის ნაბიჯი ვერ მოხერხდა, მიუხედავად გამაფრთხილებელი შეტყობინებისა, რომელშიც ნათქვამია, რომ const-data-in-con fig- mapped-progmem ფუნქცია ავტომატურად გამორთული იყო, რაც მთლად სწორი არ იყო. const-data-in-config-mapped-progmem ფუნქცია ახლა სრულად გამორთულია ამ სიტუაციაში.
DFP იცვლება NVMCTRL (XC8-2848) სწორი წვდომისთვის AVR64EA მოწყობილობების მიერ გამოყენებული გაშვების კოდი არ ითვალისწინებდა, რომ NVMCTRL რეგისტრი იყო კონფიგურაციის ცვლილების დაცვის (CCP) ქვეშ და არ შეეძლო I0 SFR-ის დაყენება იმ გვერდზე, რომელსაც იყენებს const-data-in-configmapped-progmem. შემდგენელის ფუნქცია. AVR-Ex_DFP 2.2.55 ვერსიაში განხორციელებული ცვლილებები საშუალებას მისცემს გაშვების გაშვების კოდს სწორად ჩაწეროს ამ რეესტრში.
DFP ცვლილებები თავიდან ასაცილებლად ფლეშ რუკების შედგენა (XC8-2847) დანერგილია AVR128DA28/32/48/64 Silicon Errata-ში (D580000882) მოხსენებული ფლეშ-მაპერირების მოწყობილობის ფუნქციასთან დაკავშირებული პრობლემის გამოსასწორებელი გამოსავალი. const-data-in-config-mapped-progmem შემდგენელი ფუნქცია ნაგულისხმევად არ იქნება გამოყენებული დაზარალებული მოწყობილობებისთვის და ეს ცვლილება გამოჩნდება AVR-Dx_DFP 2.2.160 ვერსიაში.
აგების შეცდომა sinhf-ით ან coshf-ით (XC8-2834) sinhf () ან coshf () ბიბლიოთეკის ფუნქციების გამოყენების მცდელობამ გამოიწვია ბმული შეცდომა, რომელიც აღწერს განუსაზღვრელ მითითებას. გამოტოვებული ფუნქცია, რომელიც მითითებულია, ახლა ჩართულია შემდგენელის განაწილებაში.
შეცდომების აგება nopa-სთან (XC,8-2833) nopa ატრიბუტის გამოყენება ფუნქციით, რომელსაც აქვს მითითებული მისი ასამბლერის სახელი asm ( ) გამოყენებით, გამოიწვია შეცდომის შეტყობინებები ასამბლერისგან. ეს კომბინაცია შეუძლებელია.
ვარიადული ფუნქციის უკმარისობა მაჩვენებლის არგუმენტებით (XC8-2755, XC8-2731) არგუმენტების ცვლადი რაოდენობის მქონე ფუნქციები მოსალოდნელია 24-ბიტიანი (memx ტიპის) მაჩვენებლების გადაცემას ცვლადის არგუმენტების სიაში, როდესაც ჩართულია const-data-in-progmem ფუნქცია. არგუმენტები, რომლებიც მონაცემების მეხსიერების მითითებებს წარმოადგენდნენ, გადადიოდა 16-ბიტიან ობიექტებად, რაც იწვევდა კოდის წარუმატებლობას, როდესაც ისინი საბოლოოდ წაიკითხეს. როდესაც constdata-in-progmem ფუნქცია ჩართულია, ყველა 16-ბიტიანი მაჩვენებლის არგუმენტი ახლა გარდაიქმნება 24-ბიტიან მაჩვენებლებად.
strtoxxx ბიბლიოთეკის ფუნქციები ვერ ხერხდება (XC8-2620) როდესაც const-data-in-progmem ფუნქცია ჩართული იყო, strtoxxx ბიბლიოთეკის ფუნქციებში endptr პარამეტრი სათანადოდ არ განახლდა წყაროს სტრიქონების არგუმენტებისთვის, რომლებიც პროგრამის მეხსიერებაში არ არის.
გაფრთხილებები არასწორი ტრანსლებისთვის (XC8-2612) შემდგენელი ახლა გამოუშვებს შეცდომას, თუ ჩართულია const-in-progmem ფუნქცია და სტრიქონის მისამართი პირდაპირ გადაცემულია მონაცემთა მისამართების სივრცეში (ჩატოვებს const კვალიფიკატორს), მაგ.ample, (uint 8_t *) "Hello World!". გაფრთხილება ჩნდება, თუ მისამართი შეიძლება იყოს არასწორი, როდესაც const მონაცემთა მაჩვენებელი პირდაპირ გადაცემულია მონაცემთა მისამართების სივრცეში.
არაინიციალიზებული const ობიექტების განთავსება (XC8-2408) არაინიციალიზებული const და const არასტაბილური ობიექტები არ იყო განთავსებული პროგრამის მეხსიერებაში მოწყობილობებზე, რომლებიც ასახავს მათი პროგრამის მთელ ან ნაწილს მონაცემთა მისამართების სივრცეში. ამ მოწყობილობებისთვის, ასეთი ობიექტები ახლა მოთავსებულია პროგრამის მეხსიერებაში, რაც მათ მუშაობას შეესაბამება სხვა მოწყობილობებთან.
5.3. ვერსია 2.39 (ფუნქციური უსაფრთხოების გამოშვება)
არცერთი.
5.4. ვერსია 2.36
შეცდომა დაგვიანებისას (XC8-2774) ნაგულისხმევი თავისუფალი რეჟიმის ოპტიმიზაციაში მცირემა ცვლილებებმა ხელი შეუშალა ოპერანდების გამონათქვამების მუდმივ დაკეცვას დაყოვნების ჩაშენებულ ფუნქციებზე, რის შედეგადაც ისინი განიხილება როგორც არასტაბილურები და იწვევს შეცდომას: ჩაშენებული avr delay_cycles მოელის კომპილაციის დროის მთელი რიცხვის მუდმივობას.
5.5. ვერსია 2.35
თანმიმდევრული განაწილება _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 ოფცია ჩუმად ვერ ახერხებდა სექციების განთავსებას ნომინირებულ საწყის მისამართზე. ეს პრობლემა დაფიქსირდა ნებისმიერი მორგებული დასახელებული განყოფილებისთვის; თუმცა, ის არ იმუშავებს არცერთ სტანდარტულ სექციებზე, როგორიცაა . ტექსტი ან. bss, რომელიც უნდა განთავსდეს -W1, -T ვარიანტის გამოყენებით.
ლინკერი იშლება მოდუნებისას (XC8-2647) როდესაც -mrelax ოპტიმიზაცია ჩართული იყო და იყო კოდის ან მონაცემთა სექციები, რომლებიც არ ჯდებოდა ხელმისაწვდომ მეხსიერებაში, ლინკერი ავარიულად იშლებოდა. ახლა, ასეთ ვითარებაში, ამის ნაცვლად, შეცდომის შეტყობინებები გაიცემა.
უკან დახევის გარეშე (XC8-2646) -nofallback ვარიანტი არ იყო სწორად დანერგილი და არც დოკუმენტირებული. ეს ახლა შეიძლება შეირჩეს, რათა უზრუნველყოფილი იყოს, რომ შემდგენელი არ დაუბრუნდეს ოპტიმიზაციის უფრო დაბალ პარამეტრს, თუ შემდგენელი არალიცენზირებულია და ამის ნაცვლად გამოუშვას შეცდომა.
სიჩქარის შეუსაბამო ოპტიმიზაცია (X03-2637) პროცედურული აბსტრაქციის ოპტიმიზაცია ჩართული იყო მე-3 დონის ოპტიმიზაციის არჩევისას (-03). ეს ოპტიმიზაცია ამცირებს კოდის ზომას კოდის სიჩქარის ხარჯზე, ამიტომ არ უნდა შესრულებულიყო.
ცუდი EEPROM წვდომა (XC8-2629) The eeprom_read_block რუტინა არ მუშაობდა სწორად Xmega მოწყობილობებზე, როდესაც ჩართული იყო -mconst-data-in-progmem ოფცია (რაც ნაგულისხმევი მდგომარეობაა), რის შედეგადაც EEPROM მეხსიერება არ იკითხებოდა სწორად.
არასწორი მეხსიერების განაწილება (XC8-2593, XC8-2651) როდესაც -Ttext ან -Tdata linker ვარიანტი (მაგampმითითებულია -vl დრაივერის ოფციონის გამოყენებით, შესაბამისი ტექსტის/მონაცემთა რეგიონის საწყისის განახლება; თუმცა, საბოლოო მისამართი არ იყო მორგებული შესაბამისად, რამაც შეიძლება გამოიწვიოს რეგიონის გადამეტება სამიზნე მოწყობილობის მეხსიერების დიაპაზონში.
ავარია ზედმეტად მინიჭებული ფუნქციით (XC8-2580) შემდგენელი გათიშულია, თუ ფუნქცია გამოცხადდა ერთზე მეტი შეფერხების, სიგნალის ან nmi ატრიბუტების გამოყენებით, მაგ., ატრიბუტი ( (სიგნალი, შეწყვეტა)).
არასწორი ATtiny შეფერხების კოდი (XC8-2465) როდესაც ATtiny მოწყობილობების აშენება და ოპტიმიზაცია გამორთული იყო (-00), შეფერხების ფუნქციებმა შესაძლოა გამოეწვია ოპერანდის დიაპაზონის ასამბლერის შეტყობინებები.
ვარიანტები, რომლებიც არ არის გადაცემული (XC8-2452) მრავალჯერადი, მძიმით გამოყოფილი ლინკერის ვარიანტებით ოფციის გამოყენებისას, ლინკერის ყველა ვარიანტი არ გადადიოდა ლინკერზე.
შეცდომა პროგრამის მეხსიერების ირიბად წაკითხვისას (X03-2450) ზოგიერთ შემთხვევაში, შემდგენელმა გამოუშვა შიდა შეცდომა (უცნობი insn), როდესაც კითხულობდა ორი ბაიტის მნიშვნელობას პოინტერიდან პროგრამის მეხსიერებაში.
5.6. ვერსია 2.32
მეორე წვდომა ბიბლიოთეკა ვერ ხერხდება (XC8-2381) xc8-ar-ის Windows ვერსიის გამოძახება. .exe ბიბლიოთეკის არქივი, რომელიც უკვე მეორედ წვდება ბიბლიოთეკის არსებულ არქივზე, შესაძლოა ვერ მოხერხდა შეცდომის შეტყობინებების გადარქმევის გამო.
5.7. ვერსია 2.31
აუხსნელი შემდგენელი წარუმატებლობა (XC8-2367) Windows-ის პლატფორმებზე მუშაობისას, რომლებსაც სისტემის დროებითი დირექტორია დაყენებული ჰქონდა გზაზე, რომელიც მოიცავდა წერტილს '.' სიმბოლო, შესაძლოა შემდგენელმა ვერ შეასრულა.
5.8. ვერსია 2.30
გლობალური ეტიკეტები არასწორად განთავსებული კონტურის შემდეგ (XC8-2299) ხელით დაწერილი ასამბლეის კოდი, რომელიც ათავსებს გლობალურ ლეიბლებს ასამბლეის თანმიმდევრობებში, რომლებიც გამოითვლება პროცედურული აბსტრაქციის შედეგად, შესაძლოა არ ყოფილიყო სწორად განლაგებული.
დამამშვიდებელი ავარია (XC8-2287) -mrelax ოფციის გამოყენებამ შესაძლოა გამოიწვიოს ლინკერის ავარია, როდესაც კუდის ნახტომის რელაქსაციის ოპტიმიზაცია ცდილობდა წაეშალა ret ინსტრუქცია, რომელიც არ იყო სექციის ბოლოს.
ავარია ლეიბლების მნიშვნელობების ოპტიმიზაციისას (XC8-2282) კოდს, რომელიც იყენებს „ეტიკეტებს, როგორც მნიშვნელობებს“, GNU C ენის გაფართოებას, შესაძლოა გამოეწვია პროცედურული აბსტრაქციის ოპტიმიზაციის ავარია, გამოკვეთილი VMA დიაპაზონის დაფიქსირების შეცდომით.
არც ისე გამძლე (XC8-2271) პროტოტიპები st rstr ( ) და სხვა ფუნქციები აღარ მიუთითოთ არასტანდარტული const კვალიფიკატორი დაბრუნებულ სტრიქონების მაჩვენებლებზე, როდესაც -mconst-data-inprogmem ფუნქცია გამორთულია. გაითვალისწინეთ, რომ avrxmega3 და avrtiny მოწყობილობებთან ერთად, ეს ფუნქცია მუდმივად ჩართულია.
დაკარგული ინიციალატორები (XC8-2269) როცა მეტია თარგმანის ერთეულში ერთი ცვლადი მოთავსებული იყო განყოფილებაში (_section ან _ ატრიბუტის_ ( (სექცია) ) გამოყენებით), და პირველი ასეთი ცვლადი იყო ნულოვანი ინიციალიზაცია ან არ გააჩნდა ინიციალიზატორი, ინიციალიზატორები სხვა ცვლადების იმავე მთარგმნელობით ერთეულში, რომლებიც განთავსებული იყო. იმავე მონაკვეთში დაიკარგნენ.
5.1. ვერსია 2.29 (ფუნქციური უსაფრთხოების გამოშვება)
არცერთი.
5.2. ვერსია 2.20
შეცდომა გრძელი ბრძანებებით (XC8-1983) AVR სამიზნის გამოყენებისას შემდგენელი შეიძლება შეჩერებულიყო ა file შეცდომა ვერ მოიძებნა, თუ ბრძანების სტრიქონი იყო ძალიან დიდი და შეიცავდა სპეციალურ სიმბოლოებს, როგორიცაა ციტატები, უკუღმა და ა.შ.
არ არის მინიჭებული rodata განყოფილება (XC8-1920) AVR დამაკავშირებელმა ვერ შეძლო მეხსიერების მინიჭება მორგებული rodata სექციებისთვის avrxmega3 და avrtiny არქიტექტურებისთვის, რაც პოტენციურად წარმოქმნის მეხსიერების გადახურვის შეცდომებს
5.3. ვერსია 2.19 (ფუნქციური უსაფრთხოების გამოშვება)
არცერთი.
5.4. ვერსია 2.10
გადატანის წარუმატებლობა (XC8-1891) საუკეთესო მორგებული ალოკატორი იყო მეხსიერების „ხვრელების“ დატოვება განყოფილებებს შორის დამაკავშირებელი რელაქსაციის შემდეგ. მეხსიერების ფრაგმენტაციის გარდა, ამან გაზარდა მაკავშირებლის გადაადგილების უკმარისობის შესაძლებლობა, რომელიც დაკავშირებულია კომპიუტერთან შედარებით ნახტომებთან ან ზარებთან, რომლებიც დიაპაზონის მიღმა აღმოჩნდნენ.
ინსტრუქციები, რომლებიც არ გარდაიქმნება რელაქსაციის გზით (XC8-1889) ლინკერის რელაქსაცია არ ხდებოდა ნახტომის ან გამოძახების ინსტრუქციებისთვის, რომელთა სამიზნეები მისაწვდომი ხდებოდა მოდუნების შემთხვევაში.
დაკარგული ფუნქციონირება (XC8E-388) რამდენიმე განმარტება , როგორიცაა clock_div_t და clock_prescale set () , არ იყო განსაზღვრული მოწყობილობებისთვის, მათ შორის ATmega324PB, ATmega328PB, ATtiny441 და ATtiny841.
მაკრო აკლია წინასწარი პროცესორის მაკროები _XC8_MODE_, _XC8_VERS ION, _XC და _XC8 არ იყო ავტომატურად განსაზღვრული შემდგენელის მიერ. ესენი ახლა ხელმისაწვდომია.
5.5. ვერსია 2.05
შემდგენლის შიდა შეცდომა (XC8-1822) Windows-ის ქვეშ აშენებისას, კოდის ოპტიმიზაციისას შესაძლოა წარმოიშვა შემდგენელის შიდა შეცდომა.
RAM-ის გადინება გამოვლენილი არ არის (XC8-1800, XC8-1796) პროგრამები, რომლებიც აღემატებოდა ხელმისაწვდომ RAM-ს, არ იქნა აღმოჩენილი შემდგენელის მიერ ზოგიერთ სიტუაციაში, რამაც გამოიწვია გაშვების კოდის მარცხი.
გამოტოვებული ფლეშ მეხსიერება (XC8-1792) avrxmega3 და avrtiny მოწყობილობებისთვის, ფლეშ მეხსიერების ნაწილები შესაძლოა დაპროგრამებული იყოს MPLAB X-ის მიერ. IDE.
ძირითადი (XC8-1788) შესრულება ვერ მოხერხდა ზოგიერთ სიტუაციაში, როდესაც პროგრამას არ ჰქონდა განსაზღვრული გლობალური ცვლადები, გაშვების გაშვების კოდი არ გასულა და მთავარ ( ) ფუნქციას არასოდეს მიუღწევია.
არასწორი მეხსიერების ინფორმაცია (XC8-1787) avrxmega3 და avrtiny მოწყობილობებისთვის, avr-size პროგრამა იუწყებოდა, რომ მხოლოდ წაკითხვის მონაცემები მოიხმარდა RAM-ს პროგრამის მეხსიერების ნაცვლად.
არასწორი პროგრამის მეხსიერების წაკითხვა (XC8-1783) პროექტები, რომლებიც შედგენილია პროგრამული მეხსიერების მქონე მოწყობილობებისთვის, შედგენილია მონაცემთა მისამართების სივრცეში და რომლებიც განსაზღვრავენ ობიექტებს PROGMEM მაკრო/ატრიბუტის გამოყენებით, შესაძლოა წაიკითხონ ეს ობიექტები არასწორი მისამართიდან.
შიდა შეცდომა ატრიბუტებთან (XC8-1773) შიდა შეცდომა მოხდა, თუ თქვენ განსაზღვრეთ მაჩვენებლის ობიექტები
_at () ან ატრიბუტი() ჟეტონები კურსორის სახელსა და გაუქმებულ ტიპს შორის, მაგampლე, char *
_at (0x800150) cp; ახლა გაიცემა გაფრთხილება, თუ ასეთი კოდი შეგხვდებათ.
ძირითადი (XC8-1780, XC8-1767, XC8-1754) შესრულება ვერ მოხერხდა EEPROM ცვლადების გამოყენებამ ან კონფიგურაციის პრაგმის გამოყენებით საკრავების განსაზღვრამ შესაძლოა გამოიწვიოს მონაცემთა არასწორი ინიციალიზაცია და/ან პროგრამის შესრულების ჩაკეტვა გაშვების გაშვების კოდში, სანამ მთავარ ( )-ს მიაღწევს.
დაუკრავების შეცდომა პატარა მოწყობილობებთან (XC8-1778, XC8-1742) attiny4/5/9/ 10/20/40 მოწყობილობებს ჰქონდათ სათაურში მითითებული არასწორი საკრავის სიგრძე fileეს იწვევს ლინკერის შეცდომებს, როდესაც ცდილობთ კოდის შექმნას, რომელიც განსაზღვრავს საკრავებს.
სეგმენტაცია ხარვეზი (XC8-1777) გამოსწორებულია წყვეტილი სეგმენტაციის ხარვეზი.
ასამბლერის ავარია (XC8-1761) avr-as ასამბლეერი შეიძლება დაიშალა, როდესაც კომპილერი მუშაობდა Ubuntu 18-ში.
ობიექტები არ არის გასუფთავებული (XC8-1752) Unitialized სტატიკური შენახვის ხანგრძლივობის ობიექტები შეიძლება არ იყო გასუფთავებული გაშვების გაშვების კოდით.
კონფლიქტური მოწყობილობის სპეციფიკაცია იგნორირებულია (XC8-1749) შემდგენელი არ ქმნიდა შეცდომას, როდესაც გამოყენებული იყო მოწყობილობის სპეციფიკაციის რამდენიმე ვარიანტი და მიუთითებდა სხვადასხვა მოწყობილობებზე.
მეხსიერების გაფუჭება გროვით (XC8-1748). _heap_start სიმბოლო არასწორად იყო დაყენებული, რის შედეგადაც შესაძლებელი იყო ჩვეულებრივი ცვლადები დაზიანებულიყო გროვით.
ლინკერის გადატანის შეცდომა (XC8-1739) ლინკერის გადატანის შეცდომა შესაძლოა გამოშვებული ყოფილიყო, როდესაც კოდი შეიცავდა rjmp-ს ან rcall-ს, რომლის მიზანი ზუსტად 4k ბაიტი იყო.
5.6. ვერსია 2.00
არცერთი.
ცნობილი საკითხები
ქვემოთ მოცემულია შეზღუდვები შემდგენელის მუშაობაში. ეს შეიძლება იყოს ზოგადი კოდირების შეზღუდვები, ან გადახრები მომხმარებლის სახელმძღვანელოში მოცემული ინფორმაციისგან. სათაურში ფრჩხილებში ჩასმული იარლიყ(ებ)ი არის ამ საკითხის იდენტიფიკაცია თვალთვალის მონაცემთა ბაზაში. ეს შეიძლება იყოს სასარგებლო, თუ თქვენ გჭირდებათ დაუკავშირდეთ მხარდაჭერას. ის ელემენტები, რომლებსაც არ აქვთ ეტიკეტები, არის შეზღუდვები, რომლებიც აღწერს მოდი ოპერანდს და რომლებიც, სავარაუდოდ, მუდმივად დარჩება ძალაში.
6.1. MPLAB X IDE ინტეგრაცია
MPLAB IDE ინტეგრაცია თუ კომპილერი უნდა იყოს გამოყენებული MPLAB IDE-დან, მაშინ კომპილერის დაყენებამდე უნდა დააინსტალიროთ MPLAB IDE.
6.2. კოდის გენერაცია
Segfault with section-anchors ოფცია (XC8-3045) პროგრამა, რომელიც განსაზღვრავს ფუნქციებს ცვლადი არგუმენტების სიებით და იყენებს -fsection-anchors ოფციას, შესაძლოა გამოეწვია შემდგენელის შიდა შეცდომა: სეგმენტაციის შეცდომა.
გამართვის ინფორმაცია სინქრონიზებულია (XC8-2948) როდესაც ლინკერის რელაქსაციის ოპტიმიზაცია ამცირებს ინსტრუქციებს (მაგampგამოძახების ინსტრუქციები), წყაროს ხაზი მისამართის რუკებზე შეიძლება არ დარჩეს სინქრონიზებული, როდესაც განყოფილებაში ხდება ერთზე მეტი შეკუმშვის ოპერაცია.
ქვემოთ ყოფილიampასევე, არის ორი ზარი, რომლებიც ნათესავებთან შედარებით მშვიდად მთავრდება.
PA მეხსიერების განაწილების წარუმატებლობა (XC8-2881) პროცედურული აბსტრაქციის ოპტიმიზატორების გამოყენებისას, ლინკერმა შეიძლება შეატყობინოს მეხსიერების განაწილების შეცდომებს, როდესაც კოდის ზომა ახლოსაა მოწყობილობაზე არსებული პროგრამის მეხსიერების რაოდენობასთან, მიუხედავად იმისა, რომ პროგრამას უნდა მოერგოს ხელმისაწვდომი სივრცე.
არც ისე ჭკვიანი Smart-I0 (XC8-2872) შემდგენელის smart-io ფუნქცია გამოიმუშავებს მოქმედ, მაგრამ არაოპტიმალურ კოდს snprint f ფუნქციისთვის, თუ const-data-in-progmem ფუნქცია გამორთულია ან თუ მოწყობილობას აქვს მთელი ფლეშ რუკა მონაცემთა მეხსიერებაში.
კიდევ უფრო ნაკლებად ჭკვიანი Smart-I0 (XC8-2869) შემდგენელის smart-io ფუნქცია გამოიმუშავებს მოქმედ, მაგრამ არაოპტიმალურ კოდს, როდესაც ორივე -flto და -fno-ჩაშენებული ვარიანტები იქნება გამოყენებული.
არაოპტიმალური მხოლოდ წაკითხვის მონაცემების განთავსება (XC8-2849) ლინკერმა ამჟამად არ იცის მეხსიერების APPCODE და APPDATA სექციები და არც [No-Read-While-Write განყოფილებები მეხსიერების რუკაში. შედეგად, არსებობს მცირე შანსი, რომ ლინკერმა გამოყოს მხოლოდ წაკითხული მონაცემები მეხსიერების შეუფერებელ ზონაში. არასწორად განთავსებული მონაცემების შანსი იზრდება, თუ ჩართულია const-data-in-progmem ფუნქცია, განსაკუთრებით თუ ჩართულია const-data-in-config-mapped-progmem ფუნქცია. საჭიროების შემთხვევაში, ეს ფუნქციები შეიძლება გამორთოთ.
ობიექტი file დამუშავების შეკვეთა (XC8-2863) ობიექტების თანმიმდევრობა files იქნება დამუშავებული ლინკერის მიერ შეიძლება განსხვავდებოდეს პროცედურული აბსტრაქციის ოპტიმიზაციის გამოყენების საფუძველზე (-mpa ვარიანტი). ეს გავლენას მოახდენს მხოლოდ კოდზე, რომელიც განსაზღვრავს სუსტ ფუნქციებს მრავალ მოდულში.
დამაკავშირებელი შეცდომა აბსოლუტური (XC8-2777) როდესაც ობიექტი აბსოლუტურია მისამართზე RAM-ის დაწყებისას და ასევე განისაზღვრა არაინიციალიზებული ობიექტები, შეიძლება მოხდეს ლინკერის შეცდომა.
მოკლე გაღვიძების ID (XC8-2775) ATA5700/2 მოწყობილობებისთვის PHIDO/1 რეგისტრები მხოლოდ 16 ბიტიანია, ვიდრე 32 ბიტიანი.
ლინკერის ავარია სიმბოლოს გამოძახებისას (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 ბილიკით და 'spec' file არსებობს არჩეული მოწყობილობისთვის, შემდგენელი არ აცნობებს დაკარგული მოწყობილობის ოჯახის პაკეტს და ამის ნაცვლად ირჩევს "სპეციფიკაციას" file, რამაც შეიძლება გამოიწვიოს არასწორი გამომავალი. "სპეციფიკაცია" files შეიძლება არ იყოს განახლებული განაწილებულ DFP-ებთან და განკუთვნილი იყო მხოლოდ შიდა შემდგენელის ტესტირებისთვის გამოსაყენებლად.
მეხსიერების გადახურვა არ არის გამოვლენილი (XC8-1966) შემდგენელი არ აღმოაჩენს ობიექტების მეხსიერების გადაფარვას, რომლებიც აბსოლუტურია მისამართზე (_at ( )) და სხვა ობიექტების გამოყენებით განყოფილების ( ) სპეციფიკატორის გამოყენებით და რომლებიც დაკავშირებულია იმავე მისამართთან.
წარუმატებლობა ბიბლიოთეკის ფუნქციებთან და _memx (XC8-1763) მოუწოდა libgcc float ფუნქციები არგუმენტით memx მისამართების სივრცეში შეიძლება ვერ მოხერხდეს. გაითვალისწინეთ, რომ ბიბლიოთეკის რუტინები გამოძახებულია ზოგიერთი C ოპერატორისგან, მაგალითად, მაგალითადampშემდეგ კოდზე მოქმედებს:
დაბრუნება regFloatVar > memxFloatVar;
შეზღუდული libgcc განხორციელება (AVRTC-731) ATTiny4/5/9/10/20/40 პროდუქტებისთვის, სტანდარტული C / მათემატიკის ბიბლიოთეკის დანერგვა libgcc-ში ძალიან შეზღუდულია ან არ არის წარმოდგენილი.
პროგრამის მეხსიერების შეზღუდვები (AVRTC-732) პროგრამის მეხსიერების სურათები 128 კბ-ზე მეტი მხარდაჭერილია ინსტრუმენტთა ჯაჭვის მიერ; თუმცა, ცნობილია ლინკერის შეწყვეტის შემთხვევები რელაქსაციის გარეშე და გამოსადეგი შეცდომის შეტყობინებების გარეშე, ვიდრე საჭირო ფუნქციის ნაკრებების გენერირება, როდესაც -mre lax ვარიანტი გამოიყენება.
სახელის სივრცის შეზღუდვები (AVRTC-733) დასახელებული მისამართების სივრცეები მხარდაჭერილია ინსტრუმენტთა ჯაჭვის მიერ, ექვემდებარება მომხმარებლის სახელმძღვანელოს განყოფილებაში მითითებულ შეზღუდვებს სპეციალური ტიპის კვალიფიკატორები.
დროის ზონები ბიბლიოთეკის ფუნქციები ითვალისწინებს 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 შემდგენელის განვითარების პროგრამული უზრუნველყოფა, შემდგენელის განვითარების პროგრამული უზრუნველყოფა, განვითარების პროგრამული უზრუნველყოფა, პროგრამული უზრუნველყოფა |