Jump to content

    
Sign in to follow this  
MementoMori

TouchGFX, Keil и русские буквы

Recommended Posts

Господа, проблема с русскими буквами в Keil общеизвестна и легко решается. Я после установки сделал все как прописано - у меня в редакторе русские буквы, все нормально.

Но вот в touchGFX с этим проблема. Русские тексты, вставленные в редакторе TOuchGFXDesigner, отображаются нормально. А вот если русский текст набирать ручками в KEIL и грузить из чего-то вроде

const char* MenuItemList[10] = {"Элемент1","Элемент2","Элемент3"};

То отображаются вопросики.

 

Как побороть?

Share this post


Link to post
Share on other sites
2 часа назад, MementoMori сказал:

Как побороть?

Разбирайтесь, в каких кодировках кодирует кейл, под виндой скорее всего 1251, а TOuchGFXDesigner может использовать модный юникод...

Share this post


Link to post
Share on other sites
22 minutes ago, x893 said:

Так поставьте в Keil UTF-8 и проверьте.

Может стать забавно. В редакторе все хорошо показывает, а строки в два раза длиннее в байтах становятся и на индикатор всякая ерунда идет в железе. Избегал этого усложнением сборки проекта. Все строковые значения из проекта собирал в один файл. У меня был gcc+make+eclipse. В makefile была добавлена цель, которая этот файл до компиляции из UTF-8 в CP1251 конвертировала.

Share this post


Link to post
Share on other sites
10 hours ago, x893 said:

Так поставьте в Keil UTF-8 и проверьте.

Спасибо, Кэп!

Еще вчера поставил. Найдете на картинке результат набора русских букв с клавиатуры и результат отображения на экране?

 

G33v50kR.png?download=1

 

Слазил еще раз в папку установки Keil. ОБнаружил там альетрнативный UVEdit.dll

В редакторе все стало на места, в TouchGFX - нет

 

WKFUQeOn.png?download=1

Share this post


Link to post
Share on other sites
3 hours ago, MementoMori said:

Насильственно перекодировал файл в UTF-8, открыл его в KEIL - русские буквы в норме, а вот в итоговом приложении - знаки вопроса.

В какой кодировке TOuchGFXDesigner сохраняет ?

Share this post


Link to post
Share on other sites
48 minutes ago, x893 said:

В какой кодировке TOuchGFXDesigner сохраняет ?

Хехе))) Как же я ждал этого вопроса))))

Вот в такой:

TEXT_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::Unicode::UnicodeChar texts_all_languages[] TEXT_LOCATION_FLASH_ATTRIBUTE =
{
    0x423, 0x43f, 0x440, 0x430, 0x432, 0x43b, 0x435, 0x43d, 0x438, 0x435, 0x2, 0x0, // @0 "??????????<>"
    0x41e, 0x442, 0x43a, 0x43b, 0x44e, 0x447, 0x438, 0x442, 0x44c, 0x20, 0x43c, 0x43e, 0x442, 0x43e, 0x440, 0x44b, 0x0, // @12 "????????? ??????"
    0x413, 0x41b, 0x410, 0x412, 0x41d, 0x42b, 0x419, 0x20, 0x42d, 0x41a, 0x420, 0x410, 0x41d, 0x0, // @29 "??????? ?????"
    0x42d, 0x43a, 0x441, 0x442, 0x440, 0x443, 0x434, 0x435, 0x440, 0x20, 0x31, 0x0, // @43 "????????? 1"
    0x42d, 0x43a, 0x441, 0x442, 0x440, 0x443, 0x434, 0x435, 0x440, 0x20, 0x32, 0x0, // @55 "????????? 2"
    0x422, 0x415, 0x41c, 0x41f, 0x415, 0x420, 0x410, 0x422, 0x423, 0x420, 0x410, 0x0, // @67 "???????????"
    0x422, 0x435, 0x43c, 0x43f, 0x435, 0x440, 0x430, 0x442, 0x443, 0x440, 0x430, 0x0, // @79 "???????????"
    0x423, 0x43f, 0x440, 0x430, 0x432, 0x43b, 0x435, 0x43d, 0x438, 0x435, 0x0, // @91 "??????????"
    0x41d, 0x430, 0x20, 0x434, 0x438, 0x441, 0x43f, 0x43b, 0x435, 0x435, 0x0, // @102 "?? ???????"
    0x42d, 0x43a, 0x441, 0x442, 0x440, 0x443, 0x434, 0x435, 0x440, 0x44b, 0x0, // @113 "??????????"
    0x41e, 0x441, 0x442, 0x430, 0x43b, 0x43e, 0x441, 0x44c, 0x3a, 0x0, // @124 "????????:"
    0x41d, 0x430, 0x441, 0x442, 0x440, 0x43e, 0x439, 0x43a, 0x438, 0x0, // @134 "?????????"
    0x41d, 0x430, 0x20, 0x43f, 0x43b, 0x430, 0x442, 0x435, 0x0, // @144 "?? ?????"
    0x4e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x0, // @153 "New Text"
    0x41f, 0x415, 0x427, 0x410, 0x422, 0x42c, 0x0, // @162 "??????"
    0x41f, 0x435, 0x447, 0x430, 0x442, 0x44c, 0x0, // @169 "??????"
    0x414, 0x430, 0x442, 0x447, 0x438, 0x43a, 0x0, // @176 "??????"
    0x421, 0x442, 0x43e, 0x43b, 0x438, 0x43a, 0x0, // @183 "??????"
    0x30, 0x33, 0x3a, 0x35, 0x30, 0x0, // @190 "03:50"
    0x414, 0x418, 0x421, 0x41a, 0x418, 0x0, // @196 "?????"
    0x2d, 0x30, 0x2e, 0x31, 0x0, // @202 "-0.1"
    0x2b, 0x30, 0x2e, 0x31, 0x0, // @207 "+0.1"
    0x2b, 0x31, 0x30, 0x0, // @212 "+10"
    0x2d, 0x31, 0x30, 0x0, // @216 "-10"
    0x2b, 0x31, 0x0, // @220 "+1"
    0x2d, 0x31, 0x0 // @223 "-1"
};

