- Jak w opisie potrzebuje stworzyć funkcję realizowaną przez preprocesor. //nie znam składni takich funkcji
- Argumentem funkcji ma być łańcuch znaków w UTF-8 np. L"йфяцычкмИ qwerty"
- Funkcja ma zwracać normalny łańcuch char-ów
przykładowe wywołanie : parseRU (L"йфяцычкмИ qwerty")
preprocesor zamiast tego ma wstawić do kodu: "cos tam qwerty"
i dopiero ma nastąpić kompilacja.
//z tym poniżej raczej sobie poradzę
- Sposób w jaki wszystkie znaki nietypowe (kod znaku powyżej 255) mają zostać przekonwertowane.
kod_nowego_znaku = kod_znaku_nietypowego - 850
if (kod_nowego_znaku > 255) kod_nowego_znaku=63;
//informacje nie kluczowe, mniej związane z tematem
-poniżej wrzucam moją przykładową realizację funkcji w standardowy sposób.
-niestety nie może ona zostać w takiej postaci ponieważ wszystkie takie łańcuchy których będzie wiele w programie ostatecznie zostaną umieszczoną w pamięci RAM mikrokontrolera i ją w sporej części zapełnią.
Dla zwykłych łańcuchów jest przewidziane makro PSTR("lancuch") zapobiega zapisaniu łańcucha do pamięci RAM i zwraca adres do miejsca w pamięci flash . Dla łańcuchów ze znakami w Unicode nie znalazłem takiego makra.
- druga sprawa po co mikrokontroler ma przetwarzać te łańcuchy skoro z góry są one znane jeszcze przed kompilacją , lepiej żeby to zrobił komputer i gotowe łańcuchy skompilował.
void parseRU(char *dst, wchar_t *src) { uint8_t i; for(i=0; src[i]!=0; i++){ if (src[i]>255) dst[i]= (src[i]-850 > 255) ? 63 : src[i]-850; else dst[i]=src[i]; } dst[i]=0; } //przykładowe wywołanie char buf[50]; parseRU(buf, L"йфяцычкмИ qwerty"); lcdTextRot(buf, 70 , 7 , 90);