Код
#define MAX_TEXT_LEN 19
__flash const char TEXT[][ MAX_TEXT_LEN+1 ] = {
/* 00 */"all",
/* 01 */"DEVICE 1",
/* 02 */"DEVICE 2",
};
принятый в С признак конца строки - нулевой байт; его обеспечит компилятор при размещении переменной во FLASH. Нужно только зарезервировать под него место, т.е. в данном случае - не вписывать строки длиннее MAX_TEXT_LEN.
Касательно русских букв, вариантов два: кодировка win1251 в исходниках (читабельные строки) плюс перекодировка во время выполнения, или перекодированные строки непосредственно в исходниках. Функция для первого варианта приведена ниже.
Код
flash unsigned char RusChar[] =
{0x41,0xA0,0x42,0xA1,0xE0,0x45,0xA3,0xA4,0xA5,0xA6,0x4B,0xA7,0x4D,0x48,0x4F,0xA8
,
0x50,0x43,0x54,0xA9,0xAA,0x58,0xE1,0xAB,0xAC,0xE2,0xAD,0xAE,0xC4,0xAF,0xB0,0xB1,
0x61,0xb2,0xb3,0xb4,0xe3,0x65,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0x6f,0xbe,
0x70,0x63,0xbf,0x79,0xe4,0x78,0xe5,0xc0,0xc1,0xe6,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7}
;
/*
* конвертирование символа из кодировки Windows в кодировку дисплея
* sym - символ в кодировке Windows
* результат - символ в кодировке дисплея
*/
byte ConvertSymToDisplayCode(byte sym)
{
char c;
c = sym;
if(c>='А') return RusChar[c-192];
else if (c=='Ё') return 0x45;
else if (c=='ё') return 0x65;
else if (c>=0x80) return c+0x40;
return c;
}