Большинство современных средств разработки для микроконтроллеров (VScode, Eclipse, IAR, CodeVision, Keil, список можно продолжать) сохраняют тексты исходного кода в кодировке UTF-8. В этом случае встает проблема вывода на различные индикаторы русского текста, потому что необходима 8-битная кодировка символов. Чаще всего это кодировка CP1251 (Windows-1251).
Конечно, обойти эту проблему можно путем предварительной подготовки для русского текста специальных массивов байт в нужной кодировке, и затем их выводить на индикатор. Но намного удобнее было бы непосредственно использовать строковые константы в исходном коде, которые хранятся в UTF-8. Для перекодировки текста из UTF8 в CP1251 можно применить отличную библиотеку [1].
Пример использования библиотеки:
#include < stdio.h> #include "Adafruit_GFX.h" #include "utf8_to_cp1251.h"
#define oledprintf(...) { \
char temp_utf8[256]; \
char cp1251txt[256]; \
int len; \
sprintf(temp_utf8, __VA_ARGS__); \
len = convertUtf8ToCp1251(temp_utf8, cp1251txt); \
for (uint8_t idx=0; idx < len; idx++) \
{ \
symwrite(cp1251txt[idx]); \
} \
}
uint8_t y = 0;
setCursor(0, y);
oledprintf("Привет, мир!");
y += SYMHEIGHT*textsize;
setCursor(0, y);
oledprintf("min: %.0f", (float)min/SAMPLE_RATE_HZ);
y += SYMHEIGHT*textsize;
setCursor(0, y);
oledprintf("max: %.0f", (float)max/SAMPLE_RATE_HZ);
y += SYMHEIGHT*textsize;
setCursor(0, y);
oledprintf("сред: %.0f", (float)avg/SAMPLE_RATE_HZ);
[Ссылки]
1. utf8_to_cp1251. 2. Как делать шрифты для устройств на микроконтроллерах. 3. Обзор шрифтов библиотеки u8glib. 4. u8glib: шрифты и работа со строками текста. 5. IAR 8.30: русский текст в редакторе кода. 6. Русификация индикатора LCD на чипе Hitachi 44780. 7. Русский шрифт для LCD AM-480272H3TMQW-T01H. 8. Проблема вывода на однострочный LCD BC1601A1 (16x1). 9. IAR EW ARM: как перенаправить вывод printf и putchar. |