Строки utf-8 в программной памяти (__fla sh) - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь прочитать и распечатать строки Unicode (греческий) в avr из памяти программы, я использую атрибут __fla sh, но мои строки получаются поврежденными. пример: вместо ΧΡΗΣΤΗ я получаю ΧΡΤ⸮⸮, engli sh вроде как-то работает.

Вот как я это сделал:

в Print_menu_file. c:

static const __flash char * const __flash *Unicode_text;

const __flash char * const __flash Greek_text[35]=
{
    (const __flash char[40]) { "ΜΕΝΟΥ ΧΡΗΣΤΗ"     }, //USER_MENU
    (const __flash char[]) { "ΡΥΘΜΙΣΗ ΗΜΕΡ/ΩΡΑΣ" }, //SET_DATE_TIME
    (const __flash char[]) { "ΠΡΟΒ. ΑΙΣΘΗΤΗΡΩΝ"  }, //SHOW_SENSRORS
    (const __flash char[]) { "ΘΕΡΜΟΚΡΑΣ. 1/2"    }, //TEMP_1_OF_2
}

void Print_string(void)
{
 char* string=0;
 Unicode_text=Greek_text;
 strcpy_P(string,Unicode_text[1]);

 lcd_print_unicode(string);
}

1 Ответ

0 голосов
/ 06 мая 2020

Как следует из комментария ikegami, ваша проблема заключается в следующем коде:

void Print_string(void)
{
 /////problem below//////
 char* string=0;
 /////problem above/////

 Unicode_text=Greek_text;
 strcpy_P(string,Unicode_text[1]);

 lcd_print_unicode(string);
}

У вас есть указатель на символьный буфер, указывающий на 0. Теперь 0 МОЖЕТ быть выделенным буфером для вашей целевой strcopy, но, скорее всего, это не так (вероятно, это векторная таблица).

strcpy_P не выделяет для вас буфер. Он записывает только в буфер, указатель которого вы указали.

Превратите

char * string=0;

в

char string[MAX_EXPECTED_STRING_LENGTH_PLUS_TERMINATING_0];

, и ваша проблема будет решена.

...