MICROCHIP MPLAB XC8 C компилиращ софтуер 

MICROCHIP MPLAB XC8 C компилиращ софтуер

ТОЗИ ДОКУМЕНТ СЪДЪРЖА ВАЖНА ИНФОРМАЦИЯ, СВЪРЗАНА С КОМПИЛАТОРА MPLAB XC8 C, КОГАТО Е НАСОЧЕН КЪМ УСТРОЙСТВА MICROCHIP AVR.
МОЛЯ, ПРОЧЕТЕТЕ ГО, ПРЕДИ ДА ПУСКАТЕ ТОЗИ СОФТУЕР. ВИЖТЕ БЕЛЕЖКИТЕ ПО ИЗДАВАНЕТО НА КОМПИЛАТОРА MPLAB XC8 C ЗА ДОКУМЕНТА PIC, АКО ИЗПОЛЗВАТЕ КОМПИЛАТОРА ЗА 8-БИТОВИ УСТРОЙСТВА PIC.

Съдържание скрий се

крайview

Въведение

Тази версия на компилатора Microchip MPLAB® XC8 C съдържа няколко нови функции, корекции на грешки и поддръжка на нови устройства.

Дата на компилация

Официалната дата на компилиране на тази версия на компилатора е 3 юли 2022 г.

Предишна версия

Предишната версия на компилатор MPLAB XC8 C беше 2.39, компилатор за функционална безопасност, създаден на 27 януари 2022 г. Предишният стандартен компилатор беше версия 2.36, създаден на 27 януари 2022 г.

Ръководство за функционална безопасност

Ръководство за функционална безопасност за компилаторите MPLAB XC е налично в пакета с документация, когато закупите лиценз за функционална безопасност.

Компонентни лицензи и версии

Инструментите MPLAB® XC8 C Compiler за AVR MCU са написани и разпространявани под GNU General Public License (GPL), което означава, че неговият изходен код се разпространява свободно и е достъпен за обществеността. Изходният код за инструменти под GNU GPL може да бъде изтеглен отделно от Microchip webсайт. Можете да прочетете GNU GPL в file named намира поддиректорията на вашата инсталационна директория. Обща дискусия на принципите, залегнали в GPL, може да бъде намерена тук. Предоставен код за поддръжка за заглавката files, скриптове за свързване и библиотеки по време на изпълнение са патентован код и не се покриват от GPL.

Този компилатор е реализация на GCC версия 5.4.0, binutils версия 2.26 и използва avr-libc версия 2.0.0.

Системни изисквания

Компилаторът MPLAB XC8 C и софтуерът за лицензиране, който използва, са налични за различни операционни системи, включително 64-битови версии на следните: Професионални издания на Microsoft Windows 10; Ubuntu 18.04; и macOS 10.15.5. Двоичните файлове за Windows са подписани с код. Двоичните файлове за mac OS са подписани с код и нотариално заверени.

Ако използвате сървър за мрежови лицензи, само компютри с операционни системи, поддържани от компилаторите, могат да се използват за хостване на сървъра за лицензи. От xclm версия 2.0 сървърът за мрежови лицензи може да бъде инсталиран на платформа на Microsoft Windows Server, но не е необходимо сървърът за лицензи да работи на сървърна версия на операционната система.

Поддържани устройства

Този компилатор поддържа всички 8-битови AVR MCU устройства, известни към момента на издаването. Вижте (в директорията doc на компилатора) за списък на всички поддържани устройства. Тези files също изброява настройките на конфигурационни битове за всяко устройство.

Издания и надстройки на лицензи

Компилаторът MPLAB XC8 може да се активира като лицензиран (PRO) или нелицензиран (безплатен) продукт. Трябва да закупите ключ за активиране, за да лицензирате своя компилатор. Лицензът позволява по-високо ниво на оптимизация в сравнение с безплатния продукт. Нелицензиран компилатор може да работи неограничено време без лиценз.

Компилаторът MPLAB XC8 за функционална безопасност трябва да бъде активиран с лиценз за функционална безопасност, закупен от Microchip. Компилаторът няма да работи без този лиценз. Веднъж активиран, можете да изберете всяко ниво на оптимизация и да използвате всички функции на компилатора. Тази версия на компилатора за функционална безопасност MPLAB XC поддържа лиценза за мрежов сървър.
Вижте документа за инсталиране и лицензиране на MPLAB XC C компилатори (DS50002059) за информация относно видовете лицензи и инсталирането на компилатора с лиценз.

Монтаж и активиране

Вижте също разделите „Проблеми с миграцията“ и „Ограничения“ за важна информация относно най-новия мениджър на лицензи, включен в този компилатор.
Ако използвате MPLAB IDE, не забравяйте да инсталирате най-новата MPLAB X IDE версия 5.0 или по-нова, преди да инсталирате този инструмент. Излезте от IDE, преди да инсталирате компилатора. Стартирайте приложението за инсталиране на компилатор .exe (Windows), .run (Linux) или приложение (macOS), напр. XC8-1.00.11403-windows.exe и следвайте указанията на екрана.
Препоръчва се инсталационната директория по подразбиране. Ако използвате Linux, трябва да инсталирате компилатора с помощта на терминал и от root акаунт. Инсталирайте с помощта на macOS акаунт с администраторски права.

Сега активирането се извършва отделно от инсталацията. Вижте документа Мениджър на лицензи за компилатори MPLAB® XC C (DS52059) за повече информация.

Ако изберете да стартирате компилатора под лиценза за оценка, сега ще получите предупреждение по време на компилация, когато сте в рамките на 14 дни от края на вашия период за оценка. Същото предупреждение се издава, ако сте в рамките на 14 дни от края на вашия абонамент за HPA.

XC Network License Server е отделен инсталатор и не е включен в инсталатора на компилатор за един потребител.

XC License Manager вече поддържа роуминг на плаващи мрежови лицензи. Насочена към мобилни потребители, тази функция позволява на плаващ лиценз да излезе от мрежата за кратък период от време. Използвайки тази функция, можете да прекъснете връзката с мрежата и да продължите да използвате вашия MPLAB XC компилатор. Вижте папката doc на инсталацията на XCLM за повече информация относно тази функция. MPLAB X IDE включва прозорец за лицензи (Инструменти > Лицензи) за визуално управление на роуминга.

