Volatile es una palabra reservada del C, no solo del C30 y su significado es la de indicar que el valor de la variable a la que esta asociado puede cambiar en cualquier momento. De cara al usuario no tiene la mayor relevancia, sin embargo si la tiene para el compilador, por ejemplo sirve para indicarle que su valor puede cambiar por una interrupcion, un proceso en background, E/S, etc. Esto le sirve al compilador para que no "asuma" el valor de dicha variable en un momento dado de la ejecución donde se vea involucrada dicha variable. Por ejemplo, si tenemos el siguiente codigo:
volatile int ticks;
void timer( ) { //tarea ejecutada por un proceso externo (ejemplo un timer)
ticks++;
}
void wait (int interval) { //tarea de espera de x ticks de reloj
ticks = 0;
while (ticks < interval);
}
Si el compilador es lo suficientemente bueno no deberia de cargar la variable ticks dentro de la rutina de comprobación del while, pues sabe que no se cambia su valor internamente, y si lo hiciese podria provocar una ejecución incorrecta del programa.
Un saludo y espero haber aclarado tu duda.