Spec-Zone.ru › GCC 6

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

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

interrupt

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

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

naked

Этот атрибут позволяет компилятору создать необходимую декларацию функции, позволяя при этом телу функции быть кодом ассемблера. Указанная функция не будет иметь прологов/эпилогов, сгенерированных компилятором. В функциях 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. Это «сохранение» относится только к коду, сгенерированному компилятором, а не к схеме IRQ приложения, которая является ответственностью приложения.

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

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

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

Spec-Zone.ru

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