Разрешаване на проблеми с инсталирането

Ако изпитвате трудности при инсталирането на компилатора под някоя от операционните системи Windows, опитайте следните предложения.

  • Стартирайте инсталацията като администратор.
  • Задайте разрешенията на приложението за инсталиране на „Пълен контрол“. (Щракнете с десния бутон върху file, изберете Свойства, раздел Защита, изберете потребител, редактирайте.)
  • Задайте разрешения на временната папка на „Пълен контрол!

За да определите местоположението на временната папка, въведете %temp% в командата Run (клавиш с емблемата на Windows + R). Това ще отвори a file диалоговия прозорец на изследователя, показващ тази директория и ще ви позволи да определите пътя на тази папка.

Документация на компилатора

Ръководствата за потребителя на компилатора могат да бъдат отворени от HTML страницата, която се отваря във вашия браузър, когато щракнете върху синия бутон за помощ в таблото за управление на MPLAB X IDE, както е показано на екранната снимка.

Документация на компилатора
Ако изграждате за 8-битови AVR цели, Ръководството на потребителя на компилатора MPLAB® XC8 C за AVR® MCU съдържа информация за тези опции и характеристики на компилатора, които са приложими за тази архитектура.

Поддръжка на клиенти

Microchip приветства доклади за грешки, предложения или коментари относно тази версия на компилатора. Моля, насочвайте всички доклади за грешки или заявки за функции чрез системата за поддръжка.

Актуализации на документацията

За онлайн и актуални версии на документацията на MPLAB XC8, моля, посетете онлайн техническата документация на Microchip webсайт.

Нова или актуализирана AVR документация в тази версия:

  • Известие за авторски права на MUSL
  • Инсталиране и лицензиране на компилатори MPLAB XC C (ревизия M)
  • Ръководство за потребителя на MPLAB XC8 за инженери на вградени системи – AVR MCU (ревизия A)
  • MPLAB XC8 C Compiler User!s Guide за AVR MCU (ревизия F)
  • Справочно ръководство за унифицирана стандартна библиотека на Microchip (ревизия B)

Справочното ръководство за унифицирана стандартна библиотека на Microchip описва поведението и интерфейса към функциите, дефинирани от унифицираната стандартна библиотека на Microchip, както и предвидената употреба на типовете библиотеки и макросите. Част от тази информация преди това се съдържаше в MPLAB® XC8 C Compiler User!s Guide за AVR® MCU. Информацията за библиотеката, специфична за устройството, все още се съдържа в това ръководство за компилатор.

Ако току-що започвате с 8-битови устройства и MPLAB XC8 C компилатор, MPLAB® XC8 User!s Guide for Embedded Engineers – AVR® MCU (DS50003108) има информация за настройка на проекти в MPLAB X IDE и писане на код за вашия първи MPLAB XC8 C проект. Това ръководство вече се разпространява с компилатора.

Ръководството на потребителя на Hamate е включено в директорията с документи в това издание. Това ръководство е предназначено за тези, които използват Hamate като самостоятелно приложение.

Какво ново

Следните са нови AVR-target функции, които компилаторът вече поддържа. Номерът на версията в подзаглавията показва първата версия на компилатора, която поддържа функциите, които следват.

Версия 2.40

Поддръжка на ново устройство Вече е налична поддръжка за следните AVR части: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32 и AVR64EA48.
Подобрена процедурна абстракция Инструментът за оптимизиране на процедурна абстракция (PA) е подобрен, така че кодът, съдържащ инструкция за извикване на функция ( извикване на повикване ) може да бъде очертан. Това ще се случи само ако стекът не се използва за предаване на аргументи, нито за получаване на върната стойност от функцията. Стекът се използва при извикване на функция със списък с променливи аргументи или при извикване на функция, която приема повече аргументи, отколкото има регистри, определени за тази цел. Тази функция може да бъде деактивирана чрез опцията monk-pa-outline-calls или процедурната абстракция може да бъде деактивирана изцяло за обект file или функция с помощта на -monk-pa-on-file и -mo.-pa-on-function съответно или чрез използване на атрибута nipa (спецификатор nipa) избирателно с функции

Макрос за покритие на код Компилаторът вече дефинира макроса __CODECOV, ако е указана валидна опция mcodecov.

Опция за резервиране на памет Драйверът xc8-cc вече ще приеме опцията -mreserve=space@start: end при изграждане за AVR цели. Тази опция запазва посочения обхват на паметта в пространството на паметта на данните или програмата, като не позволява на линкера да попълни код или обекти в тази област.

По-интелигентен интелигентен IO Направени са няколко подобрения на Smart IO функциите, включително общи промени в основния код на printf, третиране на спецификатора на преобразуване %n като независим вариант, свързване в vararg pop рутинни процедури при поискване, използване на по-кратки типове данни, където е възможно, за обработка на аргументи на IO функция и факторизиране на общия код в ширината на полето и прецизната обработка. Това може да доведе до значително спестяване на код и данни, както и да увеличи скоростта на изпълнение на IO.

Версия 2.39 (Functional Safety Release)

Лиценз за мрежов сървър Тази версия на компилатора за функционална безопасност MPLAB XC8 поддържа лиценза за мрежов сървър.

Версия 2.36

Няма.

Версия 2.35

Поддръжка на ново устройство Налична е поддръжка за следните AVR части: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 и AVR64DD32.

Подобрено превключване на контекста Новата опция -mcall-isr-prologues променя начина, по който функциите за прекъсване записват регистри при влизане и как тези регистри се възстановяват, когато процедурата за прекъсване приключи. Работи по начин, подобен на опцията -mcall-prologues, но засяга само функциите за прекъсване (ISR).

Още по-подобрено превключване на контекста Новата опция -mgas-isr-prologues контролира кода за сърбеж на контекстите, генериран за рутинни услуги за малки прекъсвания. Когато е активирана, тази функция ще накара асемблера да сканира ISR за използване на регистъра и ще запази тези използвани регистри само ако е необходимо.

