Программное обеспечение компилятора MICROCHIP MPLAB XC8 C 

Программное обеспечение компилятора MICROCHIP MPLAB XC8 C

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

Содержание скрывать

Надview

Введение

Этот выпуск компилятора Microchip MPLAB® XC8 C содержит несколько новых функций, исправления ошибок и поддержку новых устройств.

Дата постройки

Официальная дата сборки этой версии компилятора — 3 июля 2022 года.

Предыдущая версия

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

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

Руководство по функциональной безопасности для компиляторов MPLAB XC доступно в пакете документации при покупке лицензии на функциональную безопасность.

Лицензии и версии компонентов

Инструменты MPLAB® XC8 C Compiler для микроконтроллеров AVR написаны и распространяются под Стандартной общественной лицензией GNU (GPL), что означает, что его исходный код свободно распространяется и доступен для общественности. Исходный код инструментов под лицензией GNU GPL можно загрузить отдельно с веб-сайта Microchip. webсайт. Вы можете прочитать GNU GPL в file named находится в подкаталоге вашего установочного каталога. Общее обсуждение принципов, лежащих в основе GPL, можно найти здесь. Код поддержки, предоставленный для заголовка files, скрипты компоновщика и библиотеки времени выполнения являются проприетарным кодом и не подпадают под действие GPL.

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

Системные требования

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

Если вы используете сетевой сервер лицензий, для размещения сервера лицензий можно использовать только компьютеры с операционными системами, поддерживаемыми компиляторами. Начиная с xclm версии 2.0, сервер сетевых лицензий можно установить на платформе Microsoft Windows Server, но сервер лицензий не обязательно должен работать на серверной версии операционной системы.

Поддерживаемые устройства

Этот компилятор поддерживает все 8-битные микроконтроллеры AVR, известные на момент выпуска. См. (в каталоге документации компилятора) список всех поддерживаемых устройств. Эти files также перечисляет настройки битов конфигурации для каждого устройства.

Редакции и обновления лицензий

Компилятор MPLAB XC8 можно активировать как лицензионный (PRO) или нелицензионный (Free) продукт. Вам необходимо приобрести ключ активации, чтобы лицензировать ваш компилятор. Лицензия обеспечивает более высокий уровень оптимизации по сравнению с бесплатным продуктом. Нелицензионный компилятор может работать неограниченно долго без лицензии.

Компилятор функциональной безопасности MPLAB XC8 должен быть активирован с помощью лицензии на функциональную безопасность, купленной у Microchip. Компилятор не будет работать без этой лицензии. После активации вы можете выбрать любой уровень оптимизации и использовать все возможности компилятора. Этот выпуск компилятора функциональной безопасности MPLAB XC поддерживает лицензию сетевого сервера.
См. документ Установка и лицензирование компиляторов MPLAB XC C (DS50002059) для получения информации о типах лицензий и установке компилятора с лицензией.

Установка и активация

См. также разделы «Вопросы миграции» и «Ограничения» для получения важной информации о последнем менеджере лицензий, входящем в состав этого компилятора.
Если вы используете MPLAB IDE, обязательно установите последнюю версию MPLAB X IDE версии 5.0 или выше перед установкой этого инструмента. Выйдите из IDE перед установкой компилятора. Запустите приложение-установщик компилятора .exe (Windows), .run (Linux) или app (macOS), например XC8-1.00.11403-windows.exe, и следуйте инструкциям на экране.
Рекомендуется каталог установки по умолчанию. Если вы используете Linux, вы должны установить компилятор с помощью терминала и из учетной записи root. Установка с использованием учетной записи macOS с правами администратора.

Активация теперь осуществляется отдельно от установки. Дополнительную информацию см. в документе Менеджер лицензий для компиляторов MPLAB® XC C (DS52059).

Если вы решите запустить компилятор под оценочной лицензией, теперь вы получите предупреждение во время компиляции, когда до окончания ознакомительного периода останется не более 14 дней. Такое же предупреждение выдается, если вы находитесь в течение 14 дней после окончания подписки HPA.

XC Network License Server — это отдельная программа установки, которая не включена в программу установки однопользовательского компилятора.

