Spec-Zone.ru › GCC 7

6.31.8 Атрибуты функций 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.

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

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

Spec-Zone.ru

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