Конфигурируемо флаш картографиране Някои устройства от фамилията AVR DA и AVR DB имат SFR (напр. FLMAP), който указва кой 32k раздел от програмната памет ще бъде картографиран в паметта за данни. Новата опция – mconst-data-in-config-mapped-proem може да се използва, за да накара линкера да постави всички квалифицирани данни за cons в една 32k секция и автоматично да инициализира съответния SFR регистър, за да гарантира, че тези данни са картографирани в пространството на паметта за данни , където ще бъде достъпен по-ефективно.

Унифицирани стандартни библиотеки на Microchip Всички MPLAB XC компилатори ще споделят Microchip Unified Standard Library, която вече е достъпна с тази версия на MPLAB XC8. MPLAB® XC8 C Compiler Ръководство за потребителя/или AVR® MCU вече не включва документация за тези стандартни функции. Тази информация вече може да бъде намерена в Справочното ръководство на унифицираната стандартна библиотека на Microchip. Обърнете внимание, че някои функции, дефинирани по-рано от avr-libc, вече не са налични. (Виж Librar):'. функционалност...)

Интелигентен IO Като част от новите обединени библиотеки, IO функциите в семействата за печат и сканиране вече се генерират по избор при всяка компилация въз основа на това как тези функции се използват в програмата. Това може значително да намали ресурсите, използвани от програмата.
Опция за интелигентна IO помощ Когато анализира извикванията на интелигентни IO функции (като printf () или scanf () ), компилаторът не винаги може да определи от форматиращия низ или да изведе от аргументите тези спецификатори на преобразуване, изисквани от извикването. Преди това компилаторът винаги не правеше предположения и гарантираше, че напълно функционалните IO функции са свързани в окончателното изображение на програмата. Добавена е нова – msmart-io-format=fmt опция, така че компилаторът да може вместо това да бъде информиран от потребителя за спецификаторите на преобразуване, използвани от интелигентни IO функции, чиято употреба е двусмислена, предотвратявайки свързването на прекалено дълги IO рутинни процедури. (Вижте опцията smart-io-format за повече подробности.)

Поставяне на персонализирани секции Преди това опцията -Wl, –section-start само поставяше указаната секция на искания адрес, когато скриптът за свързване дефинираше изходна секция със същото име. Когато случаят не беше такъв, секцията беше поставена на адрес, избран от линкера, и опцията по същество беше игнорирана. Сега опцията ще бъде спазена за всички потребителски секции, дори ако скриптът за свързване не дефинира секцията. Обърнете внимание обаче, че за стандартни секции, като . текст, . bss или . данни, най-подходящият разпределител все още ще има пълен контрол върху тяхното разположение и опцията няма да има ефект. Използвайте опцията -Wl, -Tsection=add, както е описано в ръководството на потребителя.

Версия 2.32

Насоки за стека Предлага се с PRO лиценз за компилатор, функцията за насочване на стека на компилатора може да се използва за оценка на максималната дълбочина на всеки стек, използван от програма. Той конструира и анализира графиката на извикване на програма, определя използването на стека на всяка функция и изготвя отчет, от който може да се направи извод за дълбочината на стека, използван от програмата. Тази функция е активирана чрез опцията на командния ред -mchp-stack-usage. Обобщение на използването на стека се отпечатва след изпълнение. Подробен отчет за стека е достъпен на картата file, които могат да бъдат заявени по обичайния начин.

Поддръжка на ново устройство Поддръжка се предлага за следните AVR части: ATTINY 427, ATTINY 424, ATTINY 426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 и AVR32DB48.

Поддръжка на изтеглено устройство Поддръжка вече не се предлага за следните AVR части: AVR16DA28, AVR16DA32 и AVR16DA48.

Версия 2.31

Няма.

Версия 2.30

Нова опция за предотвратяване на инициализацията на данни Нова опция на драйвер -mno-data-ini t предотвратява инициализирането на данни и изчистването на bss секции. Работи чрез потискане на изхода на do_ copy_ data и d o_ clear_ bss символи в асемблирането files, което от своя страна ще предотврати включването на тези рутинни процедури от линкера.

Подобрени оптимизации Направени са редица подобрения на оптимизацията, включително премахване на излишни инструкции за връщане, премахване на някои прескачания след инструкция за пропускане, ако битът е, и подобрена процедурна абстракция и възможност за повторение на този процес.

Вече са налични допълнителни опции за контролиране на някои от тези оптимизации, по-специално -f котви на секции, което позволява достъпът до статични обекти да се извършва спрямо един символ; -mpai derations=n, което позволява броят на повторенията на процедурната абстракция да бъде променен от 2 по подразбиране; и, -mpa- call cost- shortcall, който изпълнява по-агресивна процедурна абстракция, с надеждата, че линкерът може да облекчи дългите разговори. Тази последна опция може да увеличи размера на кода, ако основните предположения не са реализирани.

Поддръжка на ново устройство Предлага се поддръжка за следните AVR части: AVR16DA28, AVR16DA32,
AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 и AVR128DB64.

Поддръжка на прибрано устройство Вече не е налична поддръжка за следните AVR части: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C и ATA664251.

Версия 2.29 (Functional Safety Release)

Заглавка file за вграден компилатор За да се гарантира, че компилаторът може да отговаря на езиковите спецификации като MISRA, заглавка file, който се включва автоматично от , беше обновен. Тази заглавка съдържа прототипите за всички вградени функции, като _buil tin _avrnop () и _buil tin_ avr delay_ cycles (). Някои вградени модули може да не са съвместими с MISRA; те могат да бъдат пропуснати чрез добавяне на дефиницията _Xe_ STRICT_ MISRA към командния ред на компилатора. Вградените елементи и техните декларации са актуализирани, за да използват типове с фиксирана ширина.

Версия 2.20

Поддръжка на ново устройство Предлага се поддръжка за следните AVR части: ATTINY1624, ATTINY1626 и ATTINY1627.

По-добро най-подходящо разпределение Най-добрият разпределител (BFA) в компилатора е подобрен, така че секциите да се разпределят в ред, позволяващ по-добра оптимизация. BFA вече поддържа именувани адресни пространства и се справя по-добре с инициализацията на данни.

Подобрена процедурна абстракция Оптимизациите на процедурната абстракция вече се извършват върху повече кодови последователности. Предишни ситуации, при които тази оптимизация може да е увеличила размера на кода, бяха адресирани чрез информиране на оптимизационния код за процеса на събиране на боклука на свързващия инструмент.