XC License Manager теперь поддерживает перемещение плавающих сетевых лицензий. Эта функция, предназначенная для мобильных пользователей, позволяет отключать плавающую лицензию от сети на короткий период времени. Используя эту функцию, вы можете отключиться от сети и по-прежнему использовать компилятор MPLAB XC. Дополнительные сведения об этой функции см. в папке doc установки XCLM. В MPLAB X IDE есть окно «Лицензии» («Инструменты» > «Лицензии») для визуального управления роумингом.

Решение проблем с установкой

Если у вас возникли трудности с установкой компилятора в любой из операционных систем Windows, попробуйте следующие предложения.

  • Запустите установку от имени администратора.
  • Установите разрешения приложения-установщика на «Полный доступ». (щелкните правой кнопкой мыши file, выберите Свойства, вкладка Безопасность, выберите пользователя, отредактируйте.)
  • Установите разрешения временной папки на «Полный доступ!

Чтобы определить расположение временной папки, введите %temp% в команду «Выполнить» (клавиша с логотипом Windows + R). Это откроет file диалоговое окно проводника, показывающее этот каталог, и позволит вам определить путь к этой папке.

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

Руководства пользователя компилятора можно открыть с HTML-страницы, которая открывается в вашем браузере при нажатии синей кнопки справки на панели инструментов MPLAB X IDE, как показано на снимке экрана.

Документация компилятора
Если вы выполняете сборку для 8-разрядных целей AVR, руководство пользователя MPLAB® XC8 C Compiler для AVR® MCU содержит информацию о тех параметрах и функциях компилятора, которые применимы к этой архитектуре.

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

Microchip приветствует сообщения об ошибках, предложения или комментарии относительно этой версии компилятора. Пожалуйста, направляйте любые сообщения об ошибках или запросы функций через систему поддержки.

Обновления документации

Актуальные онлайн-версии документации MPLAB XC8 можно найти в онлайн-технической документации Microchip. webсайт.

Новая или обновленная документация AVR в этом выпуске:

  • Уведомление об авторских правах MUSL
  • Установка и лицензирование компиляторов MPLAB XC C (редакция M)
  • Руководство пользователя MPLAB XC8 для разработчиков встраиваемых систем — микроконтроллеры AVR (редакция A)
  • Руководство пользователя MPLAB XC8 C Compiler для AVR MCU (редакция F)
  • Справочное руководство по унифицированной стандартной библиотеке Microchip (редакция B)

Справочное руководство по унифицированной стандартной библиотеке Microchip описывает поведение и интерфейс функций, определенных в унифицированной стандартной библиотеке Microchip, а также предполагаемое использование типов библиотек и макросов. Часть этой информации ранее содержалась в Руководстве пользователя MPLAB® XC8 C Compiler для AVR® MCU. Информация о библиотеке для конкретного устройства по-прежнему содержится в этом руководстве по компилятору.

Если вы только начинаете работать с 8-битными устройствами и компилятором C MPLAB XC8, в Руководстве пользователя MPLAB® XC8 для разработчиков встраиваемых систем — микроконтроллеры AVR® (DS50003108) содержится информация о настройке проектов в среде MPLAB X IDE и написании кода. для вашего первого проекта MPLAB XC8 C. Это руководство теперь распространяется вместе с компилятором.

Руководство пользователя Hamate было включено в каталог docs в этом выпуске. Это руководство предназначено для тех, кто использует Hamate как отдельное приложение.

Что нового

Ниже приведены новые целевые функции AVR, которые теперь поддерживает компилятор. Номер версии в подзаголовках указывает на первую версию компилятора, поддерживающую следующие функции.

Версия 2.40

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

Макрос покрытия кода Теперь компилятор определяет макрос __CODECOV, если указан допустимый параметр mcodecov.

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

Умный интеллектуальный ввод-вывод Несколько улучшений были внесены в функции Smart IO, в том числе общие настройки основного кода printf, обработка спецификатора преобразования %n как независимого варианта, связывание в подпрограммах vararg pop по запросу, использование более коротких типов данных, где это возможно, для обработки аргументов функции ввода-вывода. , а также учет общего кода в обработке ширины поля и точности. Это может привести к значительной экономии кода и данных, а также увеличить скорость выполнения операций ввода-вывода.

