перекодировки с UTF-8 в Windows1251

Обсуждаем контроллеры компании Atmel.
Ответить
Прорезались зубы
Сообщения: 228
Зарегистрирован: Пн окт 04, 2010 11:55:41

Сообщение neid »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4097249#p4097249"]Ящик у него на ардуино, а он за чем-то студию заводит.
Ардуино дает готовый код 0xD0+0x90, нужно преобразовать к символу 0xС0.
За чем нужно обратное преобразование в студии?[/uquote]
взял готовую библиотеку от ардуинщиков и что с того)) и где "ардуино" дает готовый код? продемонстрируйте 0xD0+0x90? так что и делаю - преобразовываю к 0xC0! и где вы увидели обратное преобразование? вот что опять не так то пошло.... :beer:
Реклама
Прорезались зубы
Сообщения: 228
Зарегистрирован: Пн окт 04, 2010 11:55:41

Сообщение neid »

[uquote="slav0n",url="/forum/viewtopic.php?p=4097206#p4097206"]ТС уже б давно кириллицу узрел на своем ящике и без танцев с бубном[/uquote]
Но я же не ТС, имейте терпение!
вот все получилось, ответ из терминала:
Спойлер

Код: Выделить всё

208 , 0 - 
144 , 192 - А
208 , 0 - 
145 , 193 - Б
208 , 0 - 
146 , 194 - В
208 , 0 - 
147 , 195 - Г
208 , 0 - 
148 , 196 - Д
208 , 0 - 
149 , 197 - Е
208 , 0 - 
129 , 168 - Ё
208 , 0 - 
150 , 198 - Ж
208 , 0 - 
151 , 199 - З
208 , 0 - 
152 , 200 - И
208 , 0 - 
153 , 201 - Й
208 , 0 - 
154 , 202 - К
208 , 0 - 
155 , 203 - Л
208 , 0 - 
156 , 204 - М
208 , 0 - 
157 , 205 - Н
208 , 0 - 
158 , 206 - О
208 , 0 - 
159 , 207 - П
208 , 0 - 
160 , 208 - Р
208 , 0 - 
161 , 209 - С
208 , 0 - 
162 , 210 - Т
208 , 0 - 
163 , 211 - У
208 , 0 - 
164 , 212 - Ф
208 , 0 - 
165 , 213 - Х
208 , 0 - 
166 , 214 - Ц
208 , 0 - 
167 , 215 - Ч
208 , 0 - 
168 , 216 - Ш
208 , 0 - 
169 , 217 - Щ
208 , 0 - 
170 , 218 - Ъ
208 , 0 - 
171 , 219 - Ы
208 , 0 - 
172 , 220 - Ь
208 , 0 - 
173 , 221 - Э
208 , 0 - 
174 , 222 - Ю
208 , 0 - 
175 , 223 - Я
208 , 0 - 
176 , 224 - а
208 , 0 - 
177 , 225 - б
208 , 0 - 
178 , 226 - в
208 , 0 - 
179 , 227 - г
208 , 0 - 
180 , 228 - д
208 , 0 - 
181 , 229 - е
209 , 0 - 
145 , 184 - ё
208 , 0 - 
182 , 230 - ж
208 , 0 - 
183 , 231 - з
208 , 0 - 
184 , 232 - и
208 , 0 - 
185 , 233 - й
208 , 0 - 
186 , 234 - к
208 , 0 - 
187 , 235 - л
208 , 0 - 
188 , 236 - м
208 , 0 - 
189 , 237 - н
208 , 0 - 
190 , 238 - о
208 , 0 - 
191 , 239 - п
209 , 0 - 
128 , 240 - р
209 , 0 - 
129 , 241 - с
209 , 0 - 
130 , 242 - т
209 , 0 - 
131 , 243 - у
209 , 0 - 
132 , 244 - ф
209 , 0 - 
133 , 245 - х
209 , 0 - 
134 , 246 - ц
209 , 0 - 
135 , 247 - ч
209 , 0 - 
136 , 248 - ш
209 , 0 - 
137 , 249 - щ
209 , 0 - 
138 , 250 - ъ
209 , 0 - 
139 , 251 - ы
209 , 0 - 
140 , 252 - ь
209 , 0 - 
141 , 253 - э
209 , 0 - 
142 , 254 - ю
209 , 0 - 
143 , 255 - я
осталось все это прикрутить к функции TV.print()
Реклама
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

