Обсуждаем контроллеры компании Atmel.
Ответить

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

Вс сен 26, 2021 22:56:09

Ящик у него на ардуино, а он за чем-то студию заводит.
Ардуино дает готовый код 0xD0+0x90, нужно преобразовать к символу 0xС0.
За чем нужно обратное преобразование в студии?

взял готовую библиотеку от ардуинщиков и что с того)) и где "ардуино" дает готовый код? продемонстрируйте 0xD0+0x90? так что и делаю - преобразовываю к 0xC0! и где вы увидели обратное преобразование? вот что опять не так то пошло.... :beer:

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

Пн сен 27, 2021 11:56:03

ТС уже б давно кириллицу узрел на своем ящике и без танцев с бубном

Но я же не ТС, имейте терпение!
вот все получилось, ответ из терминала:
Спойлер
Код:
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()

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

Пн сен 27, 2021 20:47:44

Так я и не понял
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кБайт.

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

Пн сен 27, 2021 21:28:37

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

Добавлено after 5 hours 46 minutes 16 seconds:
slav0n, все это полное х... [

А вы хотели Spectrum ZX 128. Размер шрифта уменьшите и разрешение экрана поставьте побольше! Достаточно что бы вывести данные с котла отопления, и не бегать в котельную каждый раз. А раз уж вывели через tv.print поделитесь?) Буквы "Ë" и "ë" я не увидел.

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

Вт сен 28, 2021 01:54:31

Dimon456 писал(а):Но зато я посмотрел разницу между С++ и С
5к серьезный зазор.
И в чем же дело, почему?

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

Вт сен 28, 2021 08:37:19

slav0n, я ошибся, старею, возраст берет свое, в проект ардуино его font6*8 не добавил, кириллицы не было, вот так теперь
Спойлер
Код:
Скетч использует 8570 байт (27%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 246 байт (12%) динамической памяти, оставляя 1802 байт для локальных переменных. Максимум: 2048 байт.
то есть 8,5кБайт против 12,5кБайт.
slav0n писал(а):И в чем же дело, почему?
С++ эффективнее С.
Я использовал версию gcc version 9.2.0.
Вечером, если время будет, попробую на этой версии замутить код с С++.
neid писал(а): Буквы "Ë" и "ë" я не увидел.
а я забыл про эти буквы, вечером гляну.

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

Вт сен 28, 2021 09:29:21

Dimon456 писал(а):то есть 8,5кБайт против 12,5кБайт.
Dimon456 писал(а):С++ эффективнее С.
ничосе, аж на 30%!
желаю подробностей

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

Вт сен 28, 2021 17:28:38

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");

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

Вт сен 28, 2021 19:35:02

Dimon456 писал(а):тот же самый код на С++
а ты можешь тему сисий хоть как-то раскрыть? исходные коды, например

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

Вт сен 28, 2021 19:57:22

Цель эксперимента была определить хоть как-то откуда в ардуино берется "быдло" кодировка.

slav0n писал(а):исходные коды, например
Да бери, не жалко
ProektTV.ZIP
(578.38 KiB) Скачиваний: 87
в архиве две папки, одна С другая С++.
С++ соответствует оригиналу arduino-tvout.
Компилятор winavr, gcc version 9.2.0, сборка через Makefile.

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

Ср сен 29, 2021 09:17:27

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++.
Не верно думаете.
В ардуиноиде кодировка от "балды".

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

Ср сен 29, 2021 09:19:17

желаю подробностей

Для С++ проекта указаны -ffunction-sections и -fdata-sections, а для сишного нет.

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

Ср сен 29, 2021 09:31:07

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)
Что-то не влияет, может не там указал?

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

Ср сен 29, 2021 09:40:10

Код:
# Внимание. Те функции, которые не вызываются, не включаются в объектный файл.
LDFLAGS += -Wl,-gc-sections

Еще и -flto нет...

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

Ср сен 29, 2021 10:05:14

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)

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

Ср сен 29, 2021 10:28:42

Dimon456 писал(а):Цель эксперимента была определить хоть как-то откуда в ардуино берется "быдло" кодировка.
как маленький, ейбогу

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

Ср сен 29, 2021 16:56:54

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)

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

Пт окт 01, 2021 20:56:13

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

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

Сб окт 02, 2021 08:22:50

Скрестил аля TVout от ардуино с SPI, на 168меге с 1к ОЗУ на борту

Да картинка интересней, какое разрешение, 320x200? В интернете видел еще пару вариантов вывода, в одном применение asm("sleep\n");, как выводят вникать не стал... Он то как раз и давал 320x200. А шрифт более большой использовать? Код покомпактней получился по сравнению с первым вариантом TVout?

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

Сб окт 02, 2021 22:34:29

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к коду дает.
Ответить