Он тупо сообщает компилятору куда и какие коды писать)

Share this post


Link to post
Share on other sites

 

25 minutes ago, MementoMori said:

Хехе))) Как же я ждал этого вопроса))))

Хехе ))) Как же я жду этого ответа )))

Использовали UTF16 ?

 

0x423, 0x43f, 0x440, 0x430, 0x432, 0x43b, 0x435, 0x43d, 0x438, 0x435, 0x2, 0x

Управление

 

Всё элементарно профессор

Share this post


Link to post
Share on other sites
4 hours ago, x893 said:

 

Хехе ))) Как же я жду этого ответа )))

Использовали UTF16 ?

 


0x423, 0x43f, 0x440, 0x430, 0x432, 0x43b, 0x435, 0x43d, 0x438, 0x435, 0x2, 0x

Управление

 

Всё элементарно профессор

Нет, использовал UTF8 Пробовал сохранять в UTF-16 - лабуда.

Кстати, на один символ из константы приходится 2 знака вопроса в итоговом тексте.  Я понимаю, что это как-то связано с UTF8/16, но не пойму что нужно сделать.

 

Я понимаю, что вы с моими кодами сделали некую операцию, но мне хочется набирать в редакторе текст и чтобы он попадал в TouchGFX в нормальном виде.

Share this post


Link to post
Share on other sites

Есть в TouchGFX такая штука

xcAYX5yU.png?download=1

 

Я сделал вот что

 

 Unicode::UnicodeChar buffer[20];
	uint8_t buffer2[20];
	Unicode::strncpy(buffer, MenuItemList[data], 20);  //копируем константу из флеши в буфер
	Unicode::toUTF8(buffer, buffer2,20);// конвертируем в UTF-8 и пмещаетм в buffer2
	Unicode::snprintf(OptionsMenuItemtextAreaBuffer, 20, "%s", buffer2);// в итоговый буфер помещаем текст в UTF-8

Это корежит даже латиницу. А.... почему вы решили, что должно быть в UTF-8?

Share this post


Link to post
Share on other sites

Я про UTF8 слова не говорил. По приведенному выше коду, если сделать конвертацию из UTF16, то получится текст Управление.

Так как не все компиляторы понимают строки в UTF16 они сохраняют текст в виде хекс констант 0x4...

Далее рассуждаем логически.

Вы делаете текст в CP1251, компилятор делает массив байт в этой кодировке.

Перед тем как отображать вы должны переделать его в UTF16

Если делаете текст в UTF-8 точно также - сначала в UTF16, потом вывод.

попробуйте написать у себя в коде строку в виде

message = u"Hello-Привет";

(в кодировках файла CP1251, UTF8, UTF16)

и посмотрите во что конкретно она превратится в каждой из кодировок.

 

Удачи !

Share this post


Link to post
Share on other sites
16 часов назад, MementoMori сказал:

Нет, использовал UTF8 Пробовал сохранять в UTF-16 - лабуда.

Лабуда- не лабуда, а сохранил он именно в UTF-16...

А проблема скорее всего в том, что кейл сохраняет в том формате(UTF-16), который отрисовщик текста не понимает, вот и лабуда получается... Т.е. вам нужно узнать, какой формат понимает именно сама либа, т.к. "Русские тексты, вставленные в редакторе TOuchGFXDesigner, отображаются нормально" - смотрите вчем он и сохраняет, и как поймете, пытайтесь выставить это в кейле.

 

ЗЫ. Как раньше было здорово - всего-то CP-866 и 1251, проверил одну, нет - значит другая, сегодня поднатянуло линуксоидов со своим зоопарком, юникодщиков-интернетчиков, и появилось непролазное болото...

Edited by mantech

Share this post


Link to post
Share on other sites
22 hours ago, MementoMori said:

Есть в TouchGFX такая штука

xcAYX5yU.png?download=1

 

Я сделал вот что

 


 Unicode::UnicodeChar buffer[20];
	uint8_t buffer2[20];
	Unicode::strncpy(buffer, MenuItemList[data], 20);  //копируем константу из флеши в буфер
	Unicode::toUTF8(buffer, buffer2,20);// конвертируем в UTF-8 и пмещаетм в buffer2
	Unicode::snprintf(OptionsMenuItemtextAreaBuffer, 20, "%s", buffer2);// в итоговый буфер помещаем текст в UTF-8

Это корежит даже латиницу. А.... почему вы решили, что должно быть в UTF-8?

Что даёт fromUTF8 перед выводом на экран ?

Может книгу прочитать ?

TouchGfx за 24 часа

Share this post


Link to post
Share on other sites
On 5/18/2020 at 12:21 AM, x893 said:

message = u"Hello-Привет";

В Keil не прокатило:

char text[20]=u"SSS";

../touchgfx/gui/src/containers/optionsmenuscrollistcontainer.cpp(24): error:  #20: identifier "u" is undefined

Какую-то библиотеку надо подключить?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this