Лого на MICROCHIPMPLAB® XC8 C компилатор версия 2.41 бележки по изданието за AVR® MCU
Ръководство на собственика

MPLAB XC8 C софтуер за разработка на компилатор

ТОЗИ ДОКУМЕНТ СЪДЪРЖА ВАЖНА ИНФОРМАЦИЯ, СВЪРЗАНА С КОМПИЛАТОРА MPLAB XC8 C, КОГАТО Е НАСОЧЕН КЪМ УСТРОЙСТВА MICROCHIP 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 Compiler за AVR MCU са написани и разпространявани под GNU General Public License (GPL), което означава, че неговият изходен код се разпространява свободно и е достъпен за обществеността.
Изходният код за инструменти под GNU GPL може да бъде изтеглен отделно от Microchip webсайт. Можете да прочетете GNU GPL във файла с име, намиращ се в поддиректорията на вашата инсталационна директория license.txt avr/doc. Обща дискусия на принципите, залегнали в GPL, може да бъде намерена тук.
Кодът за поддръжка, предоставен за заглавните файлове, скриптовете за свързване и библиотеките по време на изпълнение, е частен код и не се покрива от GPL.
Този компилатор е реализация на GCC версия 5.4.0, binutils версия 2.26 и използва avr-libc версия 2.0.0.
1.6. Системни изисквания
Компилаторът MPLAB XC8 C и софтуерът за лицензиране, който използва, са налични за различни операционни системи, включително 64-битови версии на следните: Професионални издания на Microsoft® Windows® 10; 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 Network License Server обаче не е тестван на тези операционни системи. Сървърът за мрежови лицензи MPLAB XC може да се изпълнява на виртуални машини на поддържаната операционна система, като се използва лиценз за виртуална машина за мрежови лицензи (SW006021-VM). Всички 32-битови версии на MPLAB XC мрежовия сървър са преустановени от версия 3.00.
Поддържани устройства
Този компилатор поддържа всички налични 8-битови AVR MCU устройства към момента на пускане. Вижте (в директорията на компилатора) за списък на всички поддържани устройства. Тези файлове също са в списък
avr_chipinfo.html doc конфигурационни битови настройки за всяко устройство.

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

1.8. Инсталиране и активиране
Вижте също разделите „Проблеми с миграцията“ и „Ограничения“ за важна информация относно най-новия мениджър на лицензи, включен в този компилатор.
Ако използвате MPLAB IDE, не забравяйте да инсталирате най-новата MPLAB X IDE версия 5.0 или по-нова, преди да инсталирате този инструмент. Излезте от IDE, преди да инсталирате компилатора. Стартирайте приложението за инсталиране на (Windows), (Linux) или (macOS) .exe .run .app компилатор, напр. и следвайте указанията на екрана. XC8-1.00.11403-windows.exe Препоръчва се инсталационната директория по подразбиране. Ако използвате Linux, трябва да инсталирате компилатора с помощта на терминал и от root акаунт. Инсталирайте с помощта на macOS акаунт с администраторски права.
Сега активирането се извършва отделно от инсталацията. Вижте документа Мениджър на лицензи за компилатори MPLAB® XC C (DS52059) за повече информация.
Ако изберете да стартирате компилатора под лиценза за оценка, сега ще получите предупреждение по време на компилация, когато сте в рамките на 14 дни от края на вашия период за оценка. Същото предупреждение се издава, ако сте в рамките на 14 дни от края на вашия абонамент за HPA.
XC Network License Server е отделен инсталатор и не е включен в инсталатора на компилатор за един потребител.
XC License Manager вече поддържа роуминг на плаващи мрежови лицензи. Насочена към мобилни потребители, тази функция позволява на плаващ лиценз да излезе от мрежата за кратък период от време. Използвайки тази функция, можете да прекъснете връзката с мрежата и да продължите да използвате вашия MPLAB XC компилатор. Вижте папката doc на инсталацията на XCLM за повече информация относно тази функция.
MPLAB X IDE включва прозорец за лицензи (Инструменти > Лицензи) за визуално управление на роуминга.

1.8.1. Разрешаване на проблеми с инсталирането
Ако изпитвате трудности при инсталирането на компилатора под някоя от операционните системи Windows, опитайте следните предложения.
Стартирайте инсталацията като администратор.
Задайте разрешенията на приложението за инсталиране на „Пълен контрол“. (Щракнете с десния бутон върху файла, изберете Свойства, раздел Защита, изберете потребител, редактирайте.)
Задайте разрешения на временната папка на „Пълен контрол“.
За да определите местоположението на временната папка, въведете %temp% в командата Run (клавиш с емблемата на Windows + R).
Това ще отвори диалогов прозорец на файловия изследовател, показващ тази директория и ще ви позволи да определите пътя на тази папка.
1.9. Документация на компилатора
Ръководствата за потребителя на компилатора могат да бъдат отворени от HTML страницата, която се отваря във вашия браузър, когато щракнете върху синия бутон за помощ в таблото за управление на MPLAB X IDE, както е показано на екранната снимка.

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

MICROCHIP MPLAB XC8 C софтуер за разработка на компилатор -

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

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

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

  • MPLAB® XC8 C Ръководство за потребителя на компилатор за AVR® MCU (ревизия G)
  • Ръководство за миграция на AVR® GNU Toolchain към MPLAB® XC8 (ревизия A)
  • Ръководство на потребителя на Hexmate (ревизия B)

