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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> В IAR 5.4 нашел баг
MALLOY2
сообщение Oct 1 2009, 07:43
Сообщение #1


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Точнее это не баг, а скорее неудобство, для IAR это фича, при компиляции асмовских файлов (*.s) если в коментах встречается буква "я", компилятор выдает ошибку

Цитата
Error[4]: Unexpected end of file encountered D:\DEVELOP\Filin\FirmWare\Source\Internet_crc.s 52
Error while running Assembler


в младших версиях такого не наблюдал.
Go to the top of the page
 
+Quote Post
uriy
сообщение Oct 1 2009, 08:48
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Пишите большую букву Я если сильно хочется использовать кириллицу. Код маленькой буквы я совпадает с символом конца файла.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Oct 1 2009, 10:37
Сообщение #3


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Старые версии MATLAB этим тоже грешили.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
KRS
сообщение Oct 1 2009, 20:19
Сообщение #4


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(uriy @ Oct 1 2009, 12:48) *
Код маленькой буквы я совпадает с символом конца файла.

Это как он может совпадать? Код я - 255 ( в Win1251) , а конец файла ^Z( 26 = 0x1A)
Go to the top of the page
 
+Quote Post
fmdost
сообщение Oct 1 2009, 20:39
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



Цитата(KRS @ Oct 2 2009, 00:19) *
Это как он может совпадать? Код я - 255 ( в Win1251) , а конец файла ^Z( 26 = 0x1A)

В KEILе, в отладчике, терминал "я" тоже не кажет.
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 1 2009, 23:35
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(KRS @ Oct 2 2009, 02:19) *
Это как он может совпадать? Код я - 255 ( в Win1251) , а конец файла ^Z( 26 = 0x1A)
Маленькую "я" не только компиляторы не любят. Например, стандартная программка из комплекта Windows "Таблица символов" (\system32\charmap.exe) не переносит. Запустите программу. Выберите любой TrueType шрифт. Откройте доп. параметры просмотра. Смените кодировку на любую другую, отличающуюся от Юникод. Например, Windows: кириллица. А теперь прокрутите лифт окна символов до маленькой "я". Получилось? wink.gif У меня нет. Программа аварийно завершается laughing.gif
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 2 2009, 00:21
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(rezident @ Oct 2 2009, 03:35) *
Получилось? wink.gif У меня нет. Программа аварийно завершается laughing.gif

Гы, а у меня получается без проблем.

А вообще, ИМХО, стоит избегать кириллицы в путях, именах пользователей и, конечно, в исходных текстах.
Английским языком на уровне написания лаконичных комментариев уважающий себя инженер владеть обязан.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 2 2009, 01:49
Сообщение #8


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

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



А ещё виндовый гипертерминал "я" проглатывает.

Цитата(aaarrr @ Oct 2 2009, 06:21) *
А вообще, ИМХО, стоит избегать кириллицы в путях, именах пользователей и, конечно, в исходных текстах.


Это конечно да, но иногда надо выводить русские надписи для пользователяsmile.gif Поэтому я использую кодировку DOS, там "я" на другом месте, и всё замечательно отображается.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Xenia
сообщение Oct 2 2009, 22:27
Сообщение #9


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Если речь идет о компиляторе для ARM, то позавчера вышел новый билд 5.40.4 build 1619 (full-версия). Выложена на FTP. Просьба испытать и сообщить, как у нее обстоит дело с буквой 'я'.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 2 2009, 22:34
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Xenia @ Oct 3 2009, 01:27) *
Просьба испытать и сообщить, как у нее обстоит дело с буквой 'я'.

Полагаю, что не для того в IAR вводили фичу - дополнительный разделитель 0xFF дабы по стонам на электрониксе его сразу и убирать.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Xenia
сообщение Oct 4 2009, 20:50
Сообщение #11


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(zltigo @ Oct 3 2009, 02:34) *
Полагаю, что не для того в IAR вводили фичу - дополнительный разделитель 0xFF дабы по стонам на электрониксе его сразу и убирать.

