реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> MPLAB C18 Проблемы с кириллицей
Auratos
сообщение Oct 19 2015, 10:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 6-10-14
Пользователь №: 83 032



Добрый день. Столкнулся с такой проблемой, что при размещении данных во флеш-памяти, символы кириллицы конвертируются в неизвестную мне кодировку независимо от того, какая кодировка выбрана в настройках проекта. В данный момент у меня выбрана кодировка 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; }                                 // Иначе отключить мерцание, установить позицию на первый символ
}


Подскажите, пожалуйста, может быть где-то в настройках самого компилятора еще можно выставить кодировку?
Go to the top of the page
 
+Quote Post
Redguy
сообщение Oct 19 2015, 13:36
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 14-01-10
Из: Россия, Самара
Пользователь №: 54 801



Добрый день!
Контроллеру абсолютно все равно в какой кодировке вы "закодировали" текст. Компилятор ему подсовывает конкретные значения в зависимости от кодировки настроенной в среде. По умолчанию MPLab использует Win-1251 для конвертации. Точно не помню, но по-моему, этот параметр можно изменить в настройке проекта, опять же это может зависеть от версии среды 8 или X.
Что в первом, что во втором случае в вашем коде это будет интерпретировано одинаково.
Ответ по проблеме неправильной конвертации при выводе на LCD кроется в самом драйвере LCD, который вы используете, т.е. вся магия происходит после вызова функции viewStr. Что там такое и какая таблица для декодирования символов в пиксели заложена у вас искать надо там.
Go to the top of the page
 
+Quote Post
Valentine Logino...
сообщение Oct 20 2015, 06:41
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 7-04-10
Из: Пушкино
Пользователь №: 56 462



Я бы вам посоветовал скомпилировать const char *str = "абв"; и руками посмотреть результат, что будет размещено в памяти контроллера. У меня в MPLAB X независимо от кодировки проекта xc32 всю кириллицу держит в памяти как юникод.
А еще лучше все-таки использовать wchar для такого дела.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.0135 секунд с 7
ELECTRONIX ©2004-2016