Auratos 0 19 октября, 2015 Опубликовано 19 октября, 2015 · Жалоба Добрый день. Столкнулся с такой проблемой, что при размещении данных во флеш-памяти, символы кириллицы конвертируются в неизвестную мне кодировку независимо от того, какая кодировка выбрана в настройках проекта. В данный момент у меня выбрана кодировка Windows-1251. Есть массив rom const byte MainMenu[17] = " ОСНОВНОЕ МЕНЮ "; Но когда он доходит до функции Converter(StartPos,(void*)MainMenu, 16); то вместо русских символов там содержится ерунда. То же самое, когда пытаюсь в функцию явно передать в виде параметра строку Converter1(StartPos,"ОСНОВНОЕ МЕНЮ", 16); void Converter1 (byte adr, const rom char *screen, byte size) { byte newScr[33], i = 0, pos = StartPos; char a = 0; for (i = 0; i < size; i++) { a = screen[i]; if ((screen[i] >= 128) && (screen[i] <= 137)) // Если символ из специального диапазона { flBlink = 1; // Установить флаг для включения мерцания pos += i; // Запомнить позицию символа } newScr[i] = tableLCD[screen[i]]; // Конвертировать символы для отображения в ЖКИ } viewStr(adr, (void*)newScr, size); // Отобразить символы на экране if (flBlink == 1) { Blink(); positionLCD(pos); flBlink = 0; } // Если был обнаружен символ из специального диапазона, включить мерцаниеи else { NoBlink(); pos = StartPos; } // Иначе отключить мерцание, установить позицию на первый символ } Подскажите, пожалуйста, может быть где-то в настройках самого компилятора еще можно выставить кодировку? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Redguy 0 19 октября, 2015 Опубликовано 19 октября, 2015 · Жалоба Добрый день! Контроллеру абсолютно все равно в какой кодировке вы "закодировали" текст. Компилятор ему подсовывает конкретные значения в зависимости от кодировки настроенной в среде. По умолчанию MPLab использует Win-1251 для конвертации. Точно не помню, но по-моему, этот параметр можно изменить в настройке проекта, опять же это может зависеть от версии среды 8 или X. Что в первом, что во втором случае в вашем коде это будет интерпретировано одинаково. Ответ по проблеме неправильной конвертации при выводе на LCD кроется в самом драйвере LCD, который вы используете, т.е. вся магия происходит после вызова функции viewStr. Что там такое и какая таблица для декодирования символов в пиксели заложена у вас искать надо там. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
becopt 0 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба Я бы вам посоветовал скомпилировать const char *str = "абв"; и руками посмотреть результат, что будет размещено в памяти контроллера. У меня в MPLAB X независимо от кодировки проекта xc32 всю кириллицу держит в памяти как юникод. А еще лучше все-таки использовать wchar для такого дела. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться