Возможно ли как-то организовать массив указателей на строки во FLASH и как это правильно сделать?
Поясню зачем это мне. Допустим, МК общается с GSM-модемом, для обработки(парсинга) приходящих от модема ответов на АТ-команды используются шаблоны строк типа такого:
Код: Выделить всё
const unsigned char at_cmd_pattern[RESP_TOTAL_CNT][17]={
{ CR, LF, 'O', 'K', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', 4, RESP_OK , CLEN_FIX },
{ CR, LF, 'R', 'I', 'N', 'G', '?', '?', '?', '?', '?', '?', '?', '?', 6, RESP_RING , CLEN_FIX },
{ CR, LF, 'N', 'O', 'C', 'A', 'R', 'R', 'I', 'E', 'R', '?', '?', '?', 11, RESP_TERMINATE , CLEN_FIX },
{ CR, LF, 'N', 'O', 'D', 'I', 'A', 'L', 'T', 'O', 'N', 'E', '?', '?', 12, RESP_TERMINATE , CLEN_FIX },
{ CR, LF, 'B', 'U', 'S', 'Y', '?', '?', '?', '?', '?', '?', '?', '?', 6, RESP_TERMINATE , CLEN_FIX },
{ CR, LF, 'N', 'O', 'A', 'N', 'S', 'W', 'E', 'R', '?', '?', '?', '?', 10, RESP_TERMINATE , CLEN_FIX },
{ CR, LF, 'E', 'R', 'R', 'O', 'R', '?', '?', '?', '?', '?', '?', '?', 7, RESP_ERROR , CLEN_FIX },
{ CR, LF, 'C', 'O', 'N', 'N', 'E', 'C', 'T', '?', '?', '?', '?', '?', 9, RESP_CONNECT , CLEN_VAR },
{'^', 'S', 'Y', 'S', 'S', 'T', 'A', 'R', 'T', '?', '?', '?', '?', '?', 9, RESP_RESET , CLEN_FIX }
};
Т.е. мы как-бы имеем массив фиксированного размера, причем размер в "ширину" этого массива равен "ширине" самой длинной команды(строки). Выходит, что место в памяти расходуется впустую для коротких строк. Это довольно простой пример, но по мере увеличения функциональности девайса увеличивается ширина массива, а в месте с ней и уменьшается объем полезной свободной памяти.
Но пока не знаю как правильно описать такую конструкцию.
ЗЫ. Пишу в Кейле под ARM.