Версия 2.39 (версия функциональной безопасности)

Лицензия на сетевой сервер Этот выпуск компилятора функциональной безопасности MPLAB XC8 поддерживает лицензию сетевого сервера.

Версия 2.36

Никто.

Версия 2.35

Поддержка новых устройств Поддержка доступна для следующих частей AVR: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 и AVR64DD32.

Улучшенное переключение контекста Новая опция -mcall-isr-prologues изменяет то, как функции прерывания сохраняют регистры при входе и как эти регистры восстанавливаются при завершении процедуры обработки прерывания. Он работает аналогично параметру -mcall-prologues, но влияет только на функции прерывания (ISR).

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

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

Унифицированные стандартные библиотеки Microchip Все компиляторы MPLAB XC будут использовать общую стандартную библиотеку Microchip Unified Standard Library, которая теперь доступна в этом выпуске MPLAB XC8. Руководство пользователя MPLAB® XC8 C Compiler/или AVR® MCU больше не включает документацию по этим стандартным функциям. Эту информацию теперь можно найти в Справочном руководстве по унифицированной стандартной библиотеке Microchip. Обратите внимание, что некоторые функции, ранее определенные avr-libc, больше не доступны. (См. Библиотекарь):'. ФУНКЦИОНАЛЬНОСТЬ…)

Умный ввод-вывод В рамках новых унифицированных библиотек функции ввода-вывода в семействах печати и сканирования теперь настраиваются для каждой сборки в зависимости от того, как эти функции используются в программе. Это может существенно сократить ресурсы, используемые программой.
Вариант помощи Smart IO При анализе вызовов интеллектуальных функций ввода-вывода (таких как printf() или scanf()) компилятор не всегда может определить из строки формата или вывести из аргументов те спецификаторы преобразования, которые требуются вызову. Раньше компилятор всегда не делал никаких предположений и гарантировал, что полнофункциональные функции ввода-вывода будут связаны с окончательным образом программы. Добавлена ​​новая опция – msmart-io-format=fmt, чтобы вместо этого пользователь мог информировать компилятор о спецификаторах преобразования, используемых интеллектуальными функциями ввода-вывода, использование которых неоднозначно, что предотвращает связывание чрезмерно длинных подпрограмм ввода-вывода. (Дополнительную информацию см. в разделе Опция smart-io-format.)

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

Версия 2.32

Руководство по стеку Доступная с лицензией компилятора PRO, функция компилятора стека может использоваться для оценки максимальной глубины любого стека, используемого программой. Он строит и анализирует граф вызовов программы, определяет использование стека каждой функцией и создает отчет, из которого можно сделать вывод о глубине стеков, используемых программой. Эта функция включается с помощью параметра командной строки -mchp-stack-usage. Сводка использования стека распечатывается после выполнения. Подробный отчет о стеке доступен на карте file, который можно запросить обычным способом.

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

Поддержка убранных устройств больше не доступен для следующих компонентов AVR: AVR16DA28, AVR16DA32 и AVR16DA48.

Версия 2.31

Никто.

Версия 2.30

Новая опция для предотвращения инициализации данных Новая опция драйвера -mno-data-ini t предотвращает инициализацию данных и очистку разделов bss. Он работает путем подавления вывода символов do_copy_data и do_clear_bss в сборке. files, что, в свою очередь, предотвратит включение этих подпрограмм компоновщиком.

Усовершенствованная оптимизация Внесен ряд улучшений оптимизации, в том числе удаление избыточных инструкций возврата, удаление некоторых переходов после инструкции пропуска, если бит есть, а также улучшенная процедурная абстракция и возможность повторять этот процесс.

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

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

Поддержка убранных устройств Больше не поддерживается поддержка следующих компонентов AVR: ATA5272, ATA5790, ATA5790N,ATA5791,ATA5795,ATA6285,ATA6286,ATA6612C,ATA6613C,ATA6614Q, ATA6616C, ATA6617C и ATA664251.

