|
В IAR 5.4 нашел баг |
|
|
|
Nov 26 2009, 06:00
|
Профессионал
    
Группа: Свой
Сообщений: 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 оно почему-то не передается...
|
|
|
|
|
Jan 26 2010, 08:53
|
участник
   
Группа: Свой
Сообщений: 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 ?
|
|
|
|
|
Mar 14 2010, 12:59
|
Группа: Новичок
Сообщений: 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 это не подходит...  Попробуйте в С-код вставить asm("mov r12,r12 ;я"); и скомпилировать...
|
|
|
|
|
Mar 15 2010, 19:56
|
участник
   
Группа: Свой
Сообщений: 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 это не подходит...  Попробуйте в С-код вставить asm("mov r12,r12 ;я"); и скомпилировать... Что-то патчить ассемблер абсолютно неприкалывает, тем более что Цитата > В предыдущей версии 4.20 все работало. Вопрос был в другом, зачем они комменты парсят %) ? (если точнее сказать, зачем внутри комментариев ищут что-то отличное от признака конца комментария) И до каких пор 0xff для них будет признаком конца файла? Что-то у них там неправильно с системностью. Это скорее был вопрос/просьба к тем, кто с ихним суппортом официально общается, чтоб им ask/"намекнули" : )
|
|
|
|
|
Mar 24 2010, 17:38
|

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
|
|
|
|
|
Apr 16 2010, 12: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 в минусе Если вместо 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.
Сообщение отредактировал miv - Apr 16 2010, 12:24
|
|
|
|
|
May 23 2011, 02:55
|

Местный
  
Группа: Свой
Сообщений: 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 - патчить в том же месте.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|