Да, не путайте народ. const хорошо работает на армах, там действительно кладется во флеш и все. На авр инициализированные константы кладутся в специальную секцию флеши, потом по старту/ресету переписываются в рам и оттуда уже юзаются. Это связано с гарвардской архитектурой аврки и неприспособленностью gcc к такого рода архитектуре. Чтобы положить константу только во флеш, в gcc применяется атрибут progmem:
const char msg[]="Hello!" __attribute__((__progmem__));
Но следует помнить что это отдельное адресное пространство! Потом для обращения к этим константам нужно обязательно применять функции из <pgmspace.h> и строковые типа printf_P ! Например c=pgm_read_byte(msg+2) или printf_P(msg). Прямые обращения не сработают.
|