реклама на сайте
подробности

 
 
> UNICODE в WinAVR
777777
сообщение Jul 31 2008, 04:42
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Оказывается WinAVR знает о существовании UNICODE. Если написать строку

int Name[] PROGMEM = L"name";

то он ее успешно транслирует. Более того, он знает о существовании типа wchar_t, так как если не поставить L перед строкой, то он выдает ошибку "wchar_t-array initialized from non-wide string". Однако если написать

wchar_t Name[] PROGMEM = L"name";

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

int Name[] PROGMEM = L"Имя устройства";

То он их начисто отказывается понимать. Возникает законный вопрос - насколько далеко у WinAVR просираются знания о UNICODE и если они ограничиваются латинскими буквами - то на фига он нужен?!

Сообщение отредактировал 777777 - Jul 31 2008, 04:46
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ukpyr
сообщение Jul 31 2008, 13:57
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



вообще-то WinAVR - это сборка GCC под Win, AVR-Libc к этому отношения не имеет, поэтому на счет поддержки UNICODE обратитесь к документации на GCC - ведь как-то работают другие программы с UNICODE wink.gif ...
есть там параметры -fexec-charset, -fwide-exec-charset, -finput-charset.
Go to the top of the page
 
+Quote Post
777777
сообщение Jul 31 2008, 15:06
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(ukpyr @ Jul 31 2008, 17:57) *
вообще-то WinAVR - это сборка GCC под Win, AVR-Libc к этому отношения не имеет

Поэтому я пишу в этом разделе, а не в AVR
Цитата(ukpyr @ Jul 31 2008, 17:57) *
поэтому на счет поддержки UNICODE обратитесь к документации на GCC - ведь как-то работают другие программы с UNICODE wink.gif ...

Ну да, в Visual Studio, например, ты просто берешь и пишешь:

И компилятор сразу все понимает без каких-то дополнительных ключей. В конце концов, юникод для того и придумывался, чтобы не думать о кодовых страницах!
Цитата(ukpyr @ Jul 31 2008, 17:57) *
есть там параметры -fexec-charset, -fwide-exec-charset, -finput-charset.

Может тыкнете носом? У меня проблемы с поиском инфы в gcc-шной документации... Прикрепленное изображение

И, все-таки, вопрос к тем, кто делал USB-устройства: неужели вы набивали имя шестнадцатеричными числами?

Сообщение отредактировал 777777 - Jul 31 2008, 15:14
Go to the top of the page
 
+Quote Post
aesok
сообщение Jul 31 2008, 15:39
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(777777 @ Jul 31 2008, 19:06) *
Ну да, в Visual Studio, например, ты просто берешь и пишешь:

И компилятор сразу все понимает без каких-то дополнительных ключей. В конце концов, юникод для того и придумывался, чтобы не думать о кодовых страницах!


А вот Вы не поленитесь и подумайте, в какой кодировке сохранен этот файл? Случайно не в unicode?

А Ваш .с файл (с L"Имя устройства";) в какой? В кодовой станичке 1251? И компилятор дожен сам угадать кодоваю страницу? А что будет этот файл тоже сохранить в unicode?

Анатолий.

Сообщение отредактировал aesok - Jul 31 2008, 15:40
Go to the top of the page
 
+Quote Post
777777
сообщение Aug 1 2008, 06:44
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(aesok @ Jul 31 2008, 19:39) *
А вот Вы не поленитесь и подумайте, в какой кодировке сохранен этот файл? Случайно не в unicode?

Не стоит считать всех идиотами. Разумеется в unicode. Только там для этого не приходится извращаться.
Цитата(aesok @ Jul 31 2008, 19:39) *
А Ваш .с файл (с L"Имя устройства";) в какой? В кодовой станичке 1251? И компилятор дожен сам угадать кодоваю страницу?

Вообще-то нет икаких проблем чтобы угадать кодовую страницу. Простейший notepad позволяет сохранять текстовые файлы в любой кодировке и распознает ее при открытии.
Цитата(aesok @ Jul 31 2008, 19:39) *
А что будет этот файл тоже сохранить в unicode?

Тогда он не будет распознаваться IDE-шным редактором. Да-да, я понимаю, она не имеет отношения к gcc. Один пришивает рукав, другой пуговицы. Только что делать юзеру? Похоже так и придется набивать имя в хексе.

Цитата(ukpyr @ Jul 31 2008, 20:36) *
эти параметры описаны тут :
http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gc...ocessor-Options

-finput-charset задает кодировку исходника,
-fexec-charset - задает кодировку, используемую внутри программы для char строк (по умолчанию UTF-8),
-fwide-exec-charset задает кодировку, используемую внутри программы для wchar строк (UTF-32/16).

Спасибо. Осталось выяснить, что писать после charset=... Там ссылаются на iconv library routine, а в ее хелпе никаких значений не приводится.

