Spec-Zone.ru › GCC 14

6.33.20 Атрибуты функций MSP430

Эти атрибуты функций поддерживаются бэкендом MSP430:

critical

Критические функции отключают прерывания при входе и восстанавливают предыдущее состояние прерывания при выходе. Критические функции также не могут иметь атрибуты naked, reentrant или interrupt.

Аппаратное обеспечение MSP430 гарантирует, что прерывания отключены при входе в функции interrupt, а предыдущее состояние прерывания восстанавливается при выходе. Атрибут critical поэтому избыточен для функций interrupt.

interrupt

Используйте этот атрибут, чтобы указать, что указанная функция является обработчиком прерывания. Компилятор генерирует последовательности входа и выхода функции, подходящие для использования в обработчике прерывания, когда этот атрибут присутствует.

Вы можете предоставить аргумент к атрибуту прерывания, который указывает имя или номер. Если аргумент — число, оно указывает слот в таблице векторов прерывания (0 — 31), которому должен быть назначен этот обработчик. Если аргумент — имя, оно рассматривается как символическое имя слота вектора. Эти имена должны совпадать с соответствующими записями в скрипте линкера. По умолчанию распознаются имена watchdog для вектора 26, nmi для вектора 30 и reset для вектора 31.

naked

Этот атрибут позволяет компилятору построить требуемое объявление функции, позволяя при этом использовать ассемблерный код в теле функции. Указанная функция не будет иметь пролога/эпилога, сгенерированных компилятором. В голых функциях безопасно включать только базовые asm инструкции (см. Базовый ассемблер — ассемблерные инструкции без операндов). Использование расширенных asm инструкций или смешанного использования базовых asm инструкций и кода C может показаться работающим, но их надёжность нельзя гарантировать, и они не поддерживаются.

reentrant

Перекрывающиеся функции отключают прерывания при входе и включают их при выходе. Перекрывающиеся функции также не могут иметь атрибуты naked или critical. Они могут иметь атрибут interrupt.

wakeup

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

lower
upper
either

В целевой системе 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-13.3.0/gcc/MSP430-Function-Attributes.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API