Липса на AVR асемблер AVR Assembler вече не е включен в тази дистрибуция.

Версия 2.19 (Functional Safety Release)

Няма.

Версия 2.10

Покритие на код Това издание включва функция за покритие на код, която улеснява анализа на степента, до която изходният код на проекта е изпълнен. Използвайте опцията -mcodecov=ram, за да го активирате. След изпълнение на програмата на вашия хардуер, информацията за покритието на кода ще бъде събрана в устройството и това може да бъде прехвърлено и показано от MPLAB X IDE чрез плъгин за покритие на код. Вижте документацията на IDE за информация относно този плъгин, който може да бъде получен. #pragma mcodecov може да се използва за изключване на последващи функции от анализа на покритието. В идеалния случай прагмата трябва да се добави в началото на file да изключим всичко това file от анализа на покритието. Като алтернатива, атрибутът ( (mcodecov) ) може да се използва за изключване на конкретна функция от анализа на покритието.

Описание на устройството files Ново устройство file наречен avr chipinfo. html се намира в директорията docs на дистрибуцията на компилатора. Това file изброява всички устройства, поддържани от компилатора. Щракнете върху име на устройство и то ще отвори страница, показваща всички допустими двойки битови настройки/стойности за това устройство, с напр.ampлес.

Процедурна абстракция Към компилатора са добавени процедурни абстракционни оптимизации, които заменят общи блокове от асемблерния код с извиквания към извлечено копие на този блок. Те се изпълняват от отделно приложение, което автоматично се извиква от компилатора при избор на ниво 2, 3 или оптимизации. Тези оптимизации намаляват размера на кода, но могат да намалят скоростта на изпълнение и възможността за отстраняване на грешки в кода.
Процедурната абстракция може да бъде деактивирана на по-високи нива на оптимизация с помощта на опцията -mno-pa или може да бъде активирана на по-ниски нива на оптимизация (в зависимост от вашия лиценз) с помощта на -mpa. Може да бъде деактивиран за обект file използвайки -mno-pa-on-file=fileиме или деактивиран за функция с помощта на -mno-pa на функция = функция.
Във вашия изходен код процедурната абстракция може да бъде деактивирана за функция чрез използване на _attribute_ ( (nopa)) с дефиницията на функцията или чрез използване на _nopa, което се разширява до атрибут ( (nopa, noinline)) и по този начин предотвратява извършването на вграждане на функция и има абстракция на вграден код.
Поддръжка на заключващи битове в pragma Конфигурацията #pragma вече може да се използва за указване на битовете за заключване на AVR, както и на другите битове за конфигурация. Проверете информацията за avr чипа. html file (споменати по-горе) за двойките настройка/стойност, които да се използват с тази прагма.
Поддръжка на ново устройство Предлага се поддръжка за следните части: AVR28DA128, AVR64DA128, AVR32DA128 и AVR48DA128.

Версия 2.05

Повече битове за вашите пари Версията за macOS на този компилатор и мениджър на лицензи вече е 64-битово приложение. Това ще гарантира, че компилаторът ще се инсталира и работи без предупреждения на последните версии на macOS.
Константни обекти в програмната памет Компилаторът вече може да поставя константни обекти във флаш паметта на програмата, вместо да ги разполага в RAM. Компилаторът е модифициран така, че глобалните данни, квалифицирани като const, се съхраняват във флаш паметта на програмата и тези данни могат да бъдат пряко и косвено достъпни с помощта на съответните инструкции на програмната памет. Тази нова функция е активирана по подразбиране, но може да бъде деактивирана с помощта на опцията -mno-const-data-in-progmem. За архитектурите avrxmega3 и avrtiny тази функция не е задължителна и винаги е деактивирана, тъй като програмната памет е картографирана в адресното пространство на данните за тези устройства.
Стандарт безплатно Нелицензираните (безплатни) версии на този компилатор вече позволяват оптимизации до и включително ниво 2. Това ще позволи подобен, макар и не идентичен, изход на това, което преди беше възможно при използване на стандартен лиценз.
Добре дошъл AVRASM2 Асемблерът AVRASM2 за 8-битови устройства вече е включен в инсталатора на компилатора XC8. Този асемблер не се използва от компилатора XC8, но е достъпен за проекти, базирани на ръкописен източник на асемблиране.
Поддръжка на ново устройство Предлага се поддръжка за следните части: ATMEGA1608, ATMEGA1609, ATMEGA808 и ATMEGA809.

Версия 2.00

Драйвер от най-високо ниво Нов драйвер, наречен xc8-cc, сега се намира над предишния драйвер avr-gcc и драйвера xc8 и може да извика подходящия компилатор въз основа на избора на целевото устройство. Този драйвер приема опции в стил GCC, които или се превеждат за, или се предават на компилатора, който се изпълнява. Този драйвер позволява подобен набор от опции с подобна семантика да се използва с всяка AVR или PIC цел и следователно е препоръчителният начин за извикване на компилатора. Ако е необходимо, старият avr-gcc драйвер може да бъде извикан директно с помощта на опциите в стар стил, които приемаше в по-ранните версии на компилатора.

Общ C интерфейс Този компилатор вече може да съответства на MPLAB Common C Interface, което позволява изходният код да бъде по-лесно пренесен във всички MPLAB XC компилатори. Опцията -mext=cci изисква тази функция, позволявайки алтернативен синтаксис за много езикови разширения.

Нов библиотекарски драйвер Нов библиотекарски драйвер е позициониран над предишния PIC libr librarian и AVR avr-ar librarian. Този драйвер приема опции в стил GCC-архиватор, които или се превеждат за, или се предават на библиотекаря, който се изпълнява. Новият драйвер позволява подобен набор от опции с подобна семантика да се използва за създаване или манипулиране на всяка PIC или AVR библиотека file и следователно е препоръчителният начин за извикване на библиотекаря. Ако е необходимо за наследени проекти, предишният библиотекар може да бъде извикан директно с помощта на опциите в стария стил, приети в по-ранните версии на компилатора.

Проблеми с миграцията

По-долу са функции, които сега се обработват по различен начин от компилатора. Тези промени може да изискват модификация на вашия изходен код, ако пренесете кода към тази версия на компилатора. Номерът на версията в подзаглавията показва първата версия на компилатора, която поддържа последващите промени.

