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
- Если 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);
- Если X равен
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-12.2.0/gcc/AVR-Built-in-Functions.html