Ръководството за миграция на AVR® GNU Toolchain към MPLAB® XC8 описва промените в изходния код и опциите за изграждане, които може да са необходими, ако решите да мигрирате C-базиран проект от AVR 8-bit GNU Toolchain към Microchip MPLAB XC8 C компилатора. Справочното ръководство за унифицирана стандартна библиотека на Microchip описва поведението и интерфейса към функциите, дефинирани от унифицираната стандартна библиотека на Microchip, както и предвидената употреба на типовете библиотеки и макросите. Част от тази информация преди се съдържаше в Ръководството на потребителя на компилатора MPLAB® XC8 C за AVR® MCU. Информацията за библиотеката, специфична за устройството, все още се съдържа в това ръководство за компилатор.
Ако току-що започвате с 8-битови устройства и MPLAB XC8 C компилатор, Ръководството на потребителя на MPLAB® XC8 за вградени инженери – AVR® MCU (DS50003108) съдържа информация за настройване на проекти в MPLAB X IDE и писане на код за вашия първият проект MPLAB XC8 C. Това ръководство вече се разпространява с компилатора.
Ръководството на потребителя на Hexmate е предназначено за тези, които използват Hexmate като самостоятелно приложение.

Какво ново

Следните са нови AVR-target функции, които компилаторът вече поддържа. Номерът на версията в подзаглавията показва първата версия на компилатора, която поддържа функциите, които следват.
3.1. Версия 2.41
Поддръжка на Bootrow (XC8-3053) Компилаторът ще постави съдържанието на всички секции с префикс at.bootrow адрес 0x860000 в HEX файла. Тези секции се използват за BOOTROW памет, която е предназначена за съхранение на ключове и друга защитена информация, която трябва да бъде достъпна само за буутлоудър.

Елиминиране на излишни връщания (XC8-3048) Компилаторът вече ще елиминира излишните инструкции във функциите ret с краен скок, когато се използват персонализирани скриптове за свързване. Това е оптимизация, подобна на извършената преди, но сега се извършва на всички осиротели секции, дори ако се използва персонализиран скрипт за свързване и най-подходящата схема за разпределение не е в действие. Промяна на типа време (XC8-2982, 2932) Типът на стандартната библиотека C99 е променен от time_t на тип, което дава подобрения на размера на кода в някои свързани с времето дълги дълги функции, като напр. неподписано дълго mktime()
Нов nop (XC8-2946, 2945) Макросът е добавен към. Този макрос вмъква no- NOP() nop инструкция за работа в изхода.
Актуализация до XCLM (XC8-2944) Мениджърът на лицензи, използван с компилатора, е актуализиран и вече е по-отзивчив при проверка на подробностите за лиценза на компилатора.
Trampolined повиквания (XC8-2760) Компилаторът вече може да извършва замяна на дълги инструкции за повикване с по-кратки относителни повиквания, когато относителните форми на инструкциите обикновено са извън обхвата на тяхното местоназначение. В тази ситуация компилаторът ще се опита да замени с инструкции за извикване на rcall инструкция, която ще 'trampoline' изпълнение до желания адрес, напрample: jmp
rcall tramp_foo ;беше обаждане foo

rcall tramp_foo

tramp_foo:
jmp foo

Тази оптимизация, заедно с подобни оптимизации на програмния поток, се контролира от опцията -mrelax.

3.2. Версия 2.40
Поддръжка на нови устройства Вече е налична поддръжка за следните AVR части: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32 и AVR64EA48.
Подобрена процедурна абстракция Инструментът за оптимизация на процедурна абстракция (PA) е подобрен, така че кодът, съдържащ инструкция за извикване на функция (/ ), може да бъде очертан. Това ще се осъществи само при извикване на rcall, ако стекът не се използва за предаване на аргументи, нито за получаване на върната стойност от функцията. Стекът се използва при извикване на функция със списък с променливи аргументи или при извикване на функция, която приема повече аргументи, отколкото има регистри, определени за тази цел. Тази функция може да бъде деактивирана с помощта на опцията или процедурната абстракция може да бъде деактивирана изцяло за обектен файл или функция чрез използване на- и, съответно, или чрез използване на атрибута (спецификатор) селективно с функции.
mno-pa-outline-calls -mno-pa-on-file -mno-pa-on-function nopa Макрос за покритие на код Компилаторът вече дефинира макроса, ако е посочена валидна опция __nopa __CODECOV -mcodecov.
Опция за резервиране на памет Драйверът вече ще приеме опцията xc8-cc -mreserve=space@start:end при изграждане за AVR цели. Тази опция запазва посочения обхват на паметта в пространството на паметта на данните или програмата, като не позволява на линкера да попълни код или обекти в тази област. По-интелигентен интелигентен IO Няколко подобрения бяха направени във функциите Smart IO, включително общи настройки на основния код на printf, третиране на спецификатора на преобразуване %n като независим вариант, свързване във vararg pop рутинни процедури при поискване, използване на по-кратки типове данни, където е възможно за обработка Аргументи на IO функция и факторизиране на общия код в ширина на полето и прецизна обработка. Това може да доведе до значително спестяване на код и данни, както и да увеличи скоростта на изпълнение на IO.

3.3. Версия 2.39 (Functional Safety Release)
Лиценз за мрежов сървър Тази версия на компилатора за функционална безопасност MPLAB XC8 поддържа лиценза за мрежов сървър.
3.4. Версия 2.36
Няма.

