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