Домашняя страница библиотеки_c AVR

Синтаксис языка C

Библиотека языка C GNU glibc

 Страницы развития библиотеки_с AVR

Главная страница

Инструкция пользователя

Содержание библиотеки_c

Часто задаваемые вопросы

Содержание по алфавиту

Демонстрационные проекты


<compat/deprecated.h>: Осуждаемые элементы

Описание

Этот хедер файл содержит несколько элементов, которые были доступны в предыдущих версиях библиотеки, но в итоге через некоторое время осудились.

 #include <compat/deprected.h> 

Эти элементы включены в хедер файл только для совместимости со старыми исходниками, для того чтобы исходники, которые были написаны для предыдущих библиотечных версий, могли быть поддержаны до конца жизни. Использовать любой из этих элементов в новом коде не следует.

Разрешение определенных прерываний всей системы

В дополнение к глобальному разрешению прерываний нужно отдельно разрешить прерывание каждого устройства, если прерывания для этого устройства желательны. В то время как некоторые устройства поддержаны, их прерывания допускают биту в наборе регистра устройства, внешнем, и прерывания по таймеру имеют регистраторов конфигурации всей системы.

Пример:

    // Enable timer 1 overflow interrupts.
    timer_enable_int(_BV(TOIE1));
 
    // некоторый программный код...
 
    // Отключение всех прерываний по таймеру.
    timer_enable_int(0);

Примечание:

Будьте внимательным, когда используете эти функции. Если вы уже допустили другое прерывание, Вы могли бы inadvertantly отключать их, допуская другое прерывание.

 

static __inline__ void 

timer_enable_int (unsigned char ints)

#define 

enable_external_int(mask)   (__EICR = mask)

#define 

INTERRUPT(signame)

#define 

__INTR_ATTRS   used

 

Устаревшее макроопределения IO

В то время, когда AVR-GCC и avr-libc не могли обработать доступ порта ввода/вывода в прямой форме назначения, поскольку они обработаны теперь, весь доступ порта ввода/вывода должен был быть сделан через определенное макроопределение, которое в конечном счете привело к командам встроенного ассемблерного кода, выполняющим желательное действие. Макроопределение стало устаревшим, как чтение и запись портов ввода/вывода, могут быть сделаны, просто используя имя порта ввода/вывода в выражении, и вся разрядная манипуляция (включая те на портах ввода/вывода) может быть сделана, используя универсальные C разрядные операторы манипуляции.

Макроопределение в этой группе моделирует историческое поведение. В то время как они, как предполагается, будут применены к портам ввода/вывода, эмуляция фактически использует стандартные методы C, так что они могли быть также применены к произвольным местоположениям памяти.

#define 

inp(port)   (port)

#define 

outp(val, port)   (port) = (val)

#define 

inb(port)   (port)

#define 

outb(port, val)   (port) = (val)

#define 

sbi(port, bit)   (port) |= (1 << (bit))

#define 

cbi(port, bit)   (port) &= ~(1 << (bit))


Документация макроопределений

#define cbi

(

port,

 

 

 

bit 

 

 ) 

   (port) &= ~(1 << (bit))

Осуждаемый:

cbi(регистр, бит);                 //(сбросить бит).

#define enable_external_int

(

mask 

 

 ) 

   (__EICR = mask)

Осуждаемый:

Эта макрокоманда дает доступ к GIMSK регистру (или EIMSK регистриру при использовании устройств AtMega или GICR регистр для других). Хотя эта макрокоманда по существу та же самая как назначение на регистр, это действительно приспосабливается к немногим типам используемых устройств. Эта макрокоманда недоступна, если ни один из вышеупомянутых регистраторов не определен.

#define inb

(

port 

 

 ) 

   (port)

Осуждаемый:

inb(регистр);                                        // для чтения значения из регистра

#define inp

(

port 

 

 ) 

   (port)

Осуждаемый:

Чтение значениея из порта ввода / вывода.

#define INTERRUPT

(

signame 

 

 ) 

 

Значение:

void signame (void) __attribute__ ((interrupt,__INTR_ATTRS));   \
void signame (void)

Осуждаемый:

Вводит функцию обработки прерывания, которая выполняется с первоначально глобально разрешёнными прерываниями. Это позволяет программам обработки прерывания быть прерванным.

Поскольку эта макрокоманда использовалась слишком многими неподозревающими людьми, в прошлом это осудилось, и будет удалено в будущей версии библиотеки. Пользователи, которые хотят вновь разрешить возможность прерываний, настолько быстро насколько возможно, могут объявить их обработчики, как описано выше.

#define outb

(

port,

 

 

 

val 

 

 ) 

   (port) = (val)

Осуждаемый:

outb(регистр, значение);                    // запись байта в регистр

#define outp

(

val,

 

 

 

port 

 

 ) 

   (port) = (val)

Осуждаемый:

Запись val в порт IO port.

#define sbi

(

port,

 

 

 

bit 

 

 ) 

   (port) |= (1 << (bit))

Осуждаемый:

sbi(регистр, бит);                 //(установить бит)  


Документация функций

static __inline__ void timer_enable_int

(

unsigned char 

ints

 ) 

[static]

Осуждаемый:

Эта функция изменяет регистр timsk. Значение проходящее через ints является определенным устройством.

 

Hosted by uCoz