Spec-Zone.ru › GCC 7

6.60.10 Встроенные функции AVR

Для каждой встроенной функции AVR определена одноимённая макрокоманда с заглавными буквами. Это позволяет пользователям легко проверить, реализована ли конкретная встроенная функция или нет. Например, если __builtin_avr_nop доступна, то макрос __BUILTIN_AVR_NOP определён как 1, в противном случае он не определён.

Следующие встроенные функции сопоставляются с соответствующими машинными инструкциями, т.е. nop, sei, cli, sleep, wdr, swap, fmul, fmuls соответственно fmulsu. Три fmul* встроенные функции реализованы как вызов библиотеки, если нет аппаратного умножителя.

void __builtin_avr_nop (void)
void __builtin_avr_sei (void)
void __builtin_avr_cli (void)
void __builtin_avr_sleep (void)
void __builtin_avr_wdr (void)
unsigned char __builtin_avr_swap (unsigned char)
unsigned int __builtin_avr_fmul (unsigned char, unsigned char)
int __builtin_avr_fmuls (char, char)
int __builtin_avr_fmulsu (char, unsigned char)

Для задержки выполнения на определённое количество тактов GCC реализует

void __builtin_avr_delay_cycles (unsigned long ticks)

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

char __builtin_avr_flash_segment (const __memx void*)

Эта встроенная функция принимает байтовый адрес 24-разрядного адресного пространства __memx и возвращает номер флэш-сегмента (64 КБ блок), к которому относится этот адрес. Нумерация начинается с 0. Если адрес не указывает на флэш-память, возвращается -1.

unsigned char __builtin_avr_insert_bits (unsigned long map,
                                         unsigned char bits,
                                         unsigned char val)

Вставляет биты из bits в val и возвращает результирующее значение. Ниблы map определяют, как выполняется вставка: пусть X — n-ый нибл map

  1. Если X равен 0xf, то n-ый бит val возвращается без изменений.
  2. Если X находится в диапазоне от 0 до 7, то n-ый бит результата устанавливается в X-ый бит bits.
  3. Если X находится в диапазоне от 8 до 0xe, то n-ый бит результата не определён.

Типичным случаем применения этой встроенной функции является корректировка входных и выходных значений для несмежных схем портов. Примеры:

// same as val, bits is unused
__builtin_avr_insert_bits (0xffffffff, bits, val)
// same as bits, val is unused
__builtin_avr_insert_bits (0x76543210, bits, val)
// same as rotating bits by 4
__builtin_avr_insert_bits (0x32107654, bits, 0)
// high nibble of result is the high nibble of val
// low nibble of result is the low nibble of bits
__builtin_avr_insert_bits (0xffff3210, bits, val)
// reverse the bit order of bits
__builtin_avr_insert_bits (0x01234567, bits, 0)
void __builtin_avr_nops (unsigned count)

Вставляет count NOP инструкций. Количество инструкций должно быть целочисленной константой, вычисляемой на этапе компиляции.

Далее: Встроенные функции Blackfin, Предыдущее: ARM ARMv8-M расширения безопасности, Наверх: Встроенные функции целевых платформ [Оглавление][Индекс]

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

Spec-Zone.ru

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