u8 q;
if( ( q != 13 ) && ( q != 17 ) )
{
бла;
}
асм на пальцах:
R16 = значение q;
сравнение R16 c числом 13
сравнение R16 c числом 17
----------------------------
volatile u8 q;
if( ( q != 13 ) && ( q != 17 ) )
{
бла;
}
асм на пальцах:
R16 = значение q;
сравнение R16 c числом 13
R16 = значение q;
сравнение R16 c числом 17
то есть volatile указывает что переменная может изменится из других точек программы, и поэтому всегда её пересчитывает.
Это просто пример