Нужно разместить двухмерный массив строк во флеше.
С одной строкой не проблема:
- Код: Выделить всё
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.
Честно говоря не надеюсь особо на ответ, т.к. задача нестандартная. Копаю... Если кому-то интересно, отпишу если нарою.