Кодировка компилятора

xupypr
Offline
Зарегистрирован: 25.01.2016

Приветствую. Подскажите как бороться с кодировкой IDE 

Arduino.

Если обьявлять массив символов и записывать посимвольно русские буквы - все получается нормально. А если присвоить сразу строку русскую, то компилятор начинает творить хрень - между символами еще код вставлять. итого "Привет" вместо 7 байт занимает 13.

char a[13]="Привет";

char b[7]={'П','р','и','в','е','т',0} ;

На порт вывел значения, что хранятся в массивах a и b:
-48
-97
-47
-128
-48
-72
-48
-78
-48
-75
-47
-126
-----
-97
-128
-72
-78
-75
-126

(Получается через символ вставляет код то -48 то -47).
Как кодировку поменять компилятора?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

"Кодировка компилятора" - это сильно! К заявлениям типа "if не работает" уже как-то привык - рутина, а тут, поэзия можно сказать :)

xupypr
Offline
Зарегистрирован: 25.01.2016

Сгинь троль.
В теме написано про ide arduino.
А если сказать нечего, ....

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

xupypr пишет:
Сгинь троль. В теме написано про ide arduino. А если сказать нечего, ....

Брехать - не мешки ворочать. В теме написано:

xupypr пишет:
Как кодировку поменять компилятора?

Или что-то другое?

Да и заголовок тоже никто не отменял. Так что сам сгинь.

uni
uni аватар
Offline
Зарегистрирован: 24.09.2015

Откройте ino-файл в notepad++ и посмотрите какая у него кодировка в статус строке. Такое может быть из-за кодировки текстового файла.

Вот ещё кое-что по теме.

uni
uni аватар
Offline
Зарегистрирован: 24.09.2015

И ещё, у компилятора действительно есть кодировки. Специальными ключами можно указывать комплятору, например, в какой кодировке входные файлы. Большинство современных компиляторов имеют такие ключи. Вы можете даже писать идентификаторы в unicode, т.е. по-русски например. Не знаю точно реализована ли такая возможности именно в avr gcc, но для gcc наверняка можно так делать.

Обычно эти ключи используют для работы со строками. Чтобы не писать функции перекодирования специально для строк можно написать весь файл в нужно кодировке и указать её компилятору. Тогда, если вы писали в CP1251, то в прошивке будут коды из этой кодовой таблицы, если UTF-8 - из этой.

xupypr
Offline
Зарегистрирован: 25.01.2016

Благодарю добрый человек) Попробовал с Notepad++. Поменял на 1251, так ардуино даже 1 раз скомпилила, а после компиляции исправила на UTF-8 и снова стала бить ошибку о размере массива.

в файле Preference.txt arduino поменял параметр preproc.substitute_unicode=false - не помогло.

Как бы можно написать функцию, которая преобразовывает в однобайтовую нужную мне кодировку. НО. Есть НО. Мало у меня памяти осталось под переменные, программа довольно большая, и пошла у меня борьба за каждый байт для переменных. 

Может посоветуете другой IDE под ардуино, посолиднее чем Arduino да с кодировкой cp-1251???

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

xupypr пишет:

Если обьявлять массив символов и записывать посимвольно русские буквы - все получается нормально.


Я именно так и делаю. Это оказалось самым "гуманным" способом. Ардуино ИДЕ - не "любой современный компиллятор". Борьбе с ним, включая данный вопрос, на форуме посвящено множество тем. Победоносных результатов я не видел.

uni
uni аватар
Offline
Зарегистрирован: 24.09.2015

Дело не в IDE, а в параметрах сборки. На самом деле можно использовать любой редактор, а собирать можно из командной строки.

Я недавно написал статью о том как собирать скетчи без IDE Arduino, но с использованием Arduino Framework (набор классов).

Я сам собираю в Notepad++.

uni
uni аватар
Offline
Зарегистрирован: 24.09.2015

Можно ещё попробовать поставить галочку в настройках "Использовать внешний редактор" и скомпилировать. Возможно тогда IDE работает только как просмотрщик и не изменяет кодировку (не пробовал).

vk007
Offline
Зарегистрирован: 16.06.2015

Попробуйте http://arduino.ru/forum/obshchii/arduino-ide-i-kodirovka-iskhodnikov , возможно вам подойдет, но оно для версии 1.0.5.

arduinec
Offline
Зарегистрирован: 01.09.2015

Решение для библиотеки Adafruit-GFX (можно применить и для других библиотек):
http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafru...