Spec-Zone.ru › GCC 7

6.31.5 Атрибуты функций AVR

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

interrupt

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

В AVR аппаратное обеспечение глобально отключает прерывания во время выполнения прерывания. Первая инструкция обработчика прерывания, объявленного с этим атрибутом, это инструкция SEI для повторного включения прерываний. См. также атрибут функции signal, который не вставляет инструкцию SEI. Если оба атрибута signal и interrupt указаны для одной функции, signal будет проигнорирован.

naked

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

OS_main
OS_task

В AVR функции с атрибутами OS_main или OS_task не сохраняют/восстанавливают какие-либо сохранённые при вызове регистры в своём прологе/эпилоге.

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

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

Различия с атрибутом функции naked:

  • Функции naked не имеют инструкции возврата, в то время как функции OS_main и OS_task имеют инструкцию возврата RET или RETI.
  • Функции naked не создают фрейма для локальных переменных или указателя на фрейм, в то время как функции OS_main и OS_task делают это по мере необходимости.
signal

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

См. также атрибут функции interrupt.

Аппаратное обеспечение AVR глобально отключает прерывания при выполнении прерывания. Функции обработчиков прерываний, определённые с атрибутом signal , не включают прерывания. Безопасно включить прерывания в обработчике signal. Это «безопасное» действие относится только к коду, сгенерированному компилятором, и не относится к планированию прерываний приложения, которое является обязанностью приложения.

Если оба атрибута signal и interrupt указаны для одной функции, signal будет проигнорирован.

Далее: Атрибуты функций Blackfin, Предыдущее: Атрибуты функций ARM, Наверх: Атрибуты функций [Содержание][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/AVR-Function-Attributes.html

Spec-Zone.ru

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