Цитата(mempfis_ @ Nov 26 2008, 18:35)

Попутно спрошу а почему именно volatile?
"volatile" дает компилятору понять, что переменная может измениться неизвестным для него (компилятора) образом.
Например, есть такая ситтуация.
Код
int i;
ISR (SOME_SIGNAL_vect)
{
i = 0xFF;
}
int main(void)
{
...
i = 0; // Читаем переменную из памяти
some_wait(); // Чего то ждем
some_routine(i); // Какая-та функция, использующая i
...
}
Если во время some_wait будет вызвано прерывание, то i изменится. Но компилятор оптимизирует обращения к переменным и после операции "i = 0" значение i уже находится в регистрах, так что повторного чтения i перед вызовом some_routine не происходит, в результате some_routine будет вызвано со старым i.
Что бы такого не происходило, используют volatile. Это указывает компилятору, что обращение к переменной оптимизировать не надо.
Цитата(mempfis_ @ Nov 26 2008, 18:35)

И обязательно-ли для всех переменных что используються в прерываниях использовать этот квалификатор?
Как Вы наверное понимаете, необходимость объявлять как volatile, с прерыванием связана косвено.