Припоминается ещё вариант с коллекцией (items, что ли).
он удобен при последовательном вынимании элементов из коллекции.
объявляется примерно так
Код
__flash сhar Messages [] =
"Preved medved!\r\0"
"i poka!\r\0"
"a podkrepitsja est?\r\0"
;
т.е. массив строк, а в конце ещё один "лишний" конец строки (там за кавычками компилятор один ставит).
а перебирать примерно так (проверить не на чем сейчас, но вроде идея такая)
Код
char __flash * get_next_str( char __flash * pos){
if(!pos) return ((char __flash *)NULL); //если не инициализирован pos
pos += strlen(pos) + 1;
if(*pos) return (pos);
return ((char __flash *)NULL);
}
надеюсь, сам порядок размещения модификаторов не попутал

Ну и тут strlen должен уметь считать строки во flash (или принимать __generic).
Двигать указателями в AVR, конечно, не так быстро, как в ARM, но и не всегда спешить надо