не все, обсуждали где-то - (из документации):
const int foobar = value;
Это рекомендуемый способ размещения объектов во флэш-памяти.
В исходном коде C объекты, квалифицированные как const, могут быть прочитаны напрямую, используя идентификатор объекта, или косвенно, используя указатель, загруженный с адресом объекта (обсуждается ниже). Последовательность инструкций, используемых для доступа к объекту, будет зависеть от целевого устройства.
Если вы используете какое-либо устройство из семейств ATtiny или ATxmega3 , флэш-память программ отображается в пространство данных. Это означает, что код, сгенерированный компилятором для доступа к объектам, квалифицированным как const, может использовать инструкции lds или ld 8-битного AVR MCU , которые читаются из области памяти данных.
Для других устройств флэш-память не отображается в пространство данных, но альтернативные инструкции, сгенерированные компилятором, используются для чтения значения объекта. Объекты с квалификацией const могут быть расположены где угодно в доступной флэш-памяти, а последовательность чтения для доступа к ним зависит от количества сегментов флэш-памяти, реализуемых целевым устройством. Компилятор создает компактную кодовую последовательность для устройств только с одним сегментом флэш-памяти и может вызвать библиотечную процедуру, например, когда целевое устройство имеет несколько сегментов флэш-памяти.
Использование только квалификатора const для определения объектов только для чтения имеет несколько преимуществ. Он не использует какие - либо нестандартные ключевые слова C, поэтому он более компактен, тем более , что тот же синтаксис используется для определения местоположения объектов в памяти программы при компиляции для 8-битных PIC ® устройств и использовать тот же компилятор. Кроме того, опция позволяет вам контролировать, где размещаются эти объекты
удобно...