6.59.9 Встроенные функции 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
- Если X равно
0xf, то n-й бит val возвращается без изменений. - Если X находится в диапазоне 0…7, то n-й бит результата устанавливается в X-й бит bits.
- Если 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)
Далее: Встроенные функции Blackfin, Предыдущее: Статус и управляющие встроенные функции ARM для чисел с плавающей точкой, Выше: Встроенные функции целевых платформ [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-6.5.0/gcc/AVR-Built-in-Functions.html