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