3.5. Версия 2.35
Поддръжка на нови устройства Налична е поддръжка за следните AVR части: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 и AVR64DD32.
Подобрено превключване на контекст Новата опция -mcall-isr-prologues променя начина, по който функциите за прекъсване записват регистри при влизане и как тези регистри се възстановяват, когато процедурата за прекъсване приключи. Работи по начин, подобен на опцията -mcall-prologues, но засяга само функциите за прекъсване (ISR).
Още по-подобрено превключване на контекст Новата опция -mgas-isr-prologues контролира кода за превключване на контекста, генериран за рутинни услуги за малки прекъсвания. Когато е активирана, тази функция ще накара асемблера да сканира ISR за използване на регистъра и ще запази тези използвани регистри само ако е необходимо.
Конфигурируемо флаш картографиране Някои устройства от фамилията AVR DA и AVR DB имат SFR (напр. FLMAP), който указва кой 32k раздел от програмната памет ще бъде картографиран в паметта за данни. Новата опция – mconst-data-in-config-mapped-progmem може да се използва, за да накара линкерът да постави всички const-квалифицирани данни в една 32k секция и автоматично да инициализира съответния SFR регистър, за да гарантира, че тези данни са картографирани в паметта за данни пространство, където ще бъде достъпен по-ефективно.
Обединени стандартни библиотеки на Microchip Всички компилатори на MPLAB XC ще споделят обединена стандартна библиотека на Microchip, която вече е достъпна с тази версия на MPLAB XC8. Ръководството на потребителя на компилатора MPLA# XC8 C за AVO MCU вече не включва документацията за тези стандартни функции. Тази информация вече може да бъде намерена в Справочното ръководство на унифицираната стандартна библиотека на Microchip. Обърнете внимание, че някои функции, дефинирани по-рано от avr-libc, вече не са налични. (Вижте функционалността на Lila.)
Smart I0 Като част от новите унифицирани библиотеки, I0 функциите в семействата printf и scanf вече се генерират по избор при всяка компилация въз основа на това как тези функции се използват в програмата. Това може значително да намали ресурсите, използвани от програмата.
Опция за интелигентна помощ на ICI Когато анализира извиквания към интелигентни I0 функции (като print f () или scanf ()), компилаторът не винаги може да определи от форматиращия низ или да изведе от аргументите тези спецификатори на преобразуване, изисквани от извикването. Преди това компилаторът винаги не правеше предположения и гарантираше, че напълно функционалните 10 функции са свързани в окончателното програмно изображение. Добавена е нова опция – msmart-io-format=fmt, така че компилаторът да може вместо това да бъде информиран от потребителя за спецификаторите на преобразуване, използвани от интелигентни I0 функции, чието използване е двусмислено, предотвратявайки свързването на прекалено дълги 10 рутинни процедури. (Вижте опцията smart-io-format за повече подробности.)
Поставяне на персонализирани секции Преди това опцията -W1, –section-start само поставяше указаната секция на искания адрес, когато скриптът за свързване дефинираше изходна секция със същото име. Когато случаят не беше такъв, секцията беше поставена на адрес, избран от линкера, и опцията по същество беше игнорирана. Сега опцията ще бъде спазена за всички потребителски секции, дори ако скриптът за свързване не дефинира секцията. Обърнете внимание обаче, че за стандартни секции, като . текст, . bss или . данни, най-подходящият разпределител все още ще има пълен контрол върху тяхното разположение и опцията няма да има ефект. Използвайте опцията -ton, -Tsection=addr, както е описано в ръководството на потребителя.
3.6. Версия 2.32
Насочване на стека Предлага се с PRO лиценз за компилатор, функцията за насочване на стека на компилатора може да се използва за оценка на максималната дълбочина на всеки стек, използван от програма. Той конструира и анализира графиката на извикване на програма, определя използването на стека на всяка функция и изготвя отчет, от който може да се направи извод за дълбочината на стека, използван от програмата. Тази функция е активирана чрез опцията на командния ред -mchp-stack-usage. Обобщение на използването на стека се отпечатва след изпълнение. Подробен отчет за стека е достъпен на картата file, които могат да бъдат заявени по обичайния начин.
Поддръжка на нови устройства Предлага се поддръжка за следните AVR части: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 и AVR32DB48. Поддръжка на изтеглено устройство Поддръжката вече не е налична за следните AVR части: AVR16DA28, AVR16DA32 и AVR16DA48.
3.7. Версия 2.31
Няма.
3.8. Версия 2.30
Нова опция за предотвратяване на инициализация на данни Нова опция на драйвер -mno-data-init предотвратява инициализацията на данни и изчистването на bss секции. Работи чрез потискане на изхода на do copy data и do clear bss символи в асемблирането files, което от своя страна ще предотврати включването на тези рутинни процедури от линкера.
Подобрени оптимизации Направени са редица подобрения на оптимизацията, включително премахване на излишни инструкции за връщане, премахване на някои прескачания след инструкция за пропускане, ако битът е, и подобрена процедурна абстракция и възможност за повторение на този процес. Вече са налични допълнителни опции за контролиране на някои от тези оптимизации, по-специално -f секции-котви, което позволява достъпът до статични обекти да се извършва спрямо един символ; -mpa-iterations=n, което позволява броят на повторенията на процедурната абстракция да бъде променен от 2 по подразбиране; и -mpa-callcost-shortcall, който изпълнява по-агресивна процедурна абстракция, с надеждата, че линкерът може да облекчи дългите разговори. Тази последна опция може да увеличи размера на кода, ако основните предположения не са реализирани.
Поддръжка на нови устройства е налична за следните AVR части: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 и AVR 128DB64. Поддръжка на изтеглено устройство Вече не се предлага поддръжка за следните AVR части: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C и ATA664251.
3.9. Версия 2.29 (Functional Safety Release)
Заглавка file за вграден компилатор За да се гарантира, че компилаторът може да отговаря на езиковите спецификации като MISRA, заглавка file, който се включва автоматично от , беше обновен. Тази заглавка съдържа прототипите за всички вградени функции, като builtin_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 (Functional Safety Release)
Няма.
3.12. Версия 2.10
Покритие на код Това издание включва функция за покритие на код, която улеснява анализа на степента, до която изходният код на проекта е изпълнен. Използвайте опцията -mcodecov=ram, за да го активирате. След изпълнение на програмата на вашия хардуер, информацията за покритието на кода ще бъде събрана в устройството и това може да бъде прехвърлено и показано от MPLAB X IDE чрез плъгин за покритие на код. Вижте документацията на IDE за информация относно този плъгин, който може да бъде получен. #pragma nocodecov може да се използва за изключване на последващи функции от анализа на покритието. В идеалния случай прагмата трябва да се добави в началото на file да изключим всичко това file от анализа на покритието. Като алтернатива, _attribute_ ( (nocodecov) ) може да се използва за изключване на конкретна функция от анализа на покритието.
Описание на устройството files Ново устройство file наречен avr_chipinfo. html се намира в директорията docs на дистрибуцията на компилатора. Това file изброява всички устройства, поддържани от компилатора. Щракнете върху име на устройство и ще се отвори страница, показваща всички допустими конфигурационни битови настройки/стойности за това устройство, с напр.ampлес. Процедурна абстракция
Към компилатора са добавени процедурни абстракционни оптимизации, които заменят общи блокове от асемблерния код с извиквания към извлечено копие на този блок. Те се изпълняват от отделно приложение, което автоматично се извиква от компилатора при избор на оптимизации на ниво 2, 3 или s. Тези оптимизации намаляват размера на кода, но могат да намалят скоростта на изпълнение и възможността за отстраняване на грешки в кода. Процедурната абстракция може да бъде деактивирана на по-високи нива на оптимизация с помощта на опцията -mno-pa или може да бъде активирана на по-ниски нива на оптимизация (в зависимост от вашия лиценз) с помощта на -mpa. Може да бъде деактивиран за обект file използвайки -mno-pa-on-file=fileиме или деактивиран за функция чрез -mno-pa-on-function=function. Във вашия изходен код процедурната абстракция може да бъде деактивирана за функция чрез използване на атрибут ( (nopa) ) с дефиницията на функцията или чрез използване на nopa, което се разширява до атрибут ( (nopa, noinline) ) и по този начин предотвратява извършването на вграждане на функция и има абстракция на вграден код.
Поддръжка на битове за заключване в pragma Конфигурацията #pragma вече може да се използва за указване на битовете за заключване на AVR, както и на другите битове за конфигурация. Проверете avr_chipinfo. html file (споменати по-горе) за двойките настройка/стойност, които да се използват с тази прагма. Поддръжка на ново устройство Предлага се поддръжка за следните части: AVR28DAl28, AVR64DAl28, AVR32DA 128 и AVR48DA 128.
3.13. Версия 2.05
Повече битове за вашия долар Версията за macOS на този компилатор и мениджър на лицензи вече е 64-битово приложение. Това ще гарантира, че компилаторът ще се инсталира и работи без предупреждения на последните версии на macOS.
Константни обекти в програмната памет Компилаторът вече може да поставя константни обекти във флаш паметта на програмата, вместо да ги разполага в RAM. Компилаторът е модифициран така, че глобалните данни, отговарящи на изискванията, да се съхраняват във флаш паметта на програмата и тези данни могат да бъдат пряко и косвено достъпни с помощта на съответните инструкции на програмната памет. Тази нова функция е активирана по подразбиране, но може да бъде деактивирана с помощта на опцията -mno-const-data-in-progmem. За архитектурите avrxmega3 и avrtiny тази функция не е задължителна и винаги е деактивирана, тъй като програмната памет е картографирана в адресното пространство на данните за тези устройства.
Стандарт за безплатно Нелицензираните (безплатни) версии на този компилатор вече позволяват оптимизации до и включително ниво 2. Това ще позволи подобен, макар и не идентичен, изход на това, което беше възможно преди при използване на стандартен лиценз.
Добре дошли, AVRASM2 Асемблерът AVRASM2 за 8-битови устройства вече е включен в инсталатора на компилатора XC8. Този асемблер не се използва от компилатора XC8, но е достъпен за проекти, базирани на ръчно написан източник на асемблиране.
Поддръжка на ново устройство Предлага се поддръжка за следните части: ATMEGA1608, ATMEGA1609, ATMEGA808 и ATMEGA809.

