volatile - ставьте если нужно предотвратить возможность повреждения содержимого переменной в прерывании, и не позволить компилятору попытаться выкинуть её при оптимизации кода.
Советую ставить если не знаете точно нужно или нет !
пример:
volatile unsigned char x;
static - если переменная локальная т.е. объявлена в какой либо функции и должна сохранять свое значение до следующего вызова этой функции.
eeprom - разместить переменную в EEPROM. Значение таких переменных сохраняется при выключении питания и при перезагрузке МК.
пример:
eeprom unsigned int x;
Если это первая переменная в EEPROM то её младший байт будет помещен в ячейку 1 EEPROM а старший в ячейку 2. Ячейка 0 не используется так как рекомендует производитель. Необходимо помнить что запись в EEPROM длительный процесс - по таблице "Table 1. EEPROM Programming Time" это 8500 тактов процессора.