И тем не менее, в новой версии от 1 октября (5.40.4 build 1619 full) баг пропал!
Я не стала дожидаться пока народ отгуляет выходные и проинсталлировала новый продукт у себя. Инсталляется долго, но это не удивительно - компиляторы для ARM великаны по сравнению с остальными. Запустила на компиляцию один из примеров из папки "\example" и убедившись, что компиляция прошла успешно без ошибок и варнингов, отредактировала одну и строковых переменных, заменив в ней английские буквы русскими. Естественно, включяя злополучную маленькую "я". Повторная компиляция прошла нормально, без сучка и задоринки. Вообще-то с архитектурой ARM я дела никогда не имела, но компиляторы от IAR все на одно лицо. На всякий случай прошу поверить мой результат.
Полагаю, что дело тут не в стонах на электрониксе, а в вещах куда более серьезных - совсем недавно (21 сентября) была проведена "японизация" - выпущена версия EWARM-5401J. Я сначала подумала, что буква J относится к номеру версии, т.к. частенько у IAR'а выходят версии, маркируемые на конце буквой, и лишь недавно они перешли чисто на числовую кодировку (и то не везде). Я уж его на FTP успела выложить, а когда поняла, что это японская версия, стерла.
Вот и нынешняя версия несет на себе явные следы японизации - слово "Japanese" с мелким японским национальным флажком в правом верхнем углу заставки инсталлятора, и предложение двух языков на выбор - английского и японского (других нет).
Весьма вероятно, что символ 0xFF стал допустим из-за того, что компилятор они написали в расчете на юникод. Иначе японскую письменность никак не поддержать. Однако выбрала я при инсталляции английский вариант, в котором ничего японского не обнаружила. Все хелпы по-английски.
Короче говоря, всем рекомендую эту версию. Выложила на FTP, куда положено.
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Oct 5 2009, 14:21
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(Xenia @ Oct 5 2009, 00:50) *
И тем не менее, в новой версии от 1 октября (5.40.4 build 1619 full) баг пропал!

Только что попробовал. Никуда не пропал, все на месте.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
Xenia
сообщение Oct 5 2009, 16:15
Сообщение #13


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Andy Mozzhevilov @ Oct 5 2009, 18:21) *
Только что попробовал. Никуда не пропал, все на месте.


Прошляпила, что баг касается языка ассемблера. На C и C++ он, по-видимому, не проявляется.
Если так, то дело не так плохо - на ассемблере для ARM мало кто пишет smile.gif. А если пишет, то в комментариях можно вполне обойтись без буквы я.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 8 2009, 00:38
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Всем доброго времени суток!
Не стал создавать новую тему потому как мож у меня моск под утро двинулся.
IAR C/C++ Compiler for ARM 5.40.1.51558 (5.40.1.51558). Код:
Код
...
INT i, sw_size, cnt, i_head, free;
...
/* Get SW FIFO fields */
        ptr = p_eps->data;
        sw_size = p_eps->sw_size;    
        i_head = p_eps->i_head;
        free = sw_size - p_eps->len;    /* Calculate size for new data payload */
...
while(free--)    /* Read new data */
{
     ptr[i_head++] = AT91C_BASE_UDP->UDP_FDR[ep];
    if(i_head >= sw_size)
          i_head = 0;
}

переменная free не может быть меньше нуля, так как sw_size не может быть меньше len.
Поясню - sw_size - это размер FIFO буфера, len- количество полезных данных в пакете.
При очередном зависоне торможу программу и вижу, что sw_size равно len, при этом free в минусе wacko.gif blink.gif
Если вместо while(free--) ставлю for(i = 0; i < free; i++) все работает прекрасно.
Вот такая ботва. Тока не пойму, у меня в голове или баг компилятора.


--------------------
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 8 2009, 00:46
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Для начала проверьте, не случается ли у вас, что free изначально меньше нуля (ловушку какую-нибудь влепите). Ну, и дизассемблер "подозрительной" части выложите.
ИМХО, вероятность того, что это глюк ИАРа стремится к нулю, хе-хе smile.gif
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 8 2009, 00:51
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(aaarrr @ Nov 8 2009, 07:46) *
Для начала проверьте, не случается ли у вас, что free изначально меньше нуля (ловушку какую-нибудь влепите). Ну, и дизассемблер "подозрительной" части выложите.
ИМХО, вероятность того, что это глюк ИАРа стремится к нулю, хе-хе smile.gif
...Ботва в голове все же...Пошел спать, рыдая.


