Примечания к выпуску MPLAB® XC8 C Compiler Version 2.41 для AVR® MCU
Руководство пользователя
Программное обеспечение для разработки компилятора MPLAB XC8 C
ЭТОТ ДОКУМЕНТ СОДЕРЖИТ ВАЖНУЮ ИНФОРМАЦИЮ, КАСАЮЩУЮСЯ КОМПИЛЯТОРА C MPLAB XC8 ДЛЯ УСТРОЙСТВ 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 в файле с именем, расположенном в подкаталоге вашего установочного каталога license.txt avr/doc. Общее обсуждение принципов, лежащих в основе GPL, можно найти здесь.
Код поддержки, предоставленный для файлов заголовков, сценариев компоновщика и библиотек времени выполнения, является частным кодом и не подпадает под действие GPL.
Этот компилятор является реализацией GCC версии 5.4.0, binutils версии 2.26 и использует avr-libc версии 2.0.0.
1.6. Системные требования
Компилятор C MPLAB XC8 и программное обеспечение для лицензирования, которое он использует, доступны для различных операционных систем, включая 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 на момент выпуска. См. (в каталоге компилятора) список всех поддерживаемых устройств. В этих файлах также перечислены
avr_chipinfo.html doc настройки битов конфигурации для каждого устройства.
1.7. Редакции и обновления лицензий
Компилятор MPLAB XC8 можно активировать как лицензионный (PRO) или нелицензионный (Free) продукт. Вам необходимо приобрести ключ активации, чтобы лицензировать ваш компилятор. Лицензия обеспечивает более высокий уровень оптимизации по сравнению с бесплатным продуктом. Нелицензионный компилятор может работать неограниченно долго без лицензии. Компилятор функциональной безопасности 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% в команду «Выполнить» (клавиша с логотипом Windows + R).
Это откроет диалоговое окно проводника, показывающее этот каталог, и позволит вам определить путь к этой папке.
1.9. Документация компилятора
Руководства пользователя компилятора можно открыть с HTML-страницы, которая открывается в вашем браузере при нажатии синей кнопки справки на панели инструментов MPLAB X IDE, как показано на снимке экрана.
Если вы выполняете сборку для 8-разрядных целей AVR, руководство пользователя MPLAB® XC8 C Compiler для AVR® MCU содержит информацию о тех параметрах и функциях компилятора, которые применимы к этой архитектуре.