3.14. Версия 2.00
Драйвер от най-високо ниво Нов драйвер, наречен xc8-cc, сега се намира над предишния драйвер avr-gcc и драйвера xc8 и може да извика подходящия компилатор въз основа на избора на целевото устройство. Този драйвер приема опции в стил GCC, които или се превеждат за, или се предават на компилатора, който се изпълнява. Този драйвер позволява подобен набор от опции с подобна семантика да се използва с всяка AVR или PIC цел и следователно е препоръчителният начин за извикване на компилатора. Ако е необходимо, старият avr-gcc драйвер може да бъде извикан директно с помощта на опциите в стар стил, които приемаше в по-ранните версии на компилатора.
Общ C интерфейс Този компилатор вече може да съответства на MPLAB Common C интерфейс, позволявайки изходния код да бъде по-лесно пренесен във всички MPLAB XC компилатори. Опцията -mext=cci изисква тази функция, позволявайки алтернативен синтаксис за много езикови разширения.
Нов библиотекарски драйвер Нов библиотекарски драйвер е разположен над предишния PIC libr librarian и AVR avr-ar librarian. Този драйвер приема опции в стил GCC-архиватор, които или се превеждат за, или се предават на библиотекаря, който се изпълнява. Новият драйвер позволява подобен набор от опции с подобна семантика да се използва за създаване или манипулиране на всяка PIC или AVR библиотека file и следователно е препоръчителният начин за извикване на библиотекаря. Ако е необходимо за наследени проекти, предишният библиотекар може да бъде извикан директно с помощта на опциите в стария стил, приети в по-ранните версии на компилатора.

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

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

