Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2007-01-11

Re: Квалификатор volatile (Язык Си)

Subject: Квалификатор volatile (Язык Си)

> поможет ли при этом квалификатор volatile?
>
> long volatile val;
>
> __interrupt void int(void)
> {
> val = 0x12345678;
> }
>
> void main()
> {
> val+=5;
> }
>
Нет, не поможет. Скорее даже наоборот -- он запрещает компилятору
делать к-либо предположения о том, что переменная остаётся постоянной.
(volatile применяется к регистрам портов ввода, которые могут меняться
"снаружи", вне зависимости от действий программы).

Предназначен для подавления "агрессивной" оптимизации.

М.

   "Nikolai Manytchkine" 2007-01-11 18:45:42 (#628524)

Квалификатор volatile (Язык Си)

Скажите пожалуйста для чего нужен квалификатор volatile.

Мне нужно чтобы переменная длинной 32 разряда корректно обрабатывалась
на 8 разрядном процессоре.

поможет ли при этом квалификатор volatile?

например:

long volatile val;

__interrupt void int(void)
{
val = 0x12345678;
}

void main()
{
val+=5;
}

корректный пример без volatile:

long val;

__interrupt void int(void)
{
val = 0x12345678;
}

void main()
{
__disable_interrupt(); //Запретить модификацию переменной функцией-прерыванием
val+=5;
__enable_interrupt();
}

   2007-01-11 10:23:07 (#628365)