Spec-Zone.ru › GCC 11

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

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

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

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)

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

void __builtin_avr_delay_cycles (unsigned long ticks)

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

char __builtin_avr_flash_segment (const __memx void*)

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

uint8_t __builtin_avr_insert_bits (uint32_t map, uint8_t bits, uint8_t 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 инструкций. Количество инструкций должно быть целочисленной константой времени компиляции.

Существует множество других специфичных для AVR встроенных функций, которые используются для реализации функций с фиксированной точкой ISO/IEC TR 18037 «Embedded C» раздела 7.18a.6. Вам не нужно использовать эти встроенные функции напрямую. Вместо этого используйте объявления, предоставленные заголовочным файлом stdfix.h с GNU-C99:

#include <stdfix.h>

// Re-interpret the bit representation of unsigned 16-bit
// integer uval as Q-format 0.16 value.
unsigned fract get_bits (uint_ur_t uval)
{
    return urbits (uval);
}

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

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

Spec-Zone.ru

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