Цитата(aesok @ Nov 8 2006, 21:22)

GCC это компилятор стандартного языка C!!!
Анатолий.
Анатолий, большое спасибо за комментарий. Правда, всё, что вы написали,я себе внятно представляю.
Насколько я знаю, gcc (вернее, cc1, компилятор С) делает из С текста текст на asm-е, который добивает as, а потом получившийся объектник линукет ld. Вплоть до последнего этапа, в объектных файлах (можно прогнать дизассемблером и убедиться) указатели равны нулю, их потом расставляет линкер. Это, видимо, сделано исходя из того, что именно линкер знает, в каких адресах будут находиться секции кода и данных. Это написано в опциях линкера а также его скриптах. Сам cc1 встретившиеся инициализированные и неинициализированные переменные, а также константы, распихивает по секциям уже на этапе изготовления asm. И на этом же этапе учитываются пожелания в виде атрибутов вида __attribute__((section("имя"))), которые где-то в исходниках avr-libc определены как PROGMEM или я забыл, как дословно.
Вероятно, чтобы добиться результата, то есть, получить ответ на мой первоначальный вопрос, нужно знать, как уломать gcc понимать, что инициализированные локальные строки следует воспринимать как константы и кандидатов на размещение не в секцию .data, а в секцию .text. Предполагаю, что это задача нетривиальная.
Возвращаясь к начальной теме, скажу, что текст наподобии:
Код
const uint8_t text1[] = 'text1\n';//атрибуты принадлежности к FLASH опускаю
const uint8_t text2[] = 'text2\n';//атрибуты принадлежности к FLASH опускаю
//и так далее
//а затем использование:
my_print(text1);//использование указателя с осознанием того, что он указывает не в RAM, но в FLASH
my_print(text2);
неудобен как раз тем, что надо строки сперва где-то наверху инициализировать. Неудобно тем, что из-за неимения отладчика я вынужден в код вставлять простецкие ловушки, печатающие в UART слова, и постоянно удаляю их и вставляю в другие места новые.
Конечно, задача не бог весть архиважная, просто думал, мож, известен способ сделать всё просто,используя возможности gcc.
Цитата(aesok @ Nov 8 2006, 21:22)

PS: Ответы на другие вопросы: "Что будет если стока не попадет в нижние 64К флеша?", "Почему для ATmega256 хватает 16-ти битноко указателя для 128 Кслов?" - дам если спросити.
Спасибо за предложение

Я чётко себе представляю, как это делается и что получается

Цитата(PaulS @ Nov 8 2006, 23:24)

А что, в GCC модификаторы __flash и __eeprom не работают?
Ужас какой

Применительно к данным работает атрибут, заставляющий помещать данные в любую секцию: __attribute__((section("имя"))), а линкеру потом объяснить, в каких адресах находится секция с этим именем. Вот и всё. Модификаторов, про которые вы упомянули, в gcc нет (как мне известно). Если что-то подобное есть, то это макросы avr-libc, что не есть часть gcc.