Версия 2.40

Няма.

Версия 2.39 (Functional Safety Release)

Няма.

Версия 2.36

Няма.

Версия 2.35

Обработка на низ към бази (XCS-2420) За да се осигури съгласуваност с други XC компилатори, XC8 string-to функциите, като strtol () и т.н., вече няма да се опитват да конвертират входен низ, ако указаната база е по-голяма от 36 и вместо това ще зададат errno на EINVAL. Стандартът C не определя поведението на функциите, когато тази базова стойност бъде превишена.

Неподходящи оптимизации на скоростта Оптимизациите на процедурната абстракция бяха активирани при избор на оптимизации на ниво 3 (-03). Тези оптимизации намаляват размера на кода за сметка на скоростта на кода, така че не трябва да се извършват. Проекти, използващи това ниво на оптимизация, може да видят разлики в размера на кода и скоростта на изпълнение, когато са изградени с тази версия.

Функционалност на библиотеката Кодът за много от функциите на стандартната C библиотека сега идва от унифицираната стандартна библиотека на Microchip, която може да показва различно поведение при някои обстоятелства в сравнение с това, предоставено от предишната библиотека avr-libc. Напримерample, вече не е необходимо да се свързвате в библиотеката lprintf_flt (опция -print _flt), за да включите поддръжката на форматиран IO за спецификатори на плаващ формат. Интелигентните IO функции на Microchip Unified Standard Library правят тази опция излишна. В допълнение, използването на _p суфиксирани рутинни процедури за низове и функции на паметта (напр. strcpy_P () и т.н.), които работят с константни низове във флаш, вече не е необходимо. Стандартните C процедури (напр. strcpy ()) ще работят правилно с такива данни, когато функцията const-data-in-program-memory е активирана.

Версия 2.32

Няма.

Версия 2.31

Няма.

Версия 2.30

Няма.

Версия 2.29 (Functional Safety Release)

Няма.

Версия 2.20

Променено оформление на DFP Компилаторът вече приема различно оформление, използвано от DFP (пакети от семейство устройства). Това ще означава, че по-стар DFP може да не работи с тази версия и по-старите компилатори няма да могат да използват най-новите DFP.

Версия 2.19 (Functional Safety Release)

Няма.

Версия 2.10

Няма

Версия 2.05

Const обекти в програмната памет Обърнете внимание, че по подразбиране обектите с const ще бъдат поставени и достъпни в паметта на програмата (както е описано тук). Това ще повлияе на размера и скоростта на изпълнение на вашия проект, но трябва да намали използването на RAM. Тази функция може да бъде деактивирана, ако е необходимо, с помощта на опцията -mnoconst-da ta-in-progmem.

Версия 2.00

Конфигурационни предпазители Конфигурационните предпазители на устройството вече могат да се програмират с помощта на конфигурационна прагма, последвана от двойки стойност на настройка, за да се уточни състоянието на предпазителя, напр.
#pragma config WDT0N = SET
#pragma config B0DLEVEL = B0DLEVEL_4V3
Абсолютни обекти и функции Обектите и функциите вече могат да бъдат поставяни на конкретен адрес в паметта с помощта на спецификатора CCI _at (адрес), напр.ample: #включи int foobar при (Ox800100); char at(Ox250) get ID(int offset) { … } Аргументът към този спецификатор трябва да бъде константа, която представлява адреса, на който ще бъде поставен първият байт или инструкция. RAM адресите се обозначават с помощта на отместване от 0x800000. Активирайте CCI, за да използвате тази функция.
Нов синтаксис на функцията за прекъсване Компилаторът вече приема спецификатора на CCI прекъсване (num), за да покаже, че C функциите са манипулатори на прекъсвания. Спецификаторът приема номер на прекъсване, напрample: #включи void interrupt (SPI STC_ vect _num) spi Isr (void) { … }

Фиксирани проблеми

По-долу са корекциите, които са направени в компилатора. Те могат да поправят грешки в генерирания код или да променят работата на компилатора до това, което е предназначено или определено от ръководството на потребителя. Номерът на версията в подзаглавията показва първата версия на компилатора, която съдържа корекции за проблемите, които следват. Етикетът(ите) в скоби в заглавието е идентификацията на проблема в базата данни за проследяване. Те могат да бъдат полезни, ако трябва да се свържете с поддръжката.

Имайте предвид, че някои специфични за устройството проблеми са коригирани в пакета за семейство устройства (DFP), свързан с устройството. Вижте MPLAB Pack Manager за информация относно промените, направени в DFP, и за изтегляне на най-новите пакети.

Версия 2.40

