Цитата(masterpc @ Mar 25 2008, 09:48)

Определил вот так:
Код
__flash byte s0[]=" MASTER ";
...
Шаманство. От непонимания, что означает то, что вы написали, пытаетесь написать то же самое другими словами и при этом случайно(!) пишите не совсем то, что было сначала. На что ругался компилятор - не разобрались, значит в дальнейшем в аналогичных ситуациях будете получать аналогичные ошибки. Достаточно было написать __flash byte const * const т.е. константный указатель на константный byte. Кстати, здесь то самое место, где char имеет "первозданный" смысл, т.е. он обозначает именно символ. Поэтому здесь для читабельности исходников лучше было оставить char вместо byte.
Цитата(masterpc @ Mar 25 2008, 09:48)

но пришлось также изменить обьявленя структуры, теперь указатели также флеш-типа
[code]
struct MENU{
__flash byte *st1;
Естественно. Поскольку для доступа к флеш и к ОЗУ в АВРах используются разные команды, то надо явно сообщать компилятору, что указатель будет указывать на флеш. И не забывать использовать const.
Цитата(masterpc @ Mar 25 2008, 09:48)

Теперь ругается только на указатель pperem
Неужели никак нельзя использовать одновременно указатели на флеш-массивы, указатели на функции, и указатели на переменные?
Использовать можно. Объясните словами, что вы хотели сделать. Я, например, не понял - как компилятор должен был на этапе компиляции в начальное значение элемента структуры типа __flash const char * положить значение(!) указвтеля типа int *. Неудивительно, что компилятор этого тоже не понял.