De nada hermano, con respecto a la declaracion volatile, el uso de la misma es para instruir al compilador para que no realize ningun tipo de optimizacion sobre el contexto de la misma, un caso estupido pero clarificador es este:
int Pepe;
Pepe = 1;
Pepe = 1;
Pepe = 1;
Cualquier compillador normal descarta las dos ultimas asignaciones porque se da cuenta de que son asignaciones repetitivas, ahora si yo cambio por esto:
volatile int Pepe;
Pepe = 1;
Pepe = 1;
Pepe = 1;
El compilador no optimiza nada y si ven el dissambler veran que las 3 asignaciones son generadas.
Saludos !
P.D.
Si su compilador no descarta las dos ultimas asignaciones del primer ejemplo, entonces descarten al compilador !