Твърде отпуснат (XCS-2876) При използване на опцията -mrelax, компилаторът не разпределя някои секции заедно, което води до по-малко оптимални размери на кода. Това може да се е случило с код, който използва новите MUSL библиотеки или със слаби символи.
Функцията за картографиране не е деактивирана, както е посочено в предупреждението (XCS-2875) Функцията data-in-config mappedprogmem зависи от активираната функция data-in-proem. Ако функцията cost-data-ipconfig-mapped-proem е била изрично активирана с помощта на опцията и функцията cost-data-inprogmem е била деактивирана, стъпката за свързване е неуспешна, въпреки предупредителното съобщение, в което се посочва, че cons data-in-config-mapped- функцията proem беше автоматично деактивирана, което не беше напълно правилно. Функцията const-data-in-config-mapped-proem вече е напълно деактивирана в тази ситуация.
DFP промени за правилен достъп до NVMCTRL (XCS-2848) Кодът за стартиране по време на изпълнение, използван от устройства AVR64EA, не взе под внимание, че регистърът NVMCTRL беше под защита при промяна на конфигурацията (CCP) и не успя да настрои IO SFR на страницата, използвана от компилатора const-data-in configmapped-proem особеност. Промените, направени в AVR-Ex_DFP версия 2.2.55, ще позволят на кода за стартиране по време на изпълнение да записва правилно в този регистър.
Промени в DFP, за да се избегне флаш картографиране (XCS-2847) Приложено е заобиколно решение за проблем с функцията на устройството за картографиране на флаш, докладван в AVR128DA28/32/48/64 Silicon Errata (DS80000882). Функцията за компилатор const-data-in-config-mapped-proem няма да се прилага по подразбиране за засегнатите устройства и тази промяна ще се появи в AVR-Ex_DFP версия 2.2.160.
Грешка при компилиране със sinhf или coshf (XCS-2834) Опитите за използване на библиотечните функции sinhf () или coshf () доведоха до грешка във връзката, описваща недефинирана препратка. Посочената липсваща функция вече е включена в дистрибуцията на компилатора.
Грешки при компилиране с nopa (XCS-2833) Използването на атрибута nopa с функция, чието име на асемблер е указано с помощта на as (), задейства съобщения за грешка от асемблера. Тази комбинация не е възможна.
Грешка на променлива функция с аргументи на указателя (XCS-2755, XCS-2731) Функциите с променлив брой аргументи очакват 24-битови (тип _memo) указатели да бъдат предадени в списъка с променливи аргументи, когато функцията данни за разходите в програмата е активирана. Аргументите, които са били указатели към паметта за данни, са били предавани като 16-битови обекти, причинявайки повреда на кода, когато в крайна сметка са били прочетени. Когато функцията cons data-in-proem е активирана, всички аргументи на 16-битови указатели вече се преобразуват в 24-битови указатели. Функциите на библиотеката strtoxxx са неуспешни (XCS-2620) Когато функцията const-data-in-proem е била активирана, параметърът за въвеждане във функциите на библиотеката strtoxxx не е бил актуализиран правилно за аргументи на изходния низ, които не са в програмната памет.
Сигнали за невалидни отливки (XCS-2612) Компилаторът вече ще издаде грешка, ако функцията cost-in-proem е активирана и адресът на низов литерал е изрично прехвърлен към адресното пространство на данните (изпускане на квалификатора const), напр.ample, (uint8 t *) „Здравей свят!“. Предупреждение е проблем, ако адресът може да е невалиден, когато константен указател на данни е изрично прехвърлен към адресното пространство на данните.
Поставяне на неинициализирани const обекти (XCS-2408) Неинициализирани const и const v volatile обекти не са били поставяни в програмната памет на устройства, които картографират цялата или част от своята програмна памет в адресното пространство на данните. За тези устройства такива обекти сега се поставят в програмната памет, което прави работата им съвместима с други устройства.

Версия 2.39 (Functional Safety Release)

Няма.

Версия 2.36

Грешка при забавяне (XCS-2774) Незначителни промени в оптимизациите на свободния режим по подразбиране предотвратиха постоянното сгъване на изрази на операнди към вградените функции за забавяне, което доведе до тяхното третиране като неконтакти и задействане на грешката: _buil tin avr delay_ cycles очаква ac ​​ompile време цяло число константа.

Версия 2.35

Непрекъснато разпределение с помощта на _at (XCS-2653) Непрекъснатото разпределение на множество обекти, поставени в раздел с едно и също име и използване на () не работи правилно. Напримерample: constchararrl [ ] at tri butte ((sect on(“.misses”))) at (Ox50 0 ) = {Oxo , Ox CD} ; cost char arr2[ ] at tri butte ((section(“.my s eke”))) = {Oxen, Ox FE }; трябваше да постави arr2 веднага след aril.
Указване на начални адреси на секции (XCS-2650) Опцията -Wal, –section-start мълчаливо не успяваше да постави секции на номинирания начален адрес. Този проблем е коригиран за всички персонализирани секции; обаче няма да работи за никакви стандартни секции, като . текст или . bss, който трябва да бъде поставен с помощта на -Wl, -T опция.
Линкерът се срива при отпускане (XCS-2647) Когато оптимизацията -relax беше активирана и имаше секции с код или данни, които не се побираха в наличната памет, линкерът се срина. Сега, при такива обстоятелства, вместо това се издават съобщения за грешка.
Лош достъп до EEPROM (XCS-2629) Рутинната блокировка на leproma _read_ не работи правилно на Mega устройства, когато опцията -monist-data-in-proem е активирана (което е състоянието по подразбиране), което води до неправилно четене на EEPROM паметта.
Невалидно разпределение на паметта (XCS-2593, XCS-2651) Когато опцията за свързване -Text или -Tata (напрampфайл, преминал чрез опция -Wl драйвер) е посочен, съответният произход на региона на текст/данни е актуализиран; крайният адрес обаче не е коригиран по съответния начин, което би могло да доведе до превишаване на региона от обхвата на паметта на целевото устройство.
Невалиден код за прекъсване на ATtiny (XCS-2465) При изграждане за устройства на Tatin и оптимизациите са деактивирани (-00), функциите за прекъсване може да са задействали съобщения за асемблер на операнд извън диапазона.
Опциите не се предават (XCS-2452) Когато използвате опцията -Wl с множество, разделени със запетаи опции за свързване, не всички опции за свързване се предават на свързващия инструмент.
Грешка при индиректно четене на паметта на програмата (XCS-2450) В някои случаи компилаторът генерира вътрешна грешка (неразпознаваем insn) при четене на двубайтова стойност от указател към паметта на програмата

Версия 2.32

Вторият достъп до библиотеката е неуспешен (XCS-2381) Извикване на Windows версията на xc8-ar. exe библиотечен архиватор за втори път за достъп до съществуващ библиотечен архив може да е неуспешен с неуспешно преименуване съобщение за грешка.

Версия 2.31

Необясними грешки на компилатора (XCS-2367) При работа на Windows платформи, които имат системна временна директория, зададена на път, който включва точка'.' символ, компилаторът може да не е успял да изпълни.

Версия 2.30

Глобални етикети не са поставени след очертаване (XCS-2299) Ръчно написан код на асемблиране, който поставя глобални етикети в последователности на асемблиране, които се факторизират чрез процедурна абстракция, може да не е бил препозициониран правилно.
Релаксиращ сблъсък (XCS-2287) Използването на опцията -merlad може да е довело до срив на линкера, когато оптимизациите за отпускане на скок на опашката са се опитали да премахнат инструкцията ret, която не е била в края на раздел.
Срив при оптимизиране на етикети като стойности (XCS-2282) Кодът, използващ езиковото разширение на GNU C „Етикети като стойности“, може да е причинил срив на оптимизациите на процедурната абстракция, с грешка при коригиране на очертан диапазон на VMA.
Не толкова констант (XCS-2271) Прототипите за starts () и други функции от вече не указва квалификатора за нестандартна цена върху върнатите низови указатели, когато функцията -monist-data inprogmem е деактивирана. Обърнете внимание, че при устройства avrxmega3 и avertin тази функция е активирана за постоянно.
Загубени инициализатори (XCS-2269) Когато повече от една променлива в единица за транслация е поставена в раздел (използвайки раздел или атрибут ((раздел))) и първата такава променлива е била инициализирана с нула или не е имала инициализатор, инициализаторите за други променливи в същата единица за транслация които бяха поставени в същата секция бяха изгубени.