4.1. Версия 2.41
Премахнати са неточни fma функции (XC8-2913) Стандартната библиотека C99 fma 0 -семейство функции ( ) не изчислява умножение-събиране с безкрайна точност към едно закръгляване, а вместо това натрупва грешки при закръгляване с всяка операция. Тези функции са премахнати от предоставената библиотека.
4.2. Версия 2.40
Няма.
4.3. Версия 2.39 (Functional Safety Release)
Няма.
4.4. Версия 2.36 Няма.
4.5. Версия 2.35
Обработка на низове към бази (XC8-2420) За да се осигури последователност с други XC компилатори, функциите за низ към XC8, като strtol () и т.н., вече няма да се опитват да конвертират входен низ, ако указаната база е по-голяма от 36 и вместо това ще зададе errno на EINVAL. Стандартът C не определя поведението на функциите, когато тази базова стойност бъде превишена.
Неподходящи оптимизации на скоростта Оптимизациите на процедурната абстракция бяха активирани при избор на оптимизации на ниво 3 (-03). Тези оптимизации намаляват размера на кода за сметка на скоростта на кода, така че не трябва да се извършват. Проекти, използващи това ниво на оптимизация, може да видят разлики в размера на кода и скоростта на изпълнение, когато са изградени с тази версия.
Функционалност на библиотеката Кодът за много от функциите на стандартната C библиотека сега идва от унифицираната стандартна библиотека на Microchip, която може да показва различно поведение при някои обстоятелства в сравнение с това, предоставено от предишната библиотека avr-libc. Напримерample, вече не е необходимо да се свързвате в библиотеката 1printf flt (опция -1printf_flt), за да включите форматирания I0 поддръжка за спецификатори на плаващ формат. Умният I0 характеристиките на унифицираната стандартна библиотека на Microchip правят тази опция излишна. Освен това, използването на _P суфиксирани рутинни процедури за низове и функции на паметта (напр. strcpy_P ( ) и т.н.), които работят с константни низове във флаш, вече не е необходимо. Стандартните C процедури (напр. strcpy ) ще работят правилно с такива данни, когато функцията const-data-in-program-memory е активирана.

4.6. Версия 2.32
Няма.
4.7. Версия 2.31
Няма.
4.8. Версия 2.30
Няма.
4.1. Версия 2.29 (Functional Safety Release)
Няма.
4.2. Версия 2.20
Променено оформление на DFP Компилаторът вече приема различно оформление, използвано от DFP (пакети от семейство устройства). Това ще означава, че по-стар DFP може да не работи с тази версия и по-старите компилатори няма да могат да използват най-новите DFP.
4.3. Версия 2.19 (Functional Safety Release)
Няма.
4.4. Версия 2.10
Няма
4.5. Версия 2.05
Константни обекти в програмната памет Обърнете внимание, че по подразбиране константните обекти ще бъдат поставени и достъпни в програмната памет (както е описано оттенък). Това ще повлияе на размера и скоростта на изпълнение на вашия проект, но трябва да намали използването на RAM. Тази функция може да бъде деактивирана, ако е необходимо, с помощта на опцията -mnoconst-data-in-progmem.
4.6. Версия 2.00
Предпазители за конфигурация Предпазителите за конфигурация на устройството вече могат да се програмират с помощта на прагма за конфигурация, последвана от двойки стойност на настройка, за да се укаже състоянието на предпазителя, напр.
#pragma config WDTON = SET
#pragma config BODLEVEL = BODLEVEL_4V3
Абсолютни обекти и функции Обектите и функциите вече могат да бъдат поставяни на конкретен адрес в паметта с помощта на спецификатора на CCI (адрес), напр.ampле:
#включи
int foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
Аргументът към този спецификатор трябва да бъде константа, която представлява адреса, на който ще бъде поставен първият байт или инструкция. RAM адресите се обозначават с помощта на отместване от 0x800000. Активирайте CCI, за да използвате тази функция.
Нов синтаксис на функцията за прекъсване Компилаторът вече приема спецификатора CCI _interrupt (num), за да покаже, че C функциите са манипулатори на прекъсвания. Спецификаторът приема номер на прекъсване, напрampле:
#включи
void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }

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

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

5.1. Версия 2.41
Проблеми с ключовете на ключовете Ventura (XC8-3088). използван за лицензиране, компилаторът може да не е бил правилно прочетен на хостове на macOS Ventura, което е довело до грешки при лицензирането. Промените в XCLM мениджъра на лицензи коригират този проблем.
Неправилна индикация за разпределение на паметта (XC8-2925) Опитът за разпределяне на SIZE_MAX байта (или стойност, близка до тази) памет с помощта на стандартните функции за управление на паметта на библиотеката (malloc () и др.) не беше успешен. Не беше взето под внимание, че са необходими допълнителни байтове в допълнение към заявения блок, когато се използва просто изпълнение на динамично разпределение на паметта. Сега ще бъде върнат NULL указател и errno ще бъде зададено на ENOMEM в такива ситуации.
Премахнати са неточни fma функции (XC8-2913) Стандартната библиотека C99 fma ( ) -семейство функции ( ) не изчислява умножение-събиране с безкрайна точност към едно закръгляване, а вместо това натрупва грешки при закръгляване с всяка операция. Тези функции са премахнати от предоставената библиотека.
Лошо управление на преобразуването на низ (XC8-2921, XC8-2652) Когато „предметна последователност“ за преобразуване от strtod Cr съдържа нещо, което изглежда като число с плаваща запетая в експоненциален формат и има неочакван знак след знака e/E, тогава там, където е предоставен endptr, му е присвоен адрес, който трябваше да сочи към знака след e/E, докато трябваше да сочи към самия знак e/E, тъй като той не беше преобразуван. Напримерample, strtod (“100exx”, &ep) трябва да върне 100.00 и да настрои ep да сочи към частта “exx” на низа, докато функцията връща правилната стойност, но задава ep да сочи към частта “xx” на низа .