1.10. поддержка клиентов
Microchip приветствует сообщения об ошибках, предложения или комментарии относительно этой версии компилятора. Пожалуйста, направляйте любые сообщения об ошибках или запросы функций через систему поддержки.
Обновления документации
Актуальные онлайн-версии документации MPLAB XC8 можно найти в онлайн-технической документации Microchip. webсайт. Новая или обновленная документация AVR в этом выпуске:
- Руководство пользователя MPLAB® XC8 C Compiler для 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 Compiler для AVR® MCU. Информация о библиотеке для конкретного устройства по-прежнему содержится в этом руководстве по компилятору.
Если вы только начинаете работать с 8-битными устройствами и компилятором C MPLAB XC8, в Руководстве пользователя MPLAB® XC8 для разработчиков встраиваемых систем — микроконтроллеры AVR® (DS50003108) есть информация о настройке проектов в среде MPLAB X IDE и написании кода для вашего первый проект MPLAB XC8 C. Это руководство теперь распространяется вместе с компилятором.
Руководство пользователя Hexmate предназначено для тех, кто использует Hexmate как отдельное приложение.
Что нового
Ниже приведены новые целевые функции AVR, которые теперь поддерживает компилятор. Номер версии в подзаголовках указывает на первую версию компилятора, поддерживающую следующие функции.
3.1. Версия 2.41
Поддержка Bootrow (XC8-3053) Компилятор поместит содержимое любых разделов с префиксом .bootrow по адресу 0x860000 в HEX-файл. Эти разделы используются для памяти BOOTROW, предназначенной для хранения ключей и другой защищенной информации, которая должна быть доступна только загрузчику.
Устранение избыточного возврата (XC8-3048) Теперь компилятор будет исключать избыточные инструкции в функциях ret с переходом в конец при использовании пользовательских сценариев компоновщика. Это оптимизация аналогична той, что выполнялась ранее, но теперь она выполняется для всех потерянных разделов, даже если используется пользовательский скрипт компоновщика и не используется наилучшая схема распределения. Изменение типа времени (XC8-2982, 2932) Стандартный библиотечный тип C99 был изменен с time_t на тип, что позволяет улучшить размер кода в некоторых длинных функциях, связанных со временем, таких как. беззнаковое длинное mktime()
Новый nop (XC8-2946, 2945) Добавлен макрос. Этот макрос вставляет no- NOP() инструкция nop операции на выходе.
Обновление для XCLM (XC8-2944) Диспетчер лицензий, используемый с компилятором, был обновлен и теперь более отзывчив при проверке сведений о лицензии компилятора.
TrampОлинованные вызовы (XC8-2760) Теперь компилятор может выполнять замену длинных инструкций вызова более короткими относительными вызовами, когда относительные формы инструкций обычно находятся вне диапазона их назначения. В этой ситуации компилятор попытается заменить инструкциями для вызова rcall инструкцию, которая будет 'trampoline' выполнение по требуемому адресу, напримерampле: джмп
перезвонить трamp_foo ;вызывается foo
…
перезвонить трamp_фу
…
tramp_фу:
джмп фу
Эта оптимизация, наряду с аналогичными оптимизациями выполнения программы, управляется параметром -mrelax.
3.2. Версия 2.40
Поддержка новых устройств Теперь доступна поддержка следующих компонентов AVR: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32 и AVR64EA48.
Улучшенная процедурная абстракция Инструмент оптимизации процедурной абстракции (PA) был улучшен таким образом, что код, содержащий инструкцию вызова функции (/), можно выделить. Это произойдет только в том случае, если стек не используется для передачи аргументов или получения возвращаемого значения из функции. Стек используется при вызове функции с переменным списком аргументов или при вызове функции, которая принимает больше аргументов, чем предназначено для этой цели регистров. Эта функция может быть отключена с помощью опции, или процедурная абстракция может быть полностью отключена для объектного файла или функции с помощью - и, соответственно, или путем выборочного использования атрибута (спецификатора) с функциями.
mno-pa-наброски-звонки -mno-pa-on-file -mno-pa-on-function nopa Макрос покрытия кода Теперь компилятор определяет макрос, если указан допустимый параметр __nopa __CODECOV -mcodecov.
Параметр резервирования памяти Драйвер теперь будет принимать параметр xc8-cc -mreserve=space@start:end при сборке для целей AVR. Эта опция резервирует указанный диапазон памяти в пространстве памяти данных или программы, не позволяя компоновщику заполнять код или объекты в этой области. Умный интеллектуальный ввод-вывод Несколько улучшений были внесены в функции интеллектуального ввода-вывода, в том числе общие настройки основного кода printf, трактовка спецификатора преобразования %n как независимого варианта, связывание в подпрограммах vararg pop по запросу, использование более коротких типов данных, где это возможно, для обработки Аргументы функции ввода-вывода и учет общего кода в обработке ширины поля и точности. Это может привести к значительной экономии кода и данных, а также увеличить скорость выполнения операций ввода-вывода.
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), который указывает, какой раздел памяти программ размером 32 КБ будет отображаться в памяти данных. Новая опция – mconst-data-in-config-mapped-progmem может быть использована для того, чтобы компоновщик поместил все константные данные в один раздел размером 32 КБ и автоматически инициализировал соответствующий регистр SFR, чтобы гарантировать, что эти данные отображаются в память данных. пространство, где к нему будет доступ более эффективно.
Унифицированные стандартные библиотеки Microchip Все компиляторы MPLAB XC будут совместно использовать унифицированную стандартную библиотеку Microchip, которая теперь доступна в этом выпуске MPLAB XC8. Руководство пользователя компилятора C MPLA# XC8 для MCU AVO больше не включает документацию по этим стандартным функциям. Эту информацию теперь можно найти в Справочном руководстве по унифицированной стандартной библиотеке Microchip. Обратите внимание, что некоторые функции, ранее определенные avr-libc, больше не доступны. (См. Функциональность Lila.)
Smart I0 Как часть новых унифицированных библиотек, функции I0 в семействах printf и scanf теперь настраиваются для каждой сборки в зависимости от того, как эти функции используются в программе. Это может существенно сократить ресурсы, используемые программой.
Параметр помощи Smart ICI При анализе вызовов интеллектуальных функций I0 (таких как print f() или scanf()) компилятор не всегда может определить из строки формата или вывести из аргументов те спецификаторы преобразования, которые требуются для вызова. Раньше компилятор всегда не делал никаких предположений и гарантировал, что 10 полнофункциональных функций будут связаны с окончательным образом программы. Была добавлена новая опция – msmart-io-format=fmt, чтобы вместо этого пользователь мог информировать компилятор о спецификаторах преобразования, используемых интеллектуальными функциями I0, использование которых неоднозначно, что предотвращает связывание чрезмерно длинных 10 подпрограмм. (Дополнительную информацию см. в разделе Опция smart-io-format.)
Размещение пользовательских разделов Ранее параметр -W1, –section-start помещал указанный раздел по запрошенному адресу только тогда, когда сценарий компоновщика определял выходной раздел с тем же именем. Когда это было не так, секция размещалась по адресу, выбранному компоновщиком, и эта опция по существу игнорировалась. Теперь этот параметр будет учитываться для всех настраиваемых разделов, даже если скрипт компоновщика не определяет этот раздел. Обратите внимание, однако, что для стандартных разделов, таких как . текст, . бсс или . данных, распределитель наилучшего соответствия по-прежнему будет иметь полный контроль над их размещением, и этот параметр не будет иметь никакого эффекта. Используйте параметр -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. Он работает путем подавления вывода данных копирования и очистки символов 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, который автоматически включается , был обновлен. Этот заголовок содержит прототипы для всех встроенных функций, таких как встроенный_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) ) может использоваться для исключения конкретной функции из анализа покрытия.
Описание устройства fileс Новое устройство 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.
Константные объекты в памяти программы Теперь компилятор может размещать константные объекты во флэш-памяти программы, а не в ОЗУ. Компилятор был модифицирован таким образом, что глобальные данные с указанием const хранятся во флэш-памяти программ, и к этим данным можно получить прямой и косвенный доступ с помощью соответствующих инструкций программной памяти. Эта новая функция включена по умолчанию, но ее можно отключить с помощью параметра -mno-const-data-in-progmem. Для архитектур avrxmega3 и avrtiny эта функция не требуется и всегда отключена, так как программная память отображается в адресное пространство данных для этих устройств.
Standard for free Нелицензионные (бесплатные) версии этого компилятора теперь допускают оптимизацию вплоть до уровня 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 Interface, что упрощает перенос исходного кода на все компиляторы MPLAB XC. Параметр -mext=cci запрашивает эту функцию, позволяя использовать альтернативный синтаксис для многих языковых расширений.
Новый драйвер библиотеки Новый драйвер библиотеки расположен над предыдущим библиотекой PIC и библиотекой AVR avr-ar. Этот драйвер принимает параметры в стиле GCC-архиватора, которые либо транслируются, либо передаются исполняемому библиотекарю. Новый драйвер позволяет использовать аналогичный набор параметров с аналогичной семантикой для создания или управления любой библиотекой PIC или AVR. file и, таким образом, это рекомендуемый способ вызова библиотекаря. Если это требуется для устаревших проектов, предыдущий библиотекарь можно вызвать напрямую, используя параметры старого стиля, принятые в более ранних версиях компилятора.
Проблемы с миграцией
Ниже перечислены функции, которые теперь по-разному обрабатываются компилятором. Эти изменения могут потребовать модификации вашего исходного кода при переносе кода на эту версию компилятора. Номер версии в подзаголовках указывает на первую версию компилятора, поддерживающую последующие изменения.
4.1. Версия 2.41
Удалены неточные функции fma (XC8-2913) Стандартная библиотека C99 fma 0 -family functions ( ) не вычислял умножение-сложение с бесконечной точностью для одного округления, а вместо этого накапливал ошибки округления с каждой операцией. Эти функции были удалены из поставляемой библиотеки.
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. умный 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
Константные объекты в программной памяти Обратите внимание, что по умолчанию константные объекты будут размещены и доступны в программной памяти (как описано hue). Это повлияет на размер и скорость выполнения вашего проекта, но должно уменьшить использование оперативной памяти. При необходимости эту функцию можно отключить с помощью параметра -mnoconst-data-in-progmem.
4.6. Версия 2.00
Предохранители конфигурации. Предохранители конфигурации устройства теперь можно запрограммировать с помощью прагмы конфигурации, за которой следуют пары «настройка-значение», чтобы указать состояние предохранителя, например.
#pragma config WDTON = SET
#pragma config BODLEVEL = BODLEVEL_4V3
Абсолютные объекты и функции Объекты и функции теперь можно размещать по определенному адресу в памяти, используя спецификатор CCI (адрес), напримерampль:
#включать
интервал foobar_at (0x800100);
char __at(0x250) getID(целое смещение) { … }
Аргумент этого спецификатора должен быть константа, представляющая адрес, по которому будет помещен первый байт или инструкция. Адреса ОЗУ указываются с использованием смещения 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, и для него будет установлено значение 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-config- функция mapped-progmem была автоматически отключена, что было не совсем правильно. Функция const-data-in-config-mapped-progmem теперь полностью отключена в этой ситуации.
Изменения в DFP для корректного доступа к NVMCTRL (XC8-2848) Код запуска во время выполнения, используемый устройствами AVR64EA, не учитывал, что регистр NVMCTRL находится под защитой от изменения конфигурации (CCP), и не мог установить SFR I0 на страницу, используемую программой const-data-in-configmapped-progmem. особенность компилятора. Изменения, внесенные в AVR-Ex_DFP версии 2.2.55, позволят коду запуска во время выполнения корректно записывать в этот регистр.
Изменения DFP, чтобы избежать отображение флэш-памяти (XC8-2847) Реализован обходной путь для проблемы с функцией устройства отображения флэш-памяти, описанной в Silicon Errata AVR128DA28/32/48/64 (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(), вызывало сообщения об ошибках от ассемблера. Эта комбинация невозможна.
Ошибка функции Variadic с аргументами указателя (XC8-2755, XC8-2731) Функции с переменным числом аргументов ожидают передачи 24-битных (типа memx) указателей в списке переменных аргументов, когда включена функция const-data-in-progmem. Аргументы, которые были указателями на память данных, передавались как 16-битные объекты, вызывая сбой кода при их окончательном чтении. Когда функция constdata-in-programme включена, все аргументы 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) -W1, параметр --section-start молча не мог разместить разделы по назначенному начальному адресу. Эта проблема была исправлена для всех разделов с пользовательскими именами; однако он не будет работать для любых стандартных разделов, таких как . текст или . bss, который необходимо разместить с помощью опции -W1, -T.
Компоновщик аварийно завершает работу при расслаблении (XC8-2647) Когда была включена оптимизация -mrelax и были участки кода или данных, которые не помещались в доступную память, компоновщик аварийно завершал работу. Теперь в таком случае вместо этого выдаются сообщения об ошибках.
Без отката (XC8-2646) Опция –nofallback не была правильно реализована и не задокументирована. Теперь это можно выбрать, чтобы гарантировать, что компилятор не вернется к более низкому параметру оптимизации, если компилятор не лицензирован, и вместо этого выдаст ошибку.
Неправильная оптимизация скорости (X03-2637) Оптимизация процедурной абстракции включалась при выборе оптимизации уровня 3 (-03). Эти оптимизации уменьшают размер кода за счет скорости кода, поэтому их не следовало выполнять.
Плохая ЭСППЗУ доступ (XC8-2629) Процедура 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 компилятор мог остановиться с file ошибка not found, если командная строка была очень большой и содержала специальные символы, такие как кавычки, обратную косую черту и т. д.
Неназначенный раздел родата (XC8-1920) Компоновщику AVR не удалось выделить память для пользовательских разделов родата при сборке для архитектур 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 могла возникнуть внутренняя ошибка компилятора при оптимизации кода.
Переполнение ОЗУ не обнаружено (XC8-1800, XC8-1796) Программы, превышающие доступный объем ОЗУ, в некоторых ситуациях не обнаруживались компилятором, что приводило к сбою кода во время выполнения.
Отсутствует флэш-память (XC8-1792) Для устройств avrxmega3 и avrtiny части флэш-памяти могли остаться незапрограммированными MPLAB X. ЯД.
Ошибка выполнения main (XC8-1788) В некоторых ситуациях, когда в программе не были определены глобальные переменные, код запуска среды выполнения не завершался, и функция main ( ) никогда не была достигнута.
Неверная информация о памяти (XC8-1787) Для устройств avrxmega3 и avrtiny программа avr-size сообщала, что данные только для чтения потребляют ОЗУ, а не программную память.
Неверное чтение памяти программы (XC8-1783) Проекты, скомпилированные для устройств с программной памятью, отображаемой в адресное пространство данных, и определяющие объекты с помощью макроса/атрибута PROGMEM, могли считать эти объекты с неправильного адреса.
Внутренняя ошибка с атрибутами (XC8-1773) Произошла внутренняя ошибка, если вы определили объекты-указатели с
_at() или attribute() между именем указателя и разыменованным типом, напримерampле, символ *
_at (0x800150) ср; Теперь при обнаружении такого кода выдается предупреждение.
Ошибка выполнения main (XC8-1780, XC8-1767, XC8-1754) Использование переменных EEPROM или определение фьюзов с помощью прагмы config могло вызвать неверную инициализацию данных и/или заблокировать выполнение программы в коде запуска среды выполнения до достижения main().
Ошибка предохранителя с крошечными устройствами (XC8-1778, XC8-1742) Устройства attiny4/5/9/10/20/40 имели неправильную длину предохранителя, указанную в их заголовке. file, которые приводят к ошибкам компоновщика при попытке построить код, определяющий фьюзы.
Сегментация ошибка (XC8-1777) Исправлена прерывистая ошибка сегментации.
Сбой ассемблера (XC8-1761) Ассемблер avr-as мог давать сбой при запуске компилятора под Ubuntu 18.
Объекты не очищены (XC8-1752) Неинициализированные объекты длительности статического хранения могли не быть очищены кодом запуска среды выполнения.
Конфликтующая спецификация устройства игнорируется (XC8-1749) Компилятор не выдавал ошибку при использовании нескольких опций спецификации устройства и указании разных устройств.
Повреждение памяти кучей (XC8-1748) Символ _heap_start устанавливался неправильно, что приводило к возможности повреждения обычных переменных кучей.
Ошибка перемещения компоновщика (XC8-1739) Ошибка перемещения компоновщика могла возникнуть, если код содержал rjmp или rcall с целью, удаленной ровно на 4 КБ.
5.6. Версия 2.00
Никто.
Известные проблемы
Ниже приведены ограничения в работе компилятора. Это могут быть общие ограничения кодирования или отклонения от информации, содержащейся в руководстве пользователя. Ярлыки в квадратных скобках в заголовке — это идентификация этой проблемы в базе данных отслеживания. Это может быть полезно, если вам нужно связаться со службой поддержки. Те элементы, которые не имеют ярлыков, являются ограничениями, описывающими методы работы и, вероятно, останутся в силе навсегда.
6.1. MPLAB X IDE Интеграция
MPLAB-IDE-среда разработки интеграция Если компилятор будет использоваться из MPLAB IDE, то вы должны установить MPLAB IDE перед установкой компилятора.
6.2 Генерация кода
Segfault с параметром section-anchors (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) Когда объект был сделан абсолютным по адресу в начале ОЗУ, а также были определены неинициализированные объекты, может возникнуть ошибка компоновщика.
Короткие идентификаторы пробуждения (XC8-2775) Для устройств ATA5700/2 регистры PHIDO/1 определены только как имеющие ширину 16 бит, а не 32 бита.
Сбой компоновщика при вызове символа (XC8-2758) Компоновщик может аварийно завершить работу, если параметр драйвера -mrelax используется, когда исходный код вызывает символ, определенный с помощью параметра компоновщика -cc., –def 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 и "спецификацией", file существует для выбранного устройства, компилятор не сообщает об отсутствующем пакете семейства устройств, а вместо этого выбирает «спецификацию». file, что может привести к недопустимому выводу. «Спецификация» files могут быть устаревшими для распространяемых DFP и предназначены только для внутреннего тестирования компилятора.
Перекрытие памяти не обнаружено (XC8-1966) Компилятор не обнаруживает перекрытия в памяти объектов, сделанных абсолютными по адресу (посредством _at()), и других объектов, использующих спецификатор section() и связанных с тем же адресом.
Сбой с библиотечными функциями и _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 КБ; тем не менее, известны случаи, когда компоновщик прерывает работу без ослабления и без полезного сообщения об ошибке, вместо того, чтобы генерировать необходимые заглушки функций при использовании параметра -mre lax.
Ограничения пространства имен (AVRTC-733) Именованные адресные пространства поддерживаются цепочкой инструментов с учетом ограничений, упомянутых в разделе руководства пользователя «Особые квалификаторы типов».
Часовые пояса библиотечные функции предполагают 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 Программное обеспечение для разработки компиляторов, Программное обеспечение для разработки компиляторов, Программное обеспечение для разработки, Программное обеспечение |