Версия 2.29 (Functional Safety Release)

Няма.

Версия 2.20

Грешка с дълги команди (XCS-1983) Когато използвате AVR цел, компилаторът може да е спрял с a file не е намерена грешка, ако командният ред е изключително голям и съдържа специални знаци като кавички, обратни наклонени черти и т.н.
Неприсвоена секция за родата (XCS-1920) AVR линкерът не успя да зададе памет за персонализирани rodata секции при изграждане за avrxmega3 и avrtiny архитектури, което потенциално създава грешки при припокриване на паметта

Версия 2.19 (Functional Safety Release)

Няма.

Версия 2.10

Грешки при преместване (XCS-1891) Най-подходящият разпределител оставяше „дупки“ в паметта между секциите след релаксация на линкера. Освен фрагментирането на паметта, това увеличава възможността от грешки при преместване на линкер, свързани с скокове, свързани с компютъра, или повиквания, излизащи извън обхват.
Инструкциите не се трансформират чрез релаксация (XCS-1889) Релаксацията на линкера не се случи за инструкции за прескачане или повикване, чиито цели стават достъпни, ако бъдат отпуснати.
Липсва функционалност (XCSE-388) Няколко определения от , като clock_ div_ t и clock_prescale_set (), не са дефинирани за устройства, включително ATmega324PB, ATmega328PB, ATtiny441 и ATtiny841.
Липсващи макроси Макросите на препроцесора_ xcs _MODE_, _xcs VERSION, _xc и xcs не са дефинирани автоматично от компилатора. Тези вече са налични.

Версия 2.05

Вътрешна грешка на компилатора (XCS-1822) При изграждане под Windows може да е възникнала вътрешна грешка на компилатора при оптимизиране на кода.
Не е открито препълване на RAM (XCS-1800, XCS-1796) Програми, които превишават тази налична RAM, не са открити от компилатора в някои ситуации, което води до повреда на кода по време на изпълнение.
Пропусната флаш памет (XCS-1792) За устройства avrxmega3 и avrtiny е възможно части от флаш паметта да са останали непрограмирани от MPLAB X IDE.
Неуспешно изпълнение на main (XCS-1788) В някои ситуации, когато програмата нямаше дефинирани глобални променливи, кодът за стартиране по време на изпълнение не излезе и функцията main () никога не беше достигната.
Неправилна информация за паметта (XCS-1787) За устройства avrxmega3 и avrtiny програмата avr-size отчиташе, че данните само за четене консумират RAM вместо програмна памет.
Неправилно четене на паметта на програмата (XCS-1783) Проекти, компилирани за устройства с програмна памет, нанесена в адресното пространство на данните и които дефинират обекти с помощта на макроса/атрибута PROGMEM, може да са прочели тези обекти от грешен адрес.
Вътрешна грешка с атрибути (XCS-1773) Възникна вътрешна грешка, ако сте дефинирали указателни обекти с
_at () или attribute() токени между името на указателя и дереферирания тип, напрample, char *
_at (0x80015 0) cp; Сега се издава предупреждение, ако се срещне такъв код.
Неуспешно изпълнение на main (XCS-1780, XCS-1767, XCS-1754) Използването на EEPROM променливи или дефинирането на предпазители с помощта на config pragma може да е причинило неправилно инициализиране на данни и/или да е блокирало изпълнението на програмата в кода за стартиране по време на изпълнение, преди да достигне до main ().
Грешка в предпазителя с малки устройства (XCS-1778, XCS-1742) Устройствата attiny4/5/9/10/20/40 имаха неправилна дължина на предпазителя, посочена в заглавката им files, които водят до грешки на линкера при опит за изграждане на код, който дефинира предпазители.
Грешка в сегментирането (XCS-1777) Коригирана е периодична грешка в сегментирането.
Срив на асемблер (XCS-1761) Avr-as асемблерът може да се е сринал, когато компилаторът е стартиран под Ubuntu 18.
Неизчистени обекти (XCS-1752) Неинициализирани обекти за продължителност на статичното съхранение може да не са били изчистени от кода за стартиране по време на изпълнение.
Конфликтната спецификация на устройството е игнорирана (XCS-1749) Компилаторът не генерираше грешка, когато бяха използвани множество опции за спецификация на устройство и посочиха различни устройства.
Повреда на паметта чрез куп (XCS-1748) Символът за начало на heap_ беше неправилно зададен, което доведе до възможността обикновените променливи да бъдат повредени от купчината.
Грешка при преместване на линкер (XCS-1739) Грешка при преместване на линкер може да е излъчена, когато кодът съдържа rjmp или rcall с цел точно на 4k байта.

Версия 2.00

Няма.

Известни проблеми

Следват ограниченията в работата на компилатора. Това може да са общи ограничения за кодиране или
отклонения от информацията, съдържаща се в ръководството за потребителя. Етикетът(ите) в скоби в заглавието е идентификацията на проблема в базата данни за проследяване. Това може да е от полза, ако трябва да се свържете с поддръжката. Тези елементи, които нямат етикети, са ограничения, които описват режима на действие и които е вероятно да останат в сила за постоянно.

MPLAB X IDE интеграция

MPLAB IDE интеграция Ако Compiler трябва да се използва от MPLAB IDE, тогава трябва да инсталирате MPLAB IDE преди инсталирането на Compiler.

Генериране на код

