Нужно разместить двухмерный массив строк во флеше.
С одной строкой не проблема:
- Код: Выделить всё • Развернуть
const char s1[] PROGMEM = "123";
С массивов строк тоже проблем нет:
- Код: Выделить всё • Развернуть
const char s1[] PROGMEM = "123";
const char s2[] PROGMEM = "456";
const char s3[] PROGMEM = "789";
const char* const ss[] PROGMEM = {s1, s2, s3};
А вот мне надо массив этих массивов. В идеале тоже в PROGMEM, но необязательно, т.к. он уже маленький
Компилятор пропускает такие варианты:
- Код: Выделить всё • Развернуть
const char** const table_in_flash[] PROGMEM = {ss, ss1, ss2};
const char* const *table_in_ram[] = { ss, ss1, ss2};
Вариант с PROGMEM у меня не получилось заставить работать вообще.
Вариант с оперативкой частично работоспособен. А именно:
Можно получить доступ к конечным строкам побайтно pgm_read_byte_near((char*)pgm_read_word(&(table_in_ram[набор строк][строка])) + символ);
Можно узнать размер любой строки strlen_P((char*)pgm_read_word(&(table_in_ram[набор строк][строка])))
Можно получить количество наборов sizeof(table_in_ram)/sizeof(char*)
Но! Никак не получается получить количество строк в наборе через table_in_ram.
Комбинация sizeof(table_in_ram[0]) выдает все время 2 вне зависимости от количества строк в наборе.
Пробовал разные варианты типа sizeof((char**)pgm_read_word(*(table_in_ram[0]))))
Никак! При этом sizeof(ss) работает и выдает корректный результат, который мне надо получить через массив table_in_ram.
Честно говоря не надеюсь особо на ответ, т.к. задача нестандартная. Копаю... Если кому-то интересно, отпишу если нарою.

"Массив константных указателей на константный массив констант". Во что это компилится лучше вообще не думать. Такое можно делать на gcc самых свежих версий для 686 компов. Но не для дистрофиков типа авр.
Например с sizeof???