Версия 2.29 (версия функциональной безопасности)

Заголовок file для встроенных модулей компилятора Чтобы убедиться, что компилятор может соответствовать языковым спецификациям, таким как MISRA, заголовок file, который автоматически включается , был обновлен. Этот заголовок содержит прототипы для всех встроенных функций, таких как _buil tin_avrop() и _buil tin_avr delay_cycles(). Некоторые встроенные функции могут быть несовместимы с MISRA; их можно опустить, добавив в командную строку компилятора определение _Xe_ STRICT_ MISRA. Встроенные модули и их объявления были обновлены для использования типов с фиксированной шириной.

Версия 2.20

Поддержка новых устройств Поддержка доступна для следующих компонентов AVR: ATTINY1624, ATTINY1626 и ATTINY1627.

Лучшее оптимальное распределение Распределитель наилучшего соответствия (BFA) в компиляторе был улучшен, так что разделы размещаются в порядке, обеспечивающем лучшую оптимизацию. BFA теперь поддерживает именованные адресные пространства и лучше обрабатывает инициализацию данных.

Улучшенная процедурная абстракция Оптимизация процедурной абстракции теперь выполняется на большем количестве последовательностей кода. Предыдущие ситуации, когда эта оптимизация могла привести к увеличению размера кода, были устранены путем информирования кода оптимизации о процессе сборки мусора компоновщика.

Отсутствие ассемблера AVR Ассемблер AVR больше не входит в этот дистрибутив.

Версия 2.19 (версия функциональной безопасности)

Никто.

Версия 2.10

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

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

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

Версия 2.05

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

Версия 2.00

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

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

Новый драйвер библиотекаря Новый драйвер библиотеки расположен над предыдущим библиотекой PIC и библиотекой AVR avr-ar. Этот драйвер принимает параметры в стиле GCC-архиватора, которые либо транслируются, либо передаются исполняемому библиотекарю. Новый драйвер позволяет использовать аналогичный набор параметров с аналогичной семантикой для создания или управления любой библиотекой PIC или AVR. file и, таким образом, это рекомендуемый способ вызова библиотекаря. Если это требуется для устаревших проектов, предыдущий библиотекарь можно вызвать напрямую, используя параметры старого стиля, принятые в более ранних версиях компилятора.

Проблемы с миграцией

Ниже перечислены функции, которые теперь по-разному обрабатываются компилятором. Эти изменения могут потребовать модификации вашего исходного кода при переносе кода на эту версию компилятора. Номер версии в подзаголовках указывает на первую версию компилятора, поддерживающую последующие изменения.

Версия 2.40

Никто.

Версия 2.39 (версия функциональной безопасности)

Никто.

Версия 2.36

Никто.

Версия 2.35

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

Несоответствующая оптимизация скорости Оптимизация процедурной абстракции включалась при выборе оптимизации уровня 3 (-03). Эти оптимизации уменьшают размер кода за счет скорости кода, поэтому их не следовало выполнять. Проекты, использующие этот уровень оптимизации, могут иметь различия в размере кода и скорости выполнения при построении с помощью этого выпуска.

Функционал библиотеки Код для многих стандартных функций библиотеки C теперь берется из унифицированной стандартной библиотеки Microchip, которая в некоторых обстоятельствах может вести себя иначе, чем в прежней библиотеке avr-libc. Для бывшегоample, больше не нужно связываться с библиотекой lprintf_flt (опция -print _flt), чтобы включить поддержку форматированного ввода-вывода для спецификаторов формата float. Функции интеллектуального ввода-вывода унифицированной стандартной библиотеки Microchip делают эту опцию избыточной. Кроме того, использование подпрограмм с суффиксом _p для строк и функций памяти (например, strcpy_P() и т. д.), которые работают с константными строками во флэш-памяти, больше не требуется. Стандартные подпрограммы C (например, strcpy()) будут корректно работать с такими данными, если включена функция const-data-in-program-memory.

Версия 2.32

Никто.

Версия 2.31

Никто.

Версия 2.30

Никто.

Версия 2.29 (версия функциональной безопасности)

Никто.

Версия 2.20

Изменен макет DFP Теперь компилятор предполагает другой макет, используемый DFP (пакетами семейства устройств). Это будет означать, что более старый DFP может не работать с этим выпуском, а более старые компиляторы не смогут использовать последние DFP.

Версия 2.19 (версия функциональной безопасности)

Никто.

Версия 2.10

Никто

Версия 2.05

Константные объекты в памяти программ Обратите внимание, что по умолчанию объекты с квалификатором const будут размещены и доступны в памяти программы (как описано здесь). Это повлияет на размер и скорость выполнения вашего проекта, но должно уменьшить использование оперативной памяти. При необходимости эту функцию можно отключить с помощью параметра -mnoconst-da ta-in-progmem.

Версия 2.00

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

Исправленные проблемы

Ниже приведены исправления, которые были внесены в компилятор. Они могут исправить ошибки в сгенерированном коде или изменить работу компилятора на ту, которая была задумана или указана в руководстве пользователя. Номер версии в подзаголовках указывает на первую версию компилятора, содержащую исправления для последующих проблем. Ярлыки в квадратных скобках в заголовке — это идентификация этой проблемы в базе данных отслеживания. Это может быть полезно, если вам нужно связаться со службой поддержки.

Обратите внимание, что некоторые проблемы, связанные с устройством, исправлены в пакете семейства устройств (DFP), связанном с устройством. См. диспетчер пакетов MPLAB для получения информации об изменениях, внесенных в DFP, и для загрузки последних пакетов.

Версия 2.40

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

Версия 2.39 (версия функциональной безопасности)

Никто.

Версия 2.36

Ошибка при задержке (XCS-2774) Незначительные изменения в оптимизации свободного режима по умолчанию предотвратили постоянное свертывание выражений операндов во встроенные функции задержки, в результате чего они обрабатывались как неконтакты и вызывали ошибку: _buil tin avr delay_ cycles ожидает компиляции целочисленная постоянная времени.

Версия 2.35

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

Версия 2.32

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

Версия 2.31

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

Версия 2.30

Глобальные метки неуместны после выделения (XCS-2299) Написанный от руки ассемблерный код, который размещает глобальные метки в последовательности сборки, которые выделяются процедурной абстракцией, возможно, не был правильно перемещен.
Расслабляющая авария (XCS-2287) Использование параметра -merlad могло привести к сбою компоновщика, когда оптимизация релаксации хвостового перехода пыталась удалить инструкцию ret, которая не находилась в конце раздела.
Сбой при оптимизации меток как значений (XCS-2282) Код, использующий расширение языка GNU C «Метки как значения», мог вызвать сбой оптимизации процедурной абстракции с ошибкой исправления диапазона Outlined VMA.
Не такой уж и постоянный (XCS-2271) Прототипы для запуска() и других функций из больше не указывать нестандартный квалификатор стоимости для возвращаемых строковых указателей, когда функция -monist-data в программе отключена. Обратите внимание, что на устройствах avrxmega3 и avertin эта функция включена постоянно.
Потерянные инициализаторы (XCS-2269) Когда в секцию было помещено более одной переменной в единице перевода (используя секцию или атрибут ((раздел))), и первая такая переменная была инициализирована нулем или не имела инициализатора, инициализаторы для других переменных в той же единице перевода которые были помещены в тот же раздел, были потеряны.

Версия 2.29 (версия функциональной безопасности)

Никто.

Версия 2.20

Ошибка с длинными командами (XCS-1983) При использовании цели AVR компилятор мог остановиться с file ошибка not found, если командная строка была очень большой и содержала специальные символы, такие как кавычки, обратную косую черту и т. д.
Неназначенный раздел родата (XCS-1920) Компоновщику AVR не удалось выделить память для пользовательских разделов родата при сборке для архитектур avrxmega3 и avrtiny, что может привести к ошибкам перекрытия памяти.

Версия 2.19 (версия функциональной безопасности)

Никто.

Версия 2.10