Грешка при разпределяне на PA памет (XCS-2881) Когато се използват оптимизаторите на процедурни абстракции, линкерът може да докладва грешки при разпределението на паметта, когато размерът на кода е близо до размера на наличната програмна памет на устройството, въпреки че програмата трябва да може да побере наличното пространство.
Не толкова умен Smart-IO (XCS-2872) Функцията smart-io на компилатора ще генерира валиден, но подоптимален код за функцията спринт, ако функцията cost-data-in-proem е била деактивирана или ако устройството е картографирало цялата си флаш памет в паметта за данни.
Още по-малко интелигентен Smart-IO (XCS-2869) Функцията smart-io на компилатора ще генерира валиден, но неоптимален код, когато се използват опциите -floe и -fno-buil tin.
Неоптимално разположение на данни само за четене (XCS-2849) В момента линкерът не познава секциите на паметта APPCODE и APPDATA, нито разделите [No-]Read-While-Write в картата на паметта. В резултат на това има малък шанс линкерът да разпредели данни само за четене в неподходяща област от паметта. Вероятността от неправилно поставени данни се увеличава, ако функцията за излитане на данни в прагма е активирана, особено ако е активирана и функцията за излитане на данни в конфигурация, картографирана-проем. Тези функции могат да бъдат деактивирани, ако е необходимо.
Обект file поръчка за обработка (XCS-2863) Редът, в който обектите files ще бъдат обработени от линкера може да се различават въз основа на използването на оптимизации на процедурни абстракции (опция -mpa). Това ще засегне само код, който дефинира слаби функции в множество модули.
Грешка в линкера с абсолютно (XCS-2777) Когато даден обект е направен абсолютен на адрес в началото на RAM и също са дефинирани неинициализирани обекти, може да се задейства грешка на свързване.
Кратки идентификатори за събуждане (XCS-2775) За устройства ATA5700/2 регистрите PHID0/1 се дефинират само като 16 бита широки, а не 32 бита широки.
Срив на линкера при извикване на символ (XCS-2758) Линкерът може да се срине, ако опцията на драйвера -merlad се използва, когато изходният код извиква символ, който е дефиниран с помощта на опцията на линкер -Wl, –defsym.
Неправилна инициализация (XCS-2679) Има несъответствие между това къде са поставени първоначалните стойности за някои глобални/статични обекти с размер на байт в паметта за данни и къде ще се осъществява достъп до променливите по време на изпълнение.
стартира неправилно, задава празни (XCS-2652) В случаите, когато предметен низ за преобразуване от stated () съдържа нещо, което изглежда като число с плаваща запетая в експоненциален формат и има неочакван знак след знак e, тогава празният адрес, ако е предоставен, ще сочи към знака след e, а не самото e. Напримерample: посочено ("хоу", празно); ще доведе до празно, сочещо към знака x.
Лоши индиректни извиквания на функции (XCS-2628) В някои случаи извикванията на функция, направени чрез указател на функция, съхранен като част от структура, може да се провалят.
strtof връща нула за шестнадесетични плаващи числа (XCS-2626) Библиотечните функции strtof () et al и scanf () et al винаги ще преобразуват шестнадесетично число с плаваща запетая, което не указва експонента, в
нула. Напримерample: статор(“Бухал”, &празно); ще върне стойността 0, а не 1.
Неточно съобщение на съветника за стека (XCS-2542, XCS-2541) В някои случаи предупреждението на съветника за стека относно рекурсия или използван неопределен стек (вероятно чрез използването на alloca()) не се излъчва.
Повреда с дублиран код за прекъсване (XCS-2421) Когато повече от една функция за прекъсване има едно и също тяло, компилаторът може да накара изхода за една функция за прекъсване да извика другата. Това ще доведе до ненужно записване на всички изтрити от обажданията регистри и прекъсванията ще бъдат активирани дори преди епилогът на текущия манипулатор на прекъсване да е изпълнил, което може да доведе до повреда на кода.
Const обекти не са в програмната памет (XCS-2408) За проектите avrxmega3 и avertins неидеализирани const обекти се поставят в паметта за данни, въпреки че предупреждението подсказва, че те са били поставени в програмната памет. Това няма да засегне устройства, които нямат програмна памет, картографирана в пространството на паметта за данни, нито ще засегне всеки обект, който е инициализиран.
Лош резултат с невалиден DFP път (XCS-2376) Ако компилаторът е извикан с невалиден DFP път и „spec“ file съществува за избраното устройство, компилаторът не отчита липсващия фамилиен пакет на устройството и вместо това избира „спец.“ file, което след това може да доведе до невалиден изход. "спецификацията" files може да не са актуални с разпределените DFP и са предназначени за използване само с вътрешно тестване на компилатор.
Неоткрито припокриване на паметта (XCS-1966) Компилаторът не открива припокриването на паметта на обекти, направени абсолютни на адрес (чрез at ()) и други обекти, използващи спецификатора на раздел () и които са свързани към същия адрес.
Неуспех с библиотечни функции и _meme (XCS-1763) Извикваните лимбични плаващи функции с аргумент в адресното пространство _memo може да се провалят. Имайте предвид, че библиотечните процедури се извикват от някои C оператори, така че напрample, следният код е засегнат: return regFloatVar > memxFloatVar;
Ограничено лимбично изпълнение (AVRTC-731) За продуктите ATTiny4/5/9/10/20/40 стандартната реализация на C / Math библиотека в limbic е много ограничена или не присъства.
Ограничения на програмната памет (AVRTC-732) Изображенията на програмната памет над 128 kb се поддържат от инструменталната верига; въпреки това, има известни случаи на прекратяване на връзката без отпускане и без полезно съобщение за грешка, вместо генериране на необходимите функционални мъничета, когато се използва опцията -relax.
Ограничения на пространството на имената (AVRTC-733) Именуваните адресни пространства се поддържат от инструменталната верига, при спазване на ограниченията, споменати в раздела на ръководството на потребителя Квалификатори на специални типове.
Часови зони The библиотечните функции приемат GMT и не поддържат местни часови зони, поради което местното време () ще върне същото време като gummite (), напр.ampле.

ПОДДРЪЖКА НА КЛИЕНТИ

file:///Applications/microehip/xc8/v 2 .40/docs/Прочетете ме_X C 8_ за A VR. htm

Документи / Ресурси

MICROCHIP MPLAB XC8 C компилиращ софтуер [pdf] Ръководство за употреба
MPLAB XC8 C, MPLAB XC8 C софтуер за компилиране, софтуер за компилиране, софтуер

Референции

Оставете коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са маркирани *