5.2. Версия 2.40
Твърде отпуснат (XCS-2876) При използване на опцията -mrelax, компилаторът не разпределя някои секции заедно, което води до по-малко оптимални размери на кода. Това може да се е случило с код, който използва новите MUSL библиотеки или със слаби символи.
Функцията за картографиране не е деактивирана, както е посочено в предупреждението (XC8-2875) Функцията const-data-in-config-mappedprogmem зависи от активираната функция const-data-in-progmem. Ако функцията const-data-inconfig-mapped-progmem е изрично активирана с помощта на опцията и функцията const-data-inprogmem е деактивирана, стъпката за свързване е неуспешна, въпреки предупредителното съобщение, в което се посочва, че const-data-in-con fig- функцията mapped-progmem беше автоматично деактивирана, което не беше напълно правилно. Функцията const-data-in-config-mapped-progmem вече е напълно деактивирана в тази ситуация.
DFP промени за правилен достъп до NVMCTRL (XC8-2848) Кодът за стартиране по време на изпълнение, използван от устройствата AVR64EA, не взе под внимание, че регистърът NVMCTRL беше под защита при промяна на конфигурацията (CCP) и не успя да настрои I0 SFR на страницата, използвана от const-data-in-configmapped-progmem функция на компилатора. Промените, направени в AVR-Ex_DFP версия 2.2.55, ще позволят на кода за стартиране по време на изпълнение да записва правилно в този регистър.
Промени в DFP, които трябва да се избягват картографиране на флаш (XC8-2847) Внедрено е заобиколно решение за проблем с функцията на устройството за картографиране на флаш, докладван в AVR128DA28/32/48/64 Silicon Errata (D580000882). Функцията за компилатор const-data-in-config-mapped-progmem няма да се прилага по подразбиране за засегнатите устройства и тази промяна ще се появи в AVR-Dx_DFP версия 2.2.160.
Грешка при компилиране със sinhf или coshf (XC8-2834) Опитите за използване на библиотечните функции sinhf () или coshf () доведоха до грешка във връзката, описваща недефинирана препратка. Посочената липсваща функция вече е включена в дистрибуцията на компилатора.
Грешки при компилиране с nopa (XC,8-2833) Използването на атрибута nopa с функция, чието име на асемблер е указано с помощта на asm ( ), задейства съобщения за грешка от асемблера. Тази комбинация не е възможна.
Грешка на променлива функция с аргументи на указател (XC8-2755, XC8-2731) Функциите с променлив брой аргументи очакват 24-битови (тип memx) указатели да бъдат предадени в списъка с променливи аргументи, когато функцията const-data-in-progmem е активирана. Аргументите, които бяха указатели към паметта за данни, се предаваха като 16-битови обекти, което причиняваше грешка в кода, когато в крайна сметка бяха прочетени. Когато функцията constdata-in-progmem е активирана, всички 16-битови аргументи на указатели вече се преобразуват в 24-битови указатели.
неуспешни библиотечни функции strtoxxx (XC8-2620) Когато функцията const-data-in-progmem е била активирана, параметърът endptr във функциите на библиотеката strtoxxx не е актуализиран правилно за аргументи на изходния низ, които не са в програмната памет.
Сигнали за невалидни отливки (XC8-2612) Компилаторът вече ще издаде грешка, ако функцията const-in-progmem е активирана и адресът на низов литерал е изрично прехвърлен към адресното пространство на данните (премахване на квалификатора const), напр.ample, (uint 8_t *) „Здравей свят!“. Предупреждение е проблем, ако адресът може да е невалиден, когато константен указател на данни е изрично прехвърлен към адресното пространство на данните.
Поставяне на неинициализирани const обекти (XC8-2408) Неинициализирани const и const volatile обекти не са били поставяни в програмната памет на устройства, които картографират цялата или част от своята програмна памет в адресното пространство на данните. За тези устройства такива обекти сега се поставят в програмната памет, което прави работата им съвместима с други устройства.

5.3. Версия 2.39 (Functional Safety Release)
Няма.
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, – опцията за начало на раздел тихо не успяваше да постави раздели на номинирания начален адрес. Този проблем е коригиран за всички персонализирани секции; обаче няма да работи за никакви стандартни секции, като . текст или . bss, който трябва да бъде поставен с помощта на -W1, -T опция.
Линкерът се срива при отпускане (XC8-2647) Когато оптимизацията -mrelax беше активирана и имаше секции с код или данни, които не се побираха в наличната памет, линкерът се срина. Сега, при такива обстоятелства, вместо това се издават съобщения за грешка.

Без обратно падане (XC8-2646) The –nofallback опцията не е правилно внедрена, нито документирана. Това вече може да бъде избрано, за да се гарантира, че компилаторът няма да се върне към по-ниска настройка за оптимизация, ако компилаторът е нелицензиран, и вместо това ще издаде грешка.

