ARDUINO F("") и русский язык, как сэкономить память?

AVP_

✩✩✩✩✩✩✩
3 Фев 2025
5
0
Память МК (флеш) забита впритык, пытаюсь оптимизировать. На дисплей библиотекой GyverOLED выводятся русские сообщения. Трабл в том, что в памяти МК русская буква хранится в UTF-8 если выводить через oled.print(F("текст")). Разбивать на символы не получается с F("").
  • пробовал определять строки как const char имястроки[] PROGMEM = {'т','е','к','с','т'}; - тогда через .print этот const char вывести не могу. Приходится вводить буфер strcpy_P (буфер char[], имястроки); и потом .print буфер. - занимает больше флеш чем при .print (F("")).
  • пробовал сделать .print (F("\однобайтный код символа т\однобайтный код символа е \... ")). НО! не пойму как символы кодируются - подстановкой кодов не нашел большей части строчных русских букв (и часть кодов например 80...100DEC компилятор отрыгивает).
Подскажите пож как __Flash_Helperу скормить подобие {'т','е','к','с','т'} - оно ж хранится по 1 байту и срабатывает через strcpy_P. Или какие еще варианты?

p.s. в первом случае с {'т','е','к','с','т'}; компилятор вываливает warningи, но все-таки компилит и текст выводится норм...Символы действительно занимают ОДИН байт, пробовал заменять их на английские - тот же обьем.
а для .print F("\xxx\...") не могу подобрать коды символов в диапазоне 0...255 для букв а,б.....п. Остальное есть, разбросано хз как по таблице, но выводить можно.
 

Сотнег

★★★★★★★
15 Янв 2020
4,484
1,526
@AVP_,
в слове текст замените 2 буквы на латинские - сэкономите 2 байта.
 

AVP_

✩✩✩✩✩✩✩
3 Фев 2025
5
0
@Сотнег,
это полумеры и к тому же много русских букв нет. В первом случае работает же как-то с одним байтом/рус букву. Надо понять как под F запихнуть нужные коды символов (похоже русские строчные или 80...99 или 180...199 лежат, но как \80 эти символы компилятор не принимает. Например .print ("\200\201\202\203\204") дают "рстуф".
 

AVP_

✩✩✩✩✩✩✩
3 Фев 2025
5
0
@Сотнег,
эээ, интересно... До сих пор считал что запись \200 это имеенно код символа 200 DEC, но сфигали в статье \360 это ОДИН байт (код буквы П). Байты больше 2^8 растянули? или \xxx это не код ххх
 

AVP_

✩✩✩✩✩✩✩
3 Фев 2025
5
0
ооо, так это 8-ричное... ну тогда понятно... Если писать так второй байт буквы без префикса - работает. Но в идеале было бы строки записывать в читаемом формате типа "привет" и заставить компилятор отбрасывать префикс и не хранить его в памяти МК. А уж буквы ё и пару других дорисую как-то
 

AVP_

✩✩✩✩✩✩✩
3 Фев 2025
5
0
@VictorArx,
на просторах тырнета чаще всего пишут ESC коды в виде \360 \200 и т.д. Думал что это код символа в DEC и 360 это больше 255