6.4.1.21 Атрибуты функций MSP430
Следующие атрибуты функций поддерживаются серверной частью MSP430:
-
critical -
Критические функции отключают прерывания при входе и восстанавливают предыдущее состояние прерываний при выходе. Критические функции не могут также иметь атрибуты
naked,reentrantилиinterrupt.Аппаратное обеспечение MSP430 гарантирует, что при входе в функции
interruptпрерывания отключены, а при выходе восстанавливает предыдущее состояние прерываний. Поэтому атрибутcriticalизбыточен для функцийinterrupt. -
interrupt -
Используйте этот атрибут, чтобы указать, что заданная функция является обработчиком прерывания. При наличии этого атрибута компилятор генерирует последовательности входа в функцию и выхода из неё, подходящие для использования в обработчике прерывания.
Атрибуту interrupt можно передать аргумент, задающий имя или номер. Если аргумент является числом, он указывает слот в таблице векторов прерываний (0–31), которому следует назначить этот обработчик. Если аргумент является именем, оно рассматривается как символическое имя слота вектора. Эти имена должны соответствовать нужным записям в скрипте компоновщика. По умолчанию распознаются имена
watchdogдля вектора 26,nmiдля вектора 30 иresetдля вектора 31. -
naked -
Этот атрибут позволяет компилятору сформировать необходимое объявление функции, оставляя при этом тело функции написанным на ассемблере. Для заданной функции компилятор не генерирует пролог и эпилог. В функции с атрибутом naked безопасно использовать только базовые инструкции
asm(см. Базовый ассемблер — инструкции ассемблера без операндов). Хотя расширенныйasmили сочетание базовогоasmс кодом C могут казаться работоспособными, их надёжная работа не гарантируется, и они не поддерживаются. -
reentrant -
Реентерабельные функции отключают прерывания при входе и включают их при выходе. Реентерабельные функции не могут также иметь атрибуты
nakedилиcritical. Они могут иметь атрибутinterrupt. -
wakeup -
Этот атрибут применяется только к функциям обработки прерываний. Если он назначен функции, не являющейся обработчиком прерывания, то он игнорируется без уведомления. Функция обработки прерывания с пробуждением выводит процессор из любого режима пониженного энергопотребления, в котором он может находиться при выходе из функции.
-
lower uppereither-
Для целевой платформы MSP430 эти атрибуты позволяют указать, следует ли разместить функцию или переменную в области низкой или высокой памяти либо оставить решение о размещении компоновщику. Атрибуты имеют значение только при компиляции для архитектуры MSP430X с моделью большой памяти.
Атрибуты работают совместно со скриптом компоновщика, дополненным указаниями о размещении секций с префиксами
.lowerи.upper. Так, например, помимо размещения секции.data, скрипт также задаёт размещение секций.lower.dataи.upper.data. Предполагается, что секцииlowerразмещаются в небольшой, но более быстродоступной области памяти, а секции верхнего уровня — в более крупной, но медленнее доступной области.Атрибут
eitherимеет особое назначение. Он указывает компоновщику разместить объект в соответствующей секцииlower, если для него есть место. Если места недостаточно, объект размещается в соответствующей секцииupper. Обратите внимание, что алгоритм размещения не отличается высокой сложностью. Он не пытается найти оптимальный способ упаковки секцийlower. Он просто выполняет один проход по объектам и делает всё возможное. Однако упаковке могут помочь параметры командной строки -ffunction-sections и -fdata-sections, поскольку они создают более мелкие области, которые проще упаковать.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/MSP430-Function-Attributes.html