Неподходящи оптимизации на скоростта (X03-2637) Оптимизациите на процедурната абстракция бяха активирани при избор на оптимизации на ниво 3 (-03). Тези оптимизации намаляват размера на кода за сметка на скоростта на кода, така че не трябва да се извършват.
Лош EEPROM достъп (XC8-2629) The Процедурата eeprom_read_block не работеше правилно на устройства Xmega, когато опцията -mconst-data-in-progmem беше активирана (което е състоянието по подразбиране), което доведе до неправилно четене на EEPROM паметта.
Невалидно разпределение на паметта (XC8-2593, XC8-2651) Когато -Ttext или -Tdata опция за свързване (напрampфайл, преминал чрез опция -vl драйвер) е посочен, съответният произход на региона на текст/данни е актуализиран; обаче крайният адрес не е коригиран по съответния начин, което може да е довело до регион, надвишаващ обхвата на паметта на целевото устройство.
Срив със свръхприписана функция (XC8-2580) Компилаторът се срива, ако функция е декларирана, използвайки повече от един от атрибутите за прекъсване, сигнал или nmi, напр. атрибут ( (сигнал, прекъсване)).
Невалиден код за прекъсване на ATtiny (XC8-2465) При изграждане за ATtiny устройства и оптимизациите са деактивирани (-00), функциите за прекъсване може да са задействали съобщения за асемблер на операнд извън диапазона.
Опциите не се предават (XC8-2452) Когато използвате опцията с множество, разделени със запетаи опции за свързване, не всички опции за свързване се предават на свързващия инструмент.
Грешка при индиректно четене на паметта на програмата (X03-2450) В някои случаи компилаторът генерира вътрешна грешка (неразпознаваем insn) при четене на двубайтова стойност от указател към паметта на програмата
5.6. Версия 2.32
Втори достъп на библиотеката се проваля (XC8-2381) Извикване на Windows версията на xc8-ar. .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 или _attribute_ ( (section) )), и първата такава променлива е инициализирана с нула или не е имала инициализатор, инициализатори за други променливи в същата единица за транслация, които са били поставени в същия раздел бяха изгубени.
5.1. Версия 2.29 (Functional Safety Release)
Няма.
5.2. Версия 2.20
Грешка с дълги команди (XC8-1983) Когато използвате AVR цел, компилаторът може да е спрял с a file не е намерена грешка, ако командният ред е изключително голям и съдържа специални знаци като кавички, обратни наклонени черти и т.н.
Неприсвоен раздел rodata (XC8-1920) AVR линкерът не успя да зададе памет за персонализирани rodata секции при изграждане за avrxmega3 и avrtiny архитектури, което потенциално създава грешки при припокриване на паметта
5.3. Версия 2.19 (Освобождаване за функционална безопасност)
Няма.
5.4. Версия 2.10
Неуспехи при преместване (XC8-1891) Най-подходящият разпределител беше оставянето на „дупки“ в паметта между секциите след релаксация на линкера. Освен фрагментирането на паметта, това увеличава възможността от грешки при преместване на линкер, свързани с скокове, свързани с компютъра, или повиквания, излизащи извън обхват.
Инструкции, които не са трансформирани чрез отпускане (XC8-1889) Отпускането на линкера не е настъпило за инструкции за скок или извикване, чиито цели стават достъпни, ако бъдат отпуснати.
Липсва функционалност (XC8E-388) Няколко определения от , като clock_div_t и clock_prescale set (), не са дефинирани за устройства, включително ATmega324PB, ATmega328PB, ATtiny441 и ATtiny841.
Липсващи макроси Макросите на препроцесора _XC8_MODE_, _XC8_VERS ION, _XC и _XC8 не са дефинирани автоматично от компилатора. Тези вече са налични.
5.5. Версия 2.05
Вътрешна грешка на компилатора (XC8-1822) При изграждане под Windows може да е възникнала вътрешна грешка на компилатора при оптимизиране на кода.
Не е открито препълване на RAM (XC8-1800, XC8-1796) Програми, които надхвърлят тази налична RAM, не са открити от компилатора в някои ситуации, което води до повреда на кода по време на изпълнение.
Пропусната флаш памет (XC8-1792) За устройства avrxmega3 и avrtiny части от флаш паметта може да са оставени непрограмирани от MPLAB X IDE.
Неуспешно изпълнение на main (XC8-1788) В някои ситуации, когато програмата нямаше дефинирани глобални променливи, кодът за стартиране по време на изпълнение не излезе и основната ( ) функция никога не беше достигната.
Неправилна информация за паметта (XC8-1787) За устройства avrxmega3 и avrtiny програмата avr-size отчиташе, че данните само за четене консумират RAM вместо програмна памет.
Неправилно четене на паметта на програмата (XC8-1783) Проекти, компилирани за устройства с програмна памет, нанесена в адресното пространство на данните и които дефинират обекти с помощта на макроса/атрибута PROGMEM, може да са прочели тези обекти от грешен адрес.
Вътрешна грешка с атрибути (XC8-1773) Възникна вътрешна грешка, ако сте дефинирали указателни обекти с
_at () или attribute() токени между името на указателя и дереферирания тип, напрample, char *
_at (0x800150) cp; Сега се издава предупреждение, ако се срещне такъв код.
Неуспешно изпълнение на main (XC8-1780, XC8-1767, XC8-1754) Използването на EEPROM променливи или дефинирането на предпазители с помощта на config pragma може да е причинило неправилно инициализиране на данни и/или да е блокирало изпълнението на програмата в кода за стартиране по време на изпълнение, преди да достигне до main ( ) .
Грешка в предпазителя с малки устройства (XC8-1778, XC8-1742) Устройствата attiny4/5/9/ 10/20/40 имаха неправилна дължина на предпазителя, посочена в заглавката им files, които водят до грешки на линкера при опит за изграждане на код, който дефинира предпазители.
Сегментиране повреда (XC8-1777) Коригирана е периодична повреда в сегментирането.
Срив на асемблер (XC8-1761) Avr-as асемблерът може да се е сринал, когато компилаторът е стартиран под Ubuntu 18.
Неизчистени обекти (XC8-1752) Неинициализирани обекти за продължителност на статичното съхранение може да не са били изчистени от кода за стартиране по време на изпълнение.
Конфликтната спецификация на устройството е игнорирана (XC8-1749) Компилаторът не генерираше грешка, когато бяха използвани множество опции за спецификация на устройство и посочиха различни устройства.
Повреда на паметта чрез куп (XC8-1748) The Символът _heap_start беше неправилно зададен, което доведе до възможността обикновените променливи да бъдат повредени от купчината.
Грешка при преместване на линкер (XC8-1739) Грешка при преместване на линкер може да е излъчена, когато кодът съдържа rjmp или rcall с цел точно на 4k байта.
5.6. Версия 2.00
Няма.

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

