Spec-Zone.ru › GCC 15

6.4.1.10 Атрибуты функций Epiphany

В бэкенде Epiphany поддерживаются следующие атрибуты функций:

disinterrupt

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

forwarder_section

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

interrupt

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

Для целей Epiphany можно добавить один или несколько необязательных параметров следующим образом:

void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();

Допустимые значения этих параметров: reset, software_exception, page_miss, timer0, timer1, message, dma0, dma1, wand и swi. Несколько параметров означают, что для этой функции следует инициализировать несколько записей в таблице векторов прерываний: для каждого параметра name в секции ivt_entry_name генерируется переход к функции. Параметры можно не указывать вовсе; в этом случае запись в таблицу векторов прерываний не добавляется.

Обратите внимание: прерывания внутри функции включены, если также не указан атрибут disinterrupt.

Все следующие примеры являются допустимыми вариантами использования этих атрибутов для целей Epiphany:

void __attribute__ ((interrupt)) universal_handler ();
void __attribute__ ((interrupt ("dma1"))) dma1_handler ();
void __attribute__ ((interrupt ("dma0, dma1"))) 
  universal_dma_handler ();
void __attribute__ ((interrupt ("timer0"), disinterrupt))
  fast_timer_handler ();
void __attribute__ ((interrupt ("dma0, dma1"), 
                     forwarder_section ("tramp")))
  external_dma_handler ();
long_call
short_call

Эти атрибуты задают способ вызова конкретной функции. Эти атрибуты переопределяют параметр командной строки -mlong-calls (см. Параметры Adapteva Epiphany) и настройки #pragma long_calls.

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

Spec-Zone.ru

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