Примітки до випуску компілятора MPLAB® XC8 C версії 2.41 для AVR® MCU
Інструкція з експлуатації
Програмне забезпечення для розробки компілятора C MPLAB XC8
ЦЕЙ ДОКУМЕНТ МІСТИТЬ ВАЖЛИВУ ІНФОРМАЦІЮ ЩОДО КОМПІЛЯТОРА 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 написані та розповсюджуються згідно з GNU General Public License (GPL), що означає, що його вихідний код вільно поширюється та доступний для громадськості.
Вихідний код для інструментів під GNU GPL можна завантажити окремо з Microchip webсайт. Ви можете прочитати GNU GPL у файлі з іменем, розташованому в підкаталозі каталогу avr/doc вашого файлу licence.txt. Загальне обговорення принципів, що лежать в основі 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 доступний для різноманітних 64-розрядних операційних систем, включаючи Microsoft Windows 10 і вище; Ubuntu 18.04 і вище; або macOS 10.15 і вище. Сервер також може працювати на різних інших операційних системах, включаючи Windows Server, дистрибутивах Linux, таких як Oracle® Enterprise Linux® і Red Hate Enterprise Linux, а також на старіших версіях підтримуваних операційних систем. Однак сервер мережевих ліцензій MPLAB XC не тестується на цих операційних системах. Сервер мережевих ліцензій MPLAB XC можна запускати на віртуальних машинах підтримуваної ОС за допомогою ліцензії віртуальної машини для мережевих ліцензій (SW006021-VM). Усі 32-розрядні версії мережевого сервера MPLAB XC припинено, починаючи з версії 3.00.
Пристрої, що підтримуються
Цей компілятор підтримує всі доступні 8-розрядні пристрої AVR MCU на момент випуску. Перегляньте (у каталозі компілятора) список усіх підтримуваних пристроїв. Ці файли також перераховані
avr_chipinfo.html налаштування бітів конфігурації документа для кожного пристрою.
1.7. Видання та оновлення ліцензій
Компілятор MPLAB XC8 можна активувати як ліцензований (PRO) або неліцензійний (безкоштовний) продукт. Вам потрібно придбати ключ активації, щоб ліцензувати ваш компілятор. Ліцензія забезпечує вищий рівень оптимізації порівняно з безкоштовним продуктом. Неліцензійним компілятором можна працювати нескінченно довго без ліцензії. Компілятор MPLAB XC8 Functional Safety необхідно активувати за допомогою ліцензії на функціональну безпеку, придбаної в 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 є окремим інсталятором і не входить до інсталятора компілятора для одного користувача.
XC License Manager тепер підтримує роумінг плаваючих мережевих ліцензій. Розрахована на користувачів мобільних пристроїв, ця функція дозволяє плаваючій ліцензії відключитися від мережі на короткий проміжок часу. Використовуючи цю функцію, ви можете відключитися від мережі та продовжувати використовувати компілятор MPLAB XC. Перегляньте папку doc інсталяції XCLM, щоб дізнатися більше про цю функцію.
MPLAB X IDE містить вікно ліцензій (Інструменти > Ліцензії) для візуального керування роумінгом.
1.8.1. Вирішення проблем із встановленням
Якщо у вас виникли труднощі з інсталяцією компілятора під будь-яку з операційних систем Windows, спробуйте наступні пропозиції.
Запустіть установку від імені адміністратора.
Встановіть дозволи програми встановлення на «Повний контроль». (Натисніть файл правою кнопкою миші, виберіть «Властивості», вкладку «Безпека», виберіть користувача, редагуйте.)
Установіть дозволи для тимчасової папки на «Повний доступ».
Щоб визначити розташування тимчасової папки, введіть %temp% у команду «Виконати» (клавіша з логотипом Windows + R).
Це відкриє діалогове вікно провідника файлів, у якому буде показано цей каталог, і ви зможете визначити шлях до цієї папки.
1.9. Документація компілятора
Посібники користувача компілятора можна відкрити на сторінці HTML, яка відкривається у вашому браузері, якщо натиснути синю кнопку довідки на інформаційній панелі MPLAB X IDE, як показано на знімку екрана.
Якщо ви створюєте для 8-розрядних цілей AVR, Посібник користувача компілятора MPLAB® XC8 C для AVR® MCU містить інформацію про параметри та функції компілятора, які застосовуються до цієї архітектури.
1.10. Підтримка клієнтів
Microchip вітає повідомлення про помилки, пропозиції чи коментарі щодо цієї версії компілятора. Надсилайте будь-які звіти про помилки або запити щодо функцій через систему підтримки.
Оновлення документації
Оновлені онлайн-версії документації MPLAB XC8 можна знайти в Інтернет-технічній документації Microchip. webсайт. Нова або оновлена документація AVR у цьому випуску:
- Посібник користувача компілятора MPLAB® XC8 C для AVR® MCU (версія G)
- Керівництво з переходу з AVR® GNU Toolchain на MPLAB® XC8 (версія A)
- Посібник користувача Hexmate (версія B)
Посібник з міграції AVR® GNU Toolchain до MPLAB® XC8 описує зміни у вихідному коді та параметрах збірки, які можуть знадобитися, якщо ви вирішите перенести проект на основі C з 8-розрядної GNU Toolchain AVR на компілятор Microchip MPLAB XC8 C. Довідковий посібник з уніфікованої стандартної бібліотеки Microchip описує поведінку та інтерфейс функцій, визначених уніфікованою стандартною бібліотекою Microchip, а також передбачуване використання типів бібліотек і макросів. Частина цієї інформації раніше містилася в посібнику користувача компілятора MPLAB® XC8 C для AVR® MCU. Інформація про бібліотеку пристрою все ще міститься в цьому посібнику компілятора.
Якщо ви тільки починаєте працювати з 8-розрядними пристроями та компілятором C MPLAB XC8, посібник користувача 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 на тип, що забезпечує покращення розміру коду в деяких пов’язаних із часом функціях long long, наприклад. unsigned long 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.
3.3. Версія 2.39 (версія функціональної безпеки)
Ліцензія мережевого сервера Цей випуск компілятора функціональної безпеки MPLAB XC8 підтримує ліцензію мережевого сервера.
3.4. Версія 2.36
Жодного.
3.5. Версія 2.35
Підтримка нових пристроїв Підтримка доступна для таких частин AVR: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 і AVR64DD32.
Покращене перемикання контексту Нова опція -mcall-isr-prologues змінює те, як функції переривання зберігають регістри під час входу та те, як ці регістри відновлюються після завершення процедури переривання. Він працює подібно до параметра -mcall-prologues, але впливає лише на функції переривання (ISR).
Ще покращене перемикання контексту Нова опція -mgas-isr-prologues керує кодом перемикання контексту, створеним для невеликих процедур обслуговування переривань. Якщо ввімкнути цю функцію, асемблер скануватиме ISR на використання регістрів і зберігатиме ці використані регістри лише за потреби.
Конфігуроване відображення флеш-пам'яті Деякі пристрої сімейства AVR DA та AVR DB мають SFR (наприклад, FLMAP), який визначає, який 32k розділ пам'яті програм буде відображено в пам'ять даних. Новий параметр – mconst-data-in-config-mapped-progmem можна використовувати, щоб зв’язувач розміщував усі дані, кваліфіковані const, в один розділ розміром 32 КБ і автоматично ініціалізував відповідний регістр SFR, щоб гарантувати, що ці дані відображаються в пам’яті даних. простір, де доступ до нього буде більш ефективним.
Уніфіковані стандартні бібліотеки Microchip Усі компілятори MPLAB XC спільно використовуватимуть уніфіковану стандартну бібліотеку Microchip, яка тепер доступна з цією версією MPLAB XC8. Посібник користувача компілятора MPLA# XC8 C для AVO MCU більше не включає документацію для цих стандартних функцій. Тепер цю інформацію можна знайти в Довідковому посібнику з уніфікованої стандартної бібліотеки Microchip. Зауважте, що деякі функції, раніше визначені avr-libc, більше не доступні. (Див. функції Lila.)
Smart I0 Як частина нових уніфікованих бібліотек, функції I0 у сімействах printf і scanf тепер генеруються спеціально для кожної збірки на основі того, як ці функції використовуються в програмі. Це може суттєво зменшити ресурси, які використовує програма.
Опція допомоги Smart ICI Під час аналізу викликів розумних функцій I0 (таких як print f () або scanf ()) компілятор не завжди може визначити з рядка формату або вивести з аргументів ті специфікатори перетворення, які потрібні для виклику. Раніше компілятор завжди не робив жодних припущень і гарантував, що повнофункціональні 10 функцій були пов’язані в остаточний образ програми. Було додано нову опцію – msmart-io-format=fmt, щоб натомість користувач міг повідомити компілятор про специфікатори перетворення, які використовуються функціями smart I0, використання яких є неоднозначним, що запобігає зв’язуванню надто довгих процедур 10. (Додаткову інформацію див. у розділі Smart-io-format Option.)
Розміщення користувацьких розділів Раніше параметр -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 і do clear bss символів у збірці files, що, у свою чергу, запобігатиме включенню цих підпрограм компонувальником.
Покращена оптимізація Було внесено низку вдосконалень оптимізації, включаючи видалення надлишкових інструкцій повернення, видалення деяких переходів після інструкції пропуску, якщо біт є, а також покращену процедурну абстракцію та можливість ітерації цього процесу. Тепер доступні додаткові параметри для керування деякими з цих оптимізацій, зокрема -f section-anchors, що дозволяє здійснювати доступ до статичних об’єктів відносно одного символу; -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 (версія функціональної безпеки)
Заголовок 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 (версія функціональної безпеки)
Жодного.
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.
Константні об’єкти в програмній пам’яті Компілятор тепер може розміщувати константні об’єкти у флеш-пам’яті програми, а не в оперативній пам’яті. Компілятор було змінено таким чином, що глобальні дані, кваліфіковані як cons, зберігаються у флеш-пам’яті програми, і до цих даних можна отримати прямий або опосередкований доступ за допомогою відповідних інструкцій програмної пам’яті. Ця нова функція ввімкнена за замовчуванням, але її можна вимкнути за допомогою параметра -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 C, що дозволяє легше переносити вихідний код на всі компілятори MPLAB XC. Параметр -mext=cci запитує цю функцію, увімкнувши альтернативний синтаксис для багатьох розширень мови.
Новий бібліотечний драйвер Новий бібліотечний драйвер розташований над попереднім бібліотекарем PIC libr та бібліотекарем AVR avr-ar. Цей драйвер приймає параметри стилю GCC-архіватора, які або перекладаються, або передаються бібліотекарю, який виконується. Новий драйвер дозволяє використовувати подібний набір параметрів із подібною семантикою для створення або керування будь-якою бібліотекою PIC або AVR file і тому є рекомендованим способом виклику бібліотекаря. Якщо потрібно для застарілих проектів, попереднього бібліотекаря можна викликати напряму за допомогою параметрів старого стилю, прийнятих у попередніх версіях компілятора.
Питання міграції
Нижче наведено функції, які тепер обробляються компілятором інакше. Ці зміни можуть вимагати модифікації вихідного коду, якщо код буде перенесено на цю версію компілятора. Номер версії в підзаголовках вказує на першу версію компілятора, яка підтримує наступні зміни.
4.1. Версія 2.41
Неточні функції fma видалено (XC8-2913) Стандартна бібліотека C99 fma 0 -сімейство функцій ( ) не обчислював множення-додавання з нескінченною точністю до одного округлення, а натомість накопичував помилки округлення під час кожної операції. Ці функції видалено з наданої бібліотеки.
4.2. Версія 2.40
Жодного.
4.3. Версія 2.39 (версія функціональної безпеки)
Жодного.
4.4. Версія 2.36 Немає.
4.5. Версія 2.35
Обробка основ рядка (XC8-2420) Щоб забезпечити узгодженість з іншими компіляторами XC, функції ланцюга XC8, такі як strtol () тощо, більше не намагатимуться перетворити вхідний рядок, якщо вказана основа перевищує 36 і натомість встановить для errno значення EINVAL. Стандарт C не визначає поведінку функцій, коли це базове значення перевищено.
Невідповідна оптимізація швидкості Оптимізацію процедурної абстракції вмикали під час вибору оптимізації рівня 3 (-03). Ці оптимізації зменшують розмір коду за рахунок швидкості коду, тому їх не слід було виконувати. Проекти, які використовують цей рівень оптимізації, можуть помітити відмінності в розмірі коду та швидкості виконання під час створення з цим випуском.
Функціонал бібліотеки Код для багатьох стандартних функцій бібліотеки C тепер походить від уніфікованої стандартної бібліотеки Microchip, яка за певних обставин може відрізнятися від поведінки колишньої бібліотеки avr-libc. наприкладample, більше не потрібно посилатися на бібліотеку 1printf flt (опція -1printf_flt), щоб увімкнути форматування I0 підтримка специфікаторів float-format. Розумний 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 (версія функціональної безпеки)
Жодного.
4.2. Версія 2.20
Змінено макет DFP Тепер компілятор використовує інший макет, який використовується DFP (пакети сімейства пристроїв). Це означатиме, що старіший DFP може не працювати з цією версією, а старіші компілятори не зможуть використовувати останні DFP.
4.3. Версія 2.19 (версія функціональної безпеки)
Жодного.
4.4. Версія 2.10
Жодного
4.5. Версія 2.05
Константні об’єкти в програмній пам’яті Зауважте, що за замовчуванням константні об’єкти розміщуватимуться та доступні до програмної пам’яті (як описано). Це вплине на розмір і швидкість виконання вашого проекту, але має зменшити використання оперативної пам’яті. За потреби цю функцію можна вимкнути за допомогою параметра -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, щоб отримати інформацію про зміни, внесені до 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 (версія функціональної безпеки)
Жодного.
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) Виклик версії xc8-ar для Windows. Можливо, архіватору бібліотеки .exe другий раз отримати доступ до існуючого архіву бібліотеки не вдалось із повідомленням про помилку «Неможливо перейменувати».
5.7. Версія 2.31
Незрозумілий компілятор несправності (XC8-2367) Під час роботи на платформах Windows із системним тимчасовим каталогом було встановлено шлях із крапкою «.» символ, можливо, компілятор не зміг виконати.
5.8. Версія 2.30
Глобальні мітки неправильно розміщені після контуру (XC8-2299) Рукописний код складання, який розміщує глобальні мітки в послідовностях складання, які вилучаються процедурною абстракцією, міг бути неправильно змінений.
Розслаблююча аварія (XC8-2287) Використання параметра -mrelax могло призвести до збою компонувальника, коли оптимізація релаксації хвостового переходу намагалася видалити інструкцію ret, яка не була в кінці розділу.
Збій під час оптимізації міток як значень (XC8-2282) Код, який використовує розширення мови GNU C «Мітки як значення», міг спричинити збій оптимізації процедурної абстракції з помилкою виправлення охоплення діапазону Outlined VMA.
Не так конст (XC8-2271) Прототипи для st rstr ( ) та інших функцій з більше не вказувати нестандартний кваліфікатор const у повернених покажчиках рядків, коли функцію -mconst-data-inprogmem вимкнено. Зауважте, що на пристроях avrxmega3 і avrtiny ця функція ввімкнена постійно.
Втрачені ініціалізатори (XC8-2269) Коли більше ніж одна змінна в одиниці перекладу була розміщена в розділі (з використанням _section або _attribute_ ( (section) )), і перша така змінна була ініціалізована нулем або не мала ініціалізатора, ініціалізатори для інших змінних у тій самій одиниці перекладу, які були розміщені в цьому ж розділі були втрачені.
5.1. Версія 2.29 (версія функціональної безпеки)
Жодного.
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) У деяких ситуаціях, коли в програмі не було визначено глобальних змінних, код запуску під час виконання не завершувався, і функція main ( ) ніколи не досягалася.
Неправильна інформація про пам'ять (XC8-1787) Для пристроїв avrxmega3 і avrtiny програма avr-size повідомляла, що дані лише для читання споживали оперативну пам’ять замість програмної пам’яті.
Неправильне читання пам'яті програми (XC8-1783) Проекти, скомпільовані для пристроїв із програмною пам’яттю, відображеною в адресному просторі даних і які визначають об’єкти за допомогою макросу/атрибута PROGMEM, могли прочитати ці об’єкти з неправильної адреси.
Внутрішня помилка з атрибутами (XC8-1773) Сталася внутрішня помилка, якщо ви визначили об’єкти-вказівники за допомогою
_at () або attribute() токени між іменем вказівника та розіменованим типом, наприкладample, char *
_at (0x800150) cp; У разі виявлення такого коду тепер видається попередження.
Неможливість виконати main (XC8-1780, XC8-1767, XC8-1754) Використання змінних EEPROM або визначення запобіжників за допомогою прагми конфігурації могло призвести до неправильної ініціалізації даних та/або блокування виконання програми в коді запуску під час виконання, перш ніж досягти main ( ) .
Помилка запобіжника з маленькими пристроями (XC8-1778, XC8-1742) Пристрої attiny4/5/9/ 10/20/40 мали неправильну довжину запобіжника, указану в їх заголовку files, які призводять до помилок компонувальника під час спроби створити код, який визначав fuses.
Сегментація помилка (XC8-1777) Переривчаста помилка сегментації була виправлена.
Збій асемблера (XC8-1761) Асемблер avr-as міг аварійно завершити роботу, коли компілятор запускався під Ubuntu 18.
Об'єкти не очищені (XC8-1752) Неініціалізовані об’єкти тривалості статичного зберігання могли не бути очищені кодом запуску під час виконання.
Конфліктна специфікація пристрою проігнорована (XC8-1749) Компілятор не генерував помилку, коли використовувалися кілька параметрів специфікації пристрою та вказували різні пристрої.
Пошкодження пам'яті купою (XC8-1748) The Символ _heap_start було встановлено неправильно, що призвело до ймовірності пошкодження звичайних змінних купою.
Помилка переміщення компонувальника (XC8-1739) Помилка переміщення компонувальника могла виникнути, коли код містив rjmp або rcall із цільовою адресою рівно 4 кбайт.
5.6. Версія 2.00
Жодного.
Відомі проблеми
Нижче наведено обмеження в роботі компілятора. Це можуть бути загальні обмеження кодування або відхилення від інформації, що міститься в посібнику користувача. Мітки в дужках у назві є ідентифікатором цієї проблеми в базі даних відстеження. Це може стати в нагоді, якщо вам потрібно звернутися до служби підтримки. Ті елементи, які не мають міток, є обмеженнями, які описують modi operandi та які, ймовірно, залишатимуться в силі постійно.
6.1. MPLAB X IDE Інтеграція
MPLAB IDE інтеграція Якщо компілятор буде використовуватися з MPLAB IDE, ви повинні встановити MPLAB IDE перед встановленням компілятора.
6.2. Генерація коду
Segfault з опцією якорів розділу (XC8-3045) Програма, яка визначила функції зі списками змінних аргументів і використовує параметр -fsection-anchors, могла викликати внутрішню помилку компілятора: помилка сегментації.
Інформація про налагодження не синхронізована (XC8-2948) Коли оптимізація релаксації компонувальника стискає інструкції (наприклад,amp(інструкції виклику 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) Коли об’єкт було зроблено абсолютним за адресою на початку ОЗП і також визначено неініціалізовані об’єкти, може виникнути помилка зв’язування.
Короткі ідентифікатори пробудження (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 існує для вибраного пристрою, компілятор не повідомляє про відсутній пакет сімейства пристроїв, а замість цього вибирає «spec» file, що може призвести до недійсного результату. Специфікація files можуть бути не оновленими для розподілених DFP і призначені для використання лише з внутрішнім тестуванням компілятора.
Перекриття пам'яті не виявлено (XC8-1966) Компілятор не виявляє перекривання пам’яті об’єктів, зроблених абсолютними за адресою (через _at ( )) та інших об’єктів, які використовують специфікатор розділу ( ), і які пов’язані з тією самою адресою.
Помилка функцій бібліотеки та _memx (XC8-1763) Викликані функції libgcc float з аргументом в адресному просторі memx можуть не працювати. Зверніть увагу, що підпрограми бібліотеки викликаються з деяких операторів C, отже, наприкладample, це стосується такого коду:
return regFloatVar > memxFloatVar;
Обмежена реалізація libgcc (AVRTC-731) Для продуктів ATTiny4/5/9/10/20/40 реалізація стандартної бібліотеки C / Math у libgcc дуже обмежена або відсутня.
Обмеження програмної пам'яті (AVRTC-732) Зображення програмної пам’яті понад 128 Кб підтримуються інструментальним набором; проте, є відомі випадки переривання зв’язування без релаксації та без корисного повідомлення про помилку, а не генерації необхідних заглушок функції, коли використовується параметр -mre lax.
Обмеження простору імен (AVRTC-733) Іменовані адресні простори підтримуються ланцюжком інструментів з урахуванням обмежень, згаданих у розділі «Кваліфікатори спеціальних типів» посібника користувача.
Часові пояси The бібліотечні функції припускають GMT і не підтримують місцеві часові пояси, тому localtime ( ) повертатиме той самий час, що й gmtime ( ), наприкладample.
file:///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm
Документи / Ресурси
![]() |
Програмне забезпечення для розробки компілятора C MICROCHIP MPLAB XC8 [pdfПосібник користувача Програмне забезпечення для розробки компілятора MPLAB XC8 C, MPLAB XC8 C, програмне забезпечення для розробки компілятора, програмне забезпечення для розробки, програмне забезпечення |