Так я и не понял
Dimon456 писал(а):Ящик у него на ардуино, а он за чем-то студию заводит?
Для чего студия нужна? Или в студии то же кодировка "от балды"?

Добавлено after 5 hours 46 minutes 16 seconds:
slav0n, все это полное х...
СпойлерИзображение Изображение Изображение
Но зато я посмотрел разницу между С++ и С
Вот С++
Скетч использует 7546 байт (24%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 246 байт (12%) динамической памяти, оставляя 1802 байт для локальных переменных. Максимум: 2048 байт.
А вот на С
Size after:
AVR Memory Usage
----------------
Device: atmega168p

Program: 12552 bytes (76.6% Full)
(.text + .data + .bootloader)

Data: 159 bytes (15.5% Full)
(.data + .bss + .noinit)
7,5кБайт против 12,5кБайт.
Прорезались зубы
Сообщения: 228
Зарегистрирован: Пн окт 04, 2010 11:55:41

Сообщение neid »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4097588#p4097588"]
Dimon456 писал(а):Ящик у него на ардуино, а он за чем-то студию заводит?
Для чего студия нужна? Или в студии то же кодировка "от балды"?

Добавлено after 5 hours 46 minutes 16 seconds:
slav0n, все это полное х... [[/uquote]
А вы хотели Spectrum ZX 128. Размер шрифта уменьшите и разрешение экрана поставьте побольше! Достаточно что бы вывести данные с котла отопления, и не бегать в котельную каждый раз. А раз уж вывели через tv.print поделитесь?) Буквы "Ë" и "ë" я не увидел.
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков

Сообщение slav0n »

Dimon456 писал(а):Но зато я посмотрел разницу между С++ и С
5к серьезный зазор.
И в чем же дело, почему?
ohmycode!
primuss3.com
Контактная информация:
Реклама
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

slav0n, я ошибся, старею, возраст берет свое, в проект ардуино его font6*8 не добавил, кириллицы не было, вот так теперь
Спойлер

Код: Выделить всё

Скетч использует 8570 байт (27%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 246 байт (12%) динамической памяти, оставляя 1802 байт для локальных переменных. Максимум: 2048 байт.
то есть 8,5кБайт против 12,5кБайт.
slav0n писал(а):И в чем же дело, почему?
С++ эффективнее С.
Я использовал версию gcc version 9.2.0.
Вечером, если время будет, попробую на этой версии замутить код с С++.
neid писал(а): Буквы "Ë" и "ë" я не увидел.
а я забыл про эти буквы, вечером гляну.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков

Сообщение slav0n »

Dimon456 писал(а):то есть 8,5кБайт против 12,5кБайт.
Dimon456 писал(а):С++ эффективнее С.
ничосе, аж на 30%!
желаю подробностей
ohmycode!
primuss3.com
Контактная информация:
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

slav0n, тот же самый код на С++
Спойлертолько + с ежиком, занимает

Код: Выделить всё

AVR Memory Usage
----------------
Device: atmega168

Program:    7818 bytes (47.7% Full)
(.text + .data + .bootloader)

Data:        137 bytes (13.4% Full)
(.data + .bss + .noinit)
Изображение
и без всяких танцев с самописным парсером. латин - 8бит, кирилл - 16...
neid писал(а):поделитесь?
Да пожалуйста
Спойлер

Код: Выделить всё

   TV.print(0, 0, "Hello, world!");
   TV.print(0, 8, "АБВГД");
   TV.print(0, 16, "Привет Форум РадиоКот");
   TV.print(0, 24, "Привет radiokot.ru");
	
	TV.delay(1000);
	TV.delay(1000);
	
	  TV.clear_screen();
  x=0;
  y=0;
  for (char i = 32; i < 127; i++) {
    TV.print_char(x*6,y*8,i);
    x++;
    if (x >= TV.char_line()) {
      y++;
      x=0;
    }
  }
  
  	TV.delay(1000);
	TV.delay(1000);
	
	TV.clear_screen();

  x=0;
  y=0;
  for (int i = 0xC0; i < 0X100; i++) {
    TV.print_char(x*6,y*8,i);
    x++;
    if (x >= TV.char_line()) {
      y++;
      x=0;
    }
  }	
  
    TV.delay(1000);
	TV.delay(1000);
	
	TV.clear_screen();
	
	TV.print(0, 8, "Ёжик в тумане");
	TV.print(0, 16, "Ё abc ё help");
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков

Сообщение slav0n »

Dimon456 писал(а):тот же самый код на С++
а ты можешь тему сисий хоть как-то раскрыть? исходные коды, например
ohmycode!
primuss3.com
Контактная информация:
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

Цель эксперимента была определить хоть как-то откуда в ардуино берется "быдло" кодировка.
slav0n писал(а):исходные коды, например
Да бери, не жалко
ProektTV.ZIP
(578.38 КБ) 107 скачиваний
в архиве две папки, одна С другая С++.
С++ соответствует оригиналу arduino-tvout.
Компилятор winavr, gcc version 9.2.0, сборка через Makefile.
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

slav0n, собрал я свой проект С++ в среде ардуино, компилятор avr-dcc от ардуино:
Как собрать
Спойлерсоздать отдельный каталог, к примеру ProektTV_cpp_v2,
скопировать туды содержимое каталога ProektTV_cpp.
Полностью путь получился так C:\Debug\TV\ProektTV_cpp_v2\
Удаляем из каталога ProektTV_cpp_v2 файлики с расширением .lst .o .elf .hex .lss .map все что есть в каталоге .dep

Далее запускаем командную строку
Переходим в рабочий каталог

Код: Выделить всё

cd C:\Debug\TV\ProektTV_cpp_v2\
Ардуиноиде у меня установлена

Код: Выделить всё

C:\arduino-1.8.12\
Последовательно даем команды

Код: Выделить всё

C:\arduino-1.8.12\hardware\tools\avr\bin\avr-g++ -c -mmcu=atmega168 -I. -x c++ -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -fno-exceptions -Wall -Wundef -Wa,-adhlns=./main.lst  -ffunction-sections -fdata-sections -MMD -MP -MF .dep/main.o.d main.cpp -o main.o 

Код: Выделить всё

C:\arduino-1.8.12\hardware\tools\avr\bin\avr-g++ -c -mmcu=atmega168 -I. -x c++ -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -fno-exceptions -Wall -Wundef -Wa,-adhlns=./TVout.lst  -ffunction-sections -fdata-sections -MMD -MP -MF .dep/TVout.o.d TVout.cpp -o TVout.o 

Код: Выделить всё

C:\arduino-1.8.12\hardware\tools\avr\bin\avr-g++ -c -mmcu=atmega168 -I. -x c++ -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -fno-exceptions -Wall -Wundef -Wa,-adhlns=./TVoutPrint.lst  -ffunction-sections -fdata-sections -MMD -MP -MF .dep/TVoutPrint.o.d TVoutPrint.cpp -o TVoutPrint.o 

Код: Выделить всё

C:\arduino-1.8.12\hardware\tools\avr\bin\avr-g++ -c -mmcu=atmega168 -I. -x c++ -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -fno-exceptions -Wall -Wundef -Wa,-adhlns=./video_gen.lst  -ffunction-sections -fdata-sections -MMD -MP -MF .dep/video_gen.o.d video_gen.cpp -o video_gen.o 

Код: Выделить всё

C:\arduino-1.8.12\hardware\tools\avr\bin\avr-g++ -c -mmcu=atmega168 -I. -x c++ -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -fno-exceptions -Wall -Wundef -Wa,-adhlns=./font6x8.lst  -ffunction-sections -fdata-sections -MMD -MP -MF .dep/font6x8.o.d font6x8.cpp -o font6x8.o 
На этом пути файлы .o будут созданы.
Далее даем команду

Код: Выделить всё

C:\arduino-1.8.12\hardware\tools\avr\bin\avr-g++ -mmcu=atmega168 -I. -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o  -std=gnu++11 -MMD -MP -MF .dep/gccout.elf.d main.o TVout.o TVoutPrint.o video_gen.o font6x8.o --output gccout.elf -Wl,-Map=gccout.map,--cref     -lm -Wl,-gc-sections
Будет создан файл .elf для протеуса, уже в протеусе можно будет поиграться.
Даем команду

Код: Выделить всё

C:\arduino-1.8.12\hardware\tools\avr\bin\avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature gccout.elf gccout.hex
Будет создан файл .hex прошивки.
Далее даем команду, если нужно

Код: Выделить всё

C:\arduino-1.8.12\hardware\tools\avr\bin\avr-objdump -h -S -z gccout.elf > gccout.lss
будет создан дизассемблерный листинг.
Следующая команда выдает размер прошивки

Код: Выделить всё

C:\arduino-1.8.12\hardware\tools\avr\bin\avr-size --mcu=atmega168 --format=avr gccout.elf
AVR Memory Usage
----------------
Device: atmega168

Program: 7650 bytes (46.7% Full)
(.text + .data + .bootloader)

Data: 137 bytes (13.4% Full)
(.data + .bss + .noinit)
Ну и версия компилятора, команда

Код: Выделить всё

C:\arduino-1.8.12\hardware\tools\avr\bin\avr-g++ -v
C:\Debug\TV\ProektTV_cpp_v2>C:\arduino-1.8.12\hardware\tools\avr\bin\avr-g++ -v
Using built-in specs.
Reading specs from c:/arduino-1.8.12/hardware/tools/avr/bin/../lib/gcc/avr/7.3.0
/device-specs/specs-avr2
COLLECT_GCC=C:\arduino-1.8.12\hardware\tools\avr\bin\avr-g++
COLLECT_LTO_WRAPPER=c:/arduino-1.8.12/hardware/tools/avr/bin/../libexec/gcc/avr/
7.3.0/lto-wrapper.exe
Target: avr
Configured with: ../gcc/configure --enable-fixed-point --enable-languages=c,c++
--prefix=/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mi
ngw32/objdir --disable-nls --disable-libssp --disable-libada --disable-shared --
with-avrlibc=yes --with-dwarf2 --disable-doc --target=avr --host=i686-w64-mingw3
2
Thread model: single
gcc version 7.3.0 (GCC)
Достаточно подробно, с картинками.

Проверил только в протеусе, в реальном железе не проверял.
Dimon456 писал(а):либо это сюрпрайз от ардуиноиде, либо это особенность С++.
neid писал(а):думаю все ж C++.
Не верно думаете.
В ардуиноиде кодировка от "балды".
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="slav0n",url="/forum/viewtopic.php?p=4097897#p4097897"]желаю подробностей[/uquote]
Для С++ проекта указаны -ffunction-sections и -fdata-sections, а для сишного нет.
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

Reflector писал(а):Для С++ проекта указаны -ffunction-sections и -fdata-sections, а для сишного нет.
А что указать, вот указал

Код: Выделить всё

Compiling C: main.c
avr-gcc -c -mmcu=atmega168p -I. -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./main.lst  -std=gnu99 -ffunction-sections -fdata-sections -MMD -MP -MF .dep/main.o.d main.c -o main.o 
Size after:
AVR Memory Usage
----------------
Device: atmega168p

Program: 12552 bytes (76.6% Full)
(.text + .data + .bootloader)

Data: 159 bytes (15.5% Full)
(.data + .bss + .noinit)
Что-то не влияет, может не там указал?
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

Код: Выделить всё

# Внимание. Те функции, которые не вызываются, не включаются в объектный файл.
LDFLAGS += -Wl,-gc-sections
Еще и -flto нет...
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

Reflector писал(а):LDFLAGS += -Wl,-gc-sections
феноменально
Спойлер
Size after:
AVR Memory Usage
----------------
Device: atmega168p

Program: 7696 bytes (47.0% Full)
(.text + .data + .bootloader)

Data: 157 bytes (15.3% Full)
(.data + .bss + .noinit)
А я думал, что все лишнее по удалял.
Reflector писал(а):Еще и -flto нет...
Спойлер
AVR Memory Usage
----------------
Device: atmega168p

Program: 4950 bytes (30.2% Full)
(.text + .data + .bootloader)

Data: 107 bytes (10.4% Full)
(.data + .bss + .noinit)
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков

Сообщение slav0n »

Dimon456 писал(а):Цель эксперимента была определить хоть как-то откуда в ардуино берется "быдло" кодировка.
как маленький, ейбогу
ohmycode!
primuss3.com
Контактная информация:
Прорезались зубы
Сообщения: 228
Зарегистрирован: Пн окт 04, 2010 11:55:41

Сообщение neid »

Dimon456 писал(а):Цель эксперимента была определить хоть как-то откуда в ардуино берется "быдло" кодировка.
Так и откуда ж она берется?
Dimon456 писал(а):Да бери, не жалко.
ProektTV.ZIP
в архиве две папки, одна С другая С++.
С++ соответствует оригиналу arduino-tvout.
Компилятор winavr, gcc version 9.2.0, сборка через Makefile.
Спасибо, некоторые моменты для себя прояснил по поводу если проект просто в С переводить.
Второе, понял как делать перекодировку.
Dimon456 писал(а):LDFLAGS += -Wl,-gc-sections и -flto нет...
Можно понять что это за строки и почему стало 7,6кБ вдруг 4.9кб? Где об этом почитать?
Program: 4950 bytes (30.2% Full)
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

neid, как тебе такой вариант?
СпойлерСкрестил аля TVout от ардуино с SPI, на 168меге с 1к ОЗУ на борту
Изображение

Код: Выделить всё

char *text[] =	
	{
		"*******************************",
		"*12345678901234567890123456789*",
		"* Version 0.1                 *",
		"*ABCDEFGHIJKLMNOPQRSTUVWXYZ   *",
		"*abcdefghijklmnopqrstuvwxyz   *",
		"*АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫ*",
		"*ЬЭЮЯ                         *",
		"*абвгдеёжзийклмнопрстуфхцчшщъы*",
		"*ьэюя                         *",
		"*                             *",
		"* Ё abc ё help                *",
		"*                             *",
		"* Привет radiokot.ru          *",
		"*                             *",
		"*******************************",		
	};
Прорезались зубы
Сообщения: 228
Зарегистрирован: Пн окт 04, 2010 11:55:41

Сообщение neid »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4099564#p4099564"]Скрестил аля TVout от ардуино с SPI, на 168меге с 1к ОЗУ на борту[/uquote]
Да картинка интересней, какое разрешение, 320x200? В интернете видел еще пару вариантов вывода, в одном применение asm("sleep\n");, как выводят вникать не стал... Он то как раз и давал 320x200. А шрифт более большой использовать? Код покомпактней получился по сравнению с первым вариантом TVout?
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

neid писал(а):В интернете видел еще пару вариантов вывода
В этом варианте вывод синхронизации висит на аппаратном таймере OC1A, уже минимум телодвижений требуется.
neid писал(а):Он то как раз и давал 320x200
Что есть 320 точек?
У меня шрифт используется 8*12, по ширине залез 31 символ, в высоту 15 символов, и если это посчитать грубо то получается 248*180 точек, здесь не учитывается интервал между символами равный 0,3125 мкс, а прорисовка одной точки занимает 0,125 мкс, то есть идет потеря между символами 2,5 точки. Если я правильно посчитал, то этот интервал дает еще 75 точек.
На STM с помощью DMA можно протащить без этого интервала.

Если подредактировать пару буковок, то шрифт можно уменьшить до 8*10, тогда и в высоту больше влезет.
neid писал(а):Код покомпактней получился
Что есть компактный код?
Шрифт 8*12 256 символов уже 3к коду дает.
Ответить

Вернуться в «AVR»