Сбои перемещения (XCS-1891) Лучше всего подходящий распределитель оставлял «дыры» в памяти между секциями после релаксации компоновщика. Помимо фрагментации памяти, это увеличило вероятность сбоев перемещения компоновщика, связанных с переходами относительно ПК или вызовами, выходящими за пределы допустимого диапазона.
Инструкции, не преобразованные релаксацией (XCS-1889) Релаксация линкера не происходила для инструкций перехода или вызова, цели которых становятся достижимыми при ослаблении.
Отсутствующий функциональность (XCSE-388) Несколько определений из , такие как clock_div_t и clock_prescale_set(), не были определены для устройств, включая ATmega324PB, ATmega328PB, ATtiny441 и ATtiny841.
Отсутствующие макросы Макросы препроцессора_ xcs _MODE_, _xcs VERSION, _xc и xcs не определялись автоматически компилятором. Теперь они доступны.

Версия 2.05

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

Версия 2.00

Никто.

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

Ниже приведены ограничения в работе компилятора. Это могут быть общие ограничения кодирования или
отклонения от информации, содержащейся в руководстве пользователя. Ярлыки в квадратных скобках в заголовке — это идентификация этой проблемы в базе данных отслеживания. Это может быть полезно, если вам нужно связаться со службой поддержки. Те элементы, которые не имеют меток, являются ограничениями, которые описывают режим работы и которые, вероятно, останутся в силе навсегда.

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

Интеграция с MPLAB IDE Если компилятор будет использоваться из MPLAB IDE, вы должны установить MPLAB IDE перед установкой компилятора.

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