Следват ограниченията в работата на компилатора. Това може да са общи ограничения за кодиране или отклонения от информацията, съдържаща се в ръководството за потребителя. Етикетът(ите) в скоби в заглавието е идентификацията на проблема в базата данни за проследяване. Това може да е от полза, ако трябва да се свържете с поддръжката. Тези елементи, които нямат етикети, са ограничения, които описват modi operandi и които е вероятно да останат в сила за постоянно.
6.1. MPLAB X IDE Интеграция
MPLAB IDE интеграция Ако Compiler трябва да се използва от MPLAB IDE, тогава трябва да инсталирате MPLAB IDE преди инсталирането на Compiler.
6.2. Генериране на код
Segfault с опция за разделителни котви (XC8-3045) Програма, която дефинира функции с променливи списъци с аргументи и използва опцията -fsection-anchors, може да е задействала вътрешна грешка на компилатора: Грешка при сегментиране.
Информацията за отстраняване на грешки не е синхронизирана (XC8-2948) Когато оптимизациите за отпускане на линкер свиват инструкциите (напрample call to rcall инструкции), съпоставянията на изходна линия към адрес може да не останат синхронизирани, когато има повече от една операция на свиване, която се случва в секция.
В по -долу напрample, има две извиквания на foo, които завършват облекчени до относителни повиквания.
Грешка при разпределяне на PA памет (XC8-2881) Когато се използват оптимизаторите на процедурни абстракции, линкерът може да докладва грешки при разпределението на паметта, когато размерът на кода е близо до размера на наличната програмна памет на устройството, въпреки че програмата трябва да може да побере наличното пространство.
Не толкова умен Smart-I0 (XC8-2872) Функцията smart-io на компилатора ще генерира валиден, но неоптимален код за функцията snprint f, ако функцията const-data-in-progmem е била деактивирана или ако устройството е картографирало цялата си флаш памет в паметта за данни.
Още по-малко умен Smart-I0 (XC8-2869) Функцията smart-io на компилатора ще генерира валиден, но неоптимален код, когато се използват опциите -flto и -fno-builtin.
Неоптимално разположение на данни само за четене (XC8-2849) В момента линкерът не познава секциите на паметта APPCODE и APPDATA, нито разделите [No-Read-While-Write в картата на паметта. В резултат на това има малък шанс линкерът да разпредели данни само за четене в неподходяща област от паметта. Вероятността от неправилно поставени данни се увеличава, ако функцията const-data-in-progmem е активирана, особено ако функцията const-data-in-config-mapped-progmem също е активирана. Тези функции могат да бъдат деактивирани, ако е необходимо.
Обект file поръчка за обработка (XC8-2863) Редът, в който обектите files ще бъдат обработени от линкера може да се различават въз основа на използването на оптимизации на процедурни абстракции (опция -mpa). Това ще засегне само код, който дефинира слаби функции в множество модули.
Грешка в линкера с абсолютно (XC8-2777) Когато даден обект е направен абсолютен на адрес в началото на RAM и също са дефинирани неинициализирани обекти, може да се задейства грешка на свързване.
Кратки идентификатори за събуждане (XC8-2775) За устройства ATA5700/2 регистрите PHIDO/1 се дефинират само като 16 бита широки, а не 32 бита широки.
Срив на линкера при извикване на символ (XC8-2758) Линкерът може да се срине, ако опцията на драйвера -mrelax се използва, когато изходният код извиква символ, който е дефиниран с помощта на опцията на линкера -cc., –de f sym.
Неправилна инициализация (XC8-2679) Има е несъответствие между това къде са поставени първоначалните стойности за някои глобални/статични обекти с размер на байт в паметта за данни и къде ще се осъществява достъп до променливите по време на изпълнение.
Лоши индиректни извиквания на функции (XC8-2628) В някои случаи извикванията на функция, направени чрез указател на функция, съхранен като част от структура, може да се провалят.
strtof връща нула за шестнадесетични плаващи числа (XC8-2626) Библиотечните функции strtof et al и scanf ( ) et al винаги ще преобразуват шестнадесетично число с плаваща запетая, което не указва експонента, в нула. Напримерampле:
strtof (“Oxl”, &endptr) ;
ще върне стойността 0, а не I.
Неточно съобщение на съветника за стека (XC8-2542, XC8-2541) В някои случаи предупреждението на съветника за стека относно рекурсия или използван неопределен стек (вероятно чрез използването на alloca()) не се излъчва.
Повреда с дублиран код за прекъсване (XC8-2421) Когато повече от една функция за прекъсване има едно и също тяло, компилаторът може да накара изхода за една функция за прекъсване да извика другата. Това ще доведе до ненужно записване на всички изтрити от обажданията регистри и прекъсванията ще бъдат активирани дори преди епилогът на текущия манипулатор на прекъсване да е изпълнил, което може да доведе до повреда на кода.
Лош резултат с невалиден DFP път (XC8-2376) Ако компилаторът е извикан с невалиден DFP път и „spec“ file съществува за избраното устройство, компилаторът не отчита липсващия фамилиен пакет на устройството и вместо това избира „спец.“ file, което след това може да доведе до невалиден изход. "спецификацията" files може да не са актуални с разпределените DFP и са предназначени за използване само с вътрешно тестване на компилатор.
Неоткрито припокриване на паметта (XC8-1966) Компилаторът не открива припокриването на паметта на обекти, направени абсолютни на адрес (чрез _at ( )) и други обекти, използващи спецификатора на раздел ( ) и които са свързани към същия адрес.
Неуспех с библиотечните функции и _memx (XC8-1763) Извиканите libgcc float функции с аргумент в адресното пространство memx може да се провалят. Имайте предвид, че библиотечните процедури се извикват от някои C оператори, така че напрample, следният код е засегнат:
върнете regFloatVar > memxFloatVar;
Ограничено изпълнение на libgcc (AVRTC-731) За продуктите ATTiny4/5/9/10/20/40 стандартната реализация на C / Math библиотека в libgcc е много ограничена или не присъства.
Ограничения на програмната памет (AVRTC-732) Изображенията на програмната памет над 128 kb се поддържат от инструменталната верига; въпреки това, има известни случаи на прекратяване на връзката без отпускане и без полезно съобщение за грешка, вместо генериране на необходимите функционални мъничета, когато се използва опцията -mre lax.
Ограничения на пространството на имената (AVRTC-733) Именуваните адресни пространства се поддържат от инструменталната верига, при спазване на ограниченията, споменати в раздела на ръководството на потребителя Квалификатори на специални типове.
Часови зони The библиотечните функции приемат GMT и не поддържат местни часови зони, поради което localtime ( ) ще върне същото време като 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 софтуер за разработка на компилатор, софтуер за разработка на компилатор, софтуер за разработка, софтуер

Референции

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

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