Кстати, попробовал написать -finput-charset=1251, в результате получил:
cc1.exe: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
sad.gif(
Цитата(ukpyr @ Jul 31 2008, 20:36) *
В какой кодировке у вас текст ?

В той, которую понимает IDE, т.е. в ANSI. Других она не понимает.

Сообщение отредактировал 777777 - Aug 1 2008, 06:48
Go to the top of the page
 
+Quote Post
aesok
сообщение Aug 1 2008, 07:04
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(777777 @ Aug 1 2008, 10:44) *
Осталось выяснить, что писать после charset=... Там ссылаются на iconv library routine, а в ее хелпе никаких значений не приводится.



http://www.gnu.org/software/libiconv/

CP1251

Это в последний раз когда я за вас думаю.

Анатолий.

Сообщение отредактировал aesok - Aug 1 2008, 07:13
Go to the top of the page
 
+Quote Post
777777
сообщение Aug 1 2008, 07:43
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(aesok @ Aug 1 2008, 11:04) *

Спасибо, но Segmentation fault осталась. Перепробовал много значений, но работает только когда указываешь UTF-8. Надо будет попробовать другие версии WinAVR.
Цитата(aesok @ Aug 1 2008, 11:04) *
Это в последний раз когда я за вас думаю.

smile.gif
Здесь думать не надо, здесь надо уметь искать gnu-тую информацию, а это нелегко. Даже в MSDN при всей ее уродливости можно найти гораздо легче.
Go to the top of the page
 
+Quote Post
aesok
сообщение Aug 1 2008, 13:49
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(777777 @ Aug 1 2008, 11:43) *
Здесь думать не надо, здесь надо уметь искать gnu-тую информацию, а это нелегко. Даже в MSDN при всей ее уродливости можно найти гораздо легче.


www.google.com

Анатолий.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 1 2008, 14:14
Сообщение #9


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



У меня на -finput-charset ругается более определённо:
Код
error: no iconv implementation, cannot convert from UTF-8 to CP866


То же самое и с CP1251.

Тогда я сделал проще.

1. Написал строчку в main.c:
Код
int Name[] PROGMEM = L"Супер-пупер";

2. Открыл main.c в блокноте, и сохранил его в формате UTF-8 (под именем main.txt, чтобы остальные строковые константы не испортить).
3. Открыл main.txt в обычном ascii-редакторе (у меня это редактор FAR-а) и скопировал получившуюся строчку (она выглядит примерно так):
Код
int Name[] PROGMEM = L"РЎС_РїРчС_-РїС_РїРчС_";

в мой main.c.

И телемаркет © smile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 777777   UNICODE в WinAVR   Jul 31 2008, 04:42
- - zltigo   Цитата(777777 @ Jul 31 2008, 06:42) ...то...   Jul 31 2008, 07:12
|- - 777777   Цитата(zltigo @ Jul 31 2008, 11:12) Увы, ...   Jul 31 2008, 09:51
|- - amw   Цитата(777777 @ Jul 31 2008, 12:51) Иногд...   Jul 31 2008, 11:04
|- - mdmitry   Цитата(amw @ Jul 31 2008, 15:04) Прежде ч...   Jul 31 2008, 11:20
|- - zltigo   Цитата(amw @ Jul 31 2008, 13:04) Прежде ч...   Jul 31 2008, 12:19
|- - 777777   Цитата(amw @ Jul 31 2008, 15:04) Прежде ч...   Jul 31 2008, 12:55
|- - amw   Цитата(777777 @ Jul 31 2008, 15:55) Ведь ...   Aug 1 2008, 19:45
|- - AHTOXA   Цитата(amw @ Aug 2 2008, 01:45) А разве U...   Aug 1 2008, 21:40
|- - amw   Цитата(AHTOXA @ Aug 2 2008, 00:40) Компил...   Aug 4 2008, 18:24
|- - 777777   Цитата(AHTOXA @ Aug 1 2008, 18:14) 1. Нап...   Aug 4 2008, 09:42
- - ukpyr   эти параметры описаны тут : http://gcc.gnu.org/onl...   Jul 31 2008, 16:36
- - ukpyr   Ваш редактор не знает UTF-8 ? o_O возмите хотя-бы ...   Aug 1 2008, 17:30
|- - AHTOXA   Цитата(ukpyr @ Aug 1 2008, 23:30) Ваш ред...   Aug 1 2008, 18:27
- - ukpyr   ЦитатаХорошо известно, что юникод поддерживают тол...   Aug 4 2008, 19:04
- - 777777   Цитата(ukpyr @ Aug 4 2008, 23:04) это с ...   Aug 5 2008, 05:30
- - Andrew O. Shadoura   Цитата(777777 @ Aug 5 2008, 08:30) Запуст...   Aug 9 2008, 22:56


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 19:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.0147 секунд с 7
ELECTRONIX ©2004-2016