--------------------
Go to the top of the page
 
+Quote Post
Alechek
сообщение Nov 26 2009, 06:00
Сообщение #17


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

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



А я так и не смог заставить
iccarm.exe
IAR ANSI C/C++ Compiler V5.40.0.21500/W32 EVALUATION for ARM
переварить
#pragma message("text")

Кушать то кушает, но на выходе ничего нет. Примечания разрешал - тишина.


--- добавка ---
проверил руками: кушает и переваривает. вот только в IDE оно почему-то не передается... sad.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 26 2009, 09:09
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Alechek @ Nov 26 2009, 08:00) *
--- добавка ---
проверил руками: кушает и переваривает. вот только в IDE оно почему-то не передается... sad.gif
Tools->Options->Messages->Show build messages->All. Во всяком случае в оболочках 4.XX там было.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
atlantic
сообщение Jan 26 2010, 08:53
Сообщение #19


участник
****

Группа: Свой
Сообщений: 573
Регистрация: 16-02-06
Пользователь №: 14 402



Цитата(MALLOY2 @ Oct 1 2009, 11:43) *
Точнее это не баг, а скорее неудобство, для IAR это фича, при компиляции асмовских файлов (*.s) если в коментах встречается буква "я", компилятор выдает ...


IAR Assembler for MSP430 v 4.21.6:

Думал, что это уже давно починили, а нет, в этой версии откатили назад:
ругается на символах в Си комментариях //
(Error[15] Invalid character encountered):
e0 e5 e8 ea eb ed ef f0 f2 f9 ff - - - аеиклнпртщя

если начало // комментариев заменить на ;
то работает до "я" - неожиданный конец

В предыдущей версии 4.20 все работало.

Интересно зачем они парсят комментарии, неужели там в асме могут быть как в verilog meta-comments ?
Go to the top of the page
 
+Quote Post
ZZmiy
сообщение Mar 14 2010, 12:59
Сообщение #20





Группа: Новичок
Сообщений: 1
Регистрация: 26-09-07
Пользователь №: 30 846



Цитата
при компиляции асмовских файлов (*.s) если в коментах встречается буква "я"


Не только в комментариях, но и в коде (например, DB 'я')...

Исправление бага при компиляции ассемблером файлов, содержащих маленькую русскую букву 'я' в кодировке WIN (код 0xFF):
(для a430.exe размером 2,035,712 (IAR Assembler V4.21.2.50066/W32 for MSP430))

Сравнение файлов a430.exe и a430patched.exe:
000250C1: BE B6
000250C3: 16 32

Для других версий a430.exe попробуйте найти последовательность кодов A3CC795F00 0FBE0416 03D53BD1 и заменить 0FBE0416 (код команды movsx eax,byte ptr [esi+edx]) на 0FB60432 (код команды movzx eax,byte ptr [esi+edx]).

Для icc430.exe это не подходит... smile.gif Попробуйте в С-код вставить asm("mov r12,r12 ;я"); и скомпилировать...
Go to the top of the page
 
+Quote Post
atlantic
сообщение Mar 15 2010, 19:56
Сообщение #21


участник
****

Группа: Свой
Сообщений: 573
Регистрация: 16-02-06
Пользователь №: 14 402



Цитата(ZZmiy @ Mar 14 2010, 16:59) *
Не только в комментариях, но и в коде (например, DB 'я')...

Исправление бага при компиляции ассемблером файлов, содержащих маленькую русскую букву 'я' в кодировке WIN (код 0xFF):
(для a430.exe размером 2,035,712 (IAR Assembler V4.21.2.50066/W32 for MSP430))

Сравнение файлов a430.exe и a430patched.exe:
000250C1: BE B6
000250C3: 16 32

Для других версий a430.exe попробуйте найти последовательность кодов A3CC795F00 0FBE0416 03D53BD1 и заменить 0FBE0416 (код команды movsx eax,byte ptr [esi+edx]) на 0FB60432 (код команды movzx eax,byte ptr [esi+edx]).

Для icc430.exe это не подходит... smile.gif Попробуйте в С-код вставить asm("mov r12,r12 ;я"); и скомпилировать...


Что-то патчить ассемблер абсолютно неприкалывает, тем более что
Цитата
> В предыдущей версии 4.20 все работало.