Ошибка выделения памяти PA (XCS-2881) При использовании оптимизаторов процедурной абстракции компоновщик может сообщать об ошибках выделения памяти, когда размер кода близок к объему доступной программной памяти на устройстве, даже если программа должна соответствовать доступному пространству.
Не такой умный Smart-IO (XCS-2872) Функция smart-io компилятора будет генерировать допустимый, но неоптимальный код для функции sprint, если функция Coast-Data-In-Proem отключена или если вся флэш-память устройства отображается в память данных.
Еще менее умный Smart-IO (XCS-2869) Функция компилятора smart-io будет генерировать допустимый, но неоптимальный код, когда используются обе опции -floe и -fno-buil tin.
Неоптимальное размещение данных только для чтения (XCS-2849) Компоновщик в настоящее время не знает о разделах памяти APPCODE и APPDATA, а также о разделах [No-]Read-While-Write в карте памяти. В результате существует небольшая вероятность того, что компоновщик может выделить данные только для чтения в неподходящей области памяти. Вероятность неправильного размещения данных увеличивается, если включена функция Coast-Data-In-Pragma, особенно если также включена функция Coast-data-in-config-mapped-proem. При необходимости эти функции можно отключить.
Объект file порядок обработки (XCS-2863) Порядок, в котором объекты files, которые будут обрабатываться компоновщиком, могут отличаться в зависимости от использования оптимизации процедурной абстракции (опция -mpa). Это повлияет только на код, который определяет слабые функции в нескольких модулях.
Ошибка компоновщика с абсолютным значением (XCS-2777) Когда объект был сделан абсолютным по адресу в начале ОЗУ, а также были определены неинициализированные объекты, может возникнуть ошибка компоновщика.
Короткие идентификаторы пробуждения (XCS-2775) Для устройств ATA5700/2 регистры PHID0/1 определены только как имеющие ширину 16 бит, а не 32 бита.
Сбой компоновщика при вызове символа (XCS-2758) Компоновщик может аварийно завершить работу, если используется параметр драйвера -merlad, когда исходный код вызывает символ, определенный с помощью параметра компоновщика -Wl, –defsym.
Неправильная инициализация (XCS-2679) Существует несоответствие между тем, где в памяти данных помещаются начальные значения для некоторых глобальных/статических объектов размером в байт, и тем, где переменные будут доступны во время выполнения.
запущен неправильно устанавливает пустой (XCS-2652) В тех случаях, когда строка темы для преобразования с помощью named () содержит число с плавающей запятой в экспоненциальном формате, а после символа e есть неожиданный символ, тогда пустой адрес, если он указан, будет указывать на символ после е, а не само е. Для бывшегоample: заявлено("хуй", пусто); приведет к пустому указателю на символ x.
Неправильные косвенные вызовы функций (XCS-2628) В некоторых случаях вызовы функций, сделанные через указатель функции, хранящийся как часть структуры, могут завершиться ошибкой.
strtof возвращает ноль для шестнадцатеричных чисел с плавающей запятой (XCS-2626) Библиотечные функции strtof() и др. и scanf() и др. всегда будут преобразовывать шестнадцатеричное число с плавающей запятой, в котором не указан показатель степени, в
нуль. Для бывшегоample: статор("Сова", &пусто); вернет значение 0, а не 1.
Неточные сообщения советника по стеку (XCS-2542, XCS-2541) В некоторых случаях предупреждение советника по стеку относительно рекурсии или неопределенного используемого стека (возможно, за счет использования alloca()) не выдается.
Сбой с повторяющимся кодом прерывания (XCS-2421) Если несколько функций прерывания имеют одно и то же тело, компилятор может иметь выходные данные для одной функции прерывания, вызывающей другую. Это приведет к ненужному сохранению всех регистров с затиранием вызовов, а прерывания будут разрешены еще до того, как будет запущен эпилог текущего обработчика прерываний, что может привести к сбою кода.
Константные объекты не находятся в памяти программы (XCS-2408) Для проектов avrxmega3 и avertins неидеализированные объекты const помещаются в память данных, даже несмотря на то, что предупреждение предполагает, что они были помещены в память программы. Это не повлияет на устройства, память программ которых не отображена в пространство памяти данных, и не повлияет ни на какой инициализируемый объект.
Неверный вывод с недопустимым путем DFP (XCS-2376) Если компилятор вызывается с недопустимым путем DFP и "спецификацией", file существует для выбранного устройства, компилятор не сообщает об отсутствующем пакете семейства устройств, а вместо этого выбирает «спецификацию». file, что может привести к недопустимому выводу. «Спецификация» files могут быть устаревшими для распространяемых DFP и предназначены только для внутреннего тестирования компилятора.
Перекрытие памяти не обнаружено (XCS-1966) Компилятор не обнаруживает перекрытие в памяти объектов, сделанных абсолютными по адресу (через at()), и других объектов, использующих спецификатор section() и связанных с одним и тем же адресом.
Сбой с библиотечными функциями и _meme (XCS-1763) Вызванные лимбические функции с плавающей запятой с аргументом в адресном пространстве _memo могут завершиться ошибкой. Обратите внимание, что библиотечные подпрограммы вызываются из некоторых операторов C, поэтому, например,ample затрагивается следующий код: return regFloatVar > memxFloatVar;
Ограниченная лимбическая реализация (AVRTC-731) Для продуктов ATTiny4/5/9/10/20/40 реализация стандартной библиотеки C/Math в лимбической системе очень ограничена или отсутствует.
Ограничения памяти программы (AVRTC-732) Набор инструментов поддерживает образы памяти программ размером более 128 КБ; тем не менее, известны случаи, когда компоновщик прерывает работу без ослабления и без полезного сообщения об ошибке, а не с созданием необходимых заглушек функций при использовании параметра -relax.
Ограничения пространства имен (AVRTC-733) Именованные адресные пространства поддерживаются цепочкой инструментов с учетом ограничений, упомянутых в разделе руководства пользователя «Особые квалификаторы типов».
Часовые пояса библиотечные функции предполагают GMT и не поддерживают местные часовые пояса, поэтому местное время () будет возвращать то же время, что и гуммит (), напримерampле.

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

file:///Приложения/микрохип/xc8/v 2 .40/docs/Read me_X C 8_ для A VR. хтм

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

Программное обеспечение компилятора MICROCHIP MPLAB XC8 C [pdf] Руководство пользователя
MPLAB XC8 C, Программное обеспечение компилятора MPLAB XC8 C, Программное обеспечение компилятора, Программное обеспечение

Ссылки

Оставьте комментарий

Ваш адрес электронной почты не будет опубликован. Обязательные поля отмечены *