Так всегда обращение через указатель, медленно. Я предлагал
указатель сделать static const -- тогда оптимизатор всегда твердо
уверен в его значении и может выкинуть (обращаться напрямую к x).
Гарвардовская архитектура по-разному сделана у разных компиляторов.
У пиков -- по адресу понимает (hitech-c, в рантайме выбирает один
из двух вариантов обращения по-указателю) если указатель (если
переменная -- сразу знает адрес и генерит нужный код), у KEIL C51
нельзя было мешать const и не-const (уж не помню деталей, но помню, что замучался, на PC работает, на контроллере -- глюкодром), у AVR как раз __flash, __progmem__ и т.п. дополнительные спецификаторы. У MSP430 не помню как, вроде тоже а-ля x51 (или можно всё const положить в RAM, которой не хватает).