Вопрос был в другом, зачем они комменты парсят %) ?
(если точнее сказать, зачем внутри комментариев ищут что-то отличное от признака конца комментария)

И до каких пор 0xff для них будет признаком конца файла?
Что-то у них там неправильно с системностью.

Это скорее был вопрос/просьба к тем, кто с ихним суппортом официально общается, чтоб им ask/"намекнули" : )
Go to the top of the page
 
+Quote Post
VslavX
сообщение Mar 24 2010, 17:38
Сообщение #22


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(atlantic @ Mar 15 2010, 21:56) *
Что-то патчить ассемблер абсолютно неприкалывает, тем более что

Вопрос был в другом, зачем они комменты парсят %) ?

Парсинг каментов - это капут. У меня в ассемблере инклудится многоуровневая конфигурация в виде вложенных h-файлов, там только куча #define-ов и других препроцессорных команд, и довольно много русскоязычных комментариев (это ж конфигурация, 90% специфично для проекта). Ото оно все радовалось "по самое не могу".

Сегодня еще классную фишку "нарыл". Проц - LPC1768, невыравненый доступ запрещен (отладка суровая идет), исключения летят вовсю. Разбираюсь, компилятору (5.41A) дан флажок --no_unaligned_access, он корректно генерирует вызов функции __eeabi_uread4, а там вот такой милый код:
Код
00000000 <__aeabi_uread4>:
   0:    6800          ldr    r0, [r0, #0]
   2:    4770          bx    lr
Go to the top of the page
 
+Quote Post
miv
сообщение Apr 16 2010, 12:23
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 29-08-05
Из: С-Петербург
Пользователь №: 8 055



Цитата(prottoss @ Nov 8 2009, 04:53) *
Всем доброго времени суток!
Не стал создавать новую тему потому как мож у меня моск под утро двинулся.
IAR C/C++ Compiler for ARM 5.40.1.51558 (5.40.1.51558). Код:
Код
...
INT i, sw_size, cnt, i_head, free;
...
/* Get SW FIFO fields */
        ptr = p_eps->data;
        sw_size = p_eps->sw_size;    
        i_head = p_eps->i_head;
        free = sw_size - p_eps->len;    /* Calculate size for new data payload */
...
while(free--)    /* Read new data */
{
     ptr[i_head++] = AT91C_BASE_UDP->UDP_FDR[ep];
    if(i_head >= sw_size)
          i_head = 0;
}

переменная free не может быть меньше нуля, так как sw_size не может быть меньше len.
Поясню - sw_size - это размер FIFO буфера, len- количество полезных данных в пакете.
При очередном зависоне торможу программу и вижу, что sw_size равно len, при этом free в минусе wacko.gif blink.gif
Если вместо while(free--) ставлю for(i = 0; i < free; i++) все работает прекрасно.
Вот такая ботва. Тока не пойму, у меня в голове или баг компилятора.

Если Вы тормозите программу после исполнения while так оно и д.б.
Поскольку sw_size равно len, то free == 0 а следовательно при первом же while( free-- ) тело while испонятся не будет а free сразу после выхода free будет == -1 поскольку он int типа. Так устроен язык С
а с циклом for тело его тоже выполнятся не будет но free не станет -1 и даже i не станет 1. wink.gif

Сообщение отредактировал miv - Apr 16 2010, 12:24
Go to the top of the page
 
+Quote Post
halfdoom
сообщение Aug 6 2010, 14:27
Сообщение #24


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

Группа: Свой
Сообщений: 1 003
Регистрация: 20-01-05
Пользователь №: 2 072



Лечение aavr.exe 5-50 от заякания в комментариях:
CODE
Сравнение файлов aavr.old и AAVR.EXE
0000AF21: BE B6
Go to the top of the page
 
+Quote Post
kv_addr
сообщение May 23 2011, 02:55
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 208
Регистрация: 6-07-04
Из: Полтава
Пользователь №: 279



Цитата(halfdoom @ Aug 6 2010, 17:27) *
Лечение aavr.exe 5-50 от заякания в комментариях:
Код
Сравнение файлов aavr.old и AAVR.EXE
0000AF21: BE B6

Для aavr.exe v5.51 - патчить в том же месте.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 09:01
Рейтинг@Mail.ru


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