Перейти к содержанию
    

Баг IAR 7.80.4 (ARM) при работе с float.

8 минут назад, jcxz сказал:

Но если целевая переменная в памяти - u16, то не поможет:

Гм... нехорошо. Ждём-с ответа шведов:crazy: Но вот действительно вопрос: как жи никто не напоролся на этот баг? Хотя бы на этом форуме кто-то же должен был. Я тоже не работаю активно с float, да и не всегда с cortex-m4f. Может быть народ просто молчал, думая, что это их собственный глюк, но никак ни компилятора...

Изменено пользователем MrBearManul

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, MrBearManul сказал:

Но вот действительно вопрос: как жи никто не напоролся на этот баг?

Каков процент пользователей IAR из общего количества эмбеддеров? Сколько из них пользуется float? Как  часто те кто пользуется умножают на 2^n и усекают до 16 бит?

Лично я последний раз в 2006 году использовал плавучку и то в double.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 минут назад, VladislavS сказал:

Лично я последний раз в 2006 году использовал плавучку

:biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вобщем шведы признали баг существующим, поблагодарили и взяли время на обдумывание.

Наверное это всё будет не быстро, так как Christmas на носу...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, jcxz сказал:

поблагодарили и взяли время на обдумывание

Спасибо, что пишите/создаете интересные посты/темы. Я ИАР-ом никогда не пользовался (может очень давно для пик-ов пробовал один просто раз запустить/посмотреть и все) и надеюсь не буду им пользоваться. Но в этой теме некоторое кол-во полезной инфы подчерпнул как всегда. Просто случайно видел несколько раз, что на радиохвосте Вас постоянно минусуют просто так и от нечего делать (а скорее видать там "каста" какая-то "избранных" и пр.) и решил по справедливости поблагодарить хотя бы тут (на радиокоте не участвую).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

49 минут назад, AleksBak сказал:

радиохвосте Вас постоянно минусуют просто так

Это же форум радиолюбителей, т.е. непрофессионалов. Им простительно непонимать некоторые наши заморочки. Хотя несколько толковых людей, которые делают уникальные вещи на очень высоком уровне там есть.

50 минут назад, AleksBak сказал:

Спасибо, что пишите/создаете интересные посты/темы.

+1!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Наконец-то появились подвижки по этому багу.  :dance4:

Сегодня от IAR получил письмо: багу присвоен идентификатор "EWARM-8271" и исправление его поставлено в план на 2-й квартал этого года.

Ближайшая версия IAR выйдет уже скоро и ещё с этим багом, а потом вроде будет какой-то сервис-пак, который его пофиксит.

Причину его они вроде уже нашли и это гуд! Вот что пишут:

The compiler-developer (who has made the initial examination) has found (1) reason for the bug and a suggestion (2) for a workaround.
His comments:
(1) This bug triggers in all optimization levels as it occurs in the phase where instructions are selected.
(2) The problem is that the signedness of res16/res32 is used. Declaring these as signed is a workaround.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вчера получил хорошую весть от IAR-овцев по поводу этого бага:

The bug got so much attention so it will be corrected in version 9.10.1.
(I earlier informed you that correction wa planned in the next service pack 9.10.2) 
So instead of having to wait till May (for the 9.10.2) the bug will be corrected in 9.10.1 in February/March,

Так что в ближайшем выпуске ждём исправления.   :dance4:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пофиксили. Должно заработать. Но что-то я не уверен в оптимальности того что получается.

Вот, например, на "size"

        VMOV.F32 S0,#8.0                        
//res16 = (int)(x * 8) + 0x00008000ul;  
        VLDR     S1,[R1, #0]    
        VMUL.F32 S1,S1,S0       
        VCVT.S32.F32 S1,S1          
        VMOV     R3,S1          
        SUB      R3,R3,#+32768           

//res32 = (int)(x * 16) + 0x00008000ul;  
        VLDR     S0,[R1, #0]    
        VCVT.S32.F32 S0,S0,#+4      
        VMOV     R4,S0          
        ADD      R4,R4,#+32768  

А это на "speed"

//res16 = (int)(x * 8) + 0x00008000ul;  
        VLDR     S0,[R2, #0]    
        VCVT.S32.F32 S0,S0,#+3      
        VMOV     R3,S0          
        SUB      R3,R3,#+32768  

//res32 = (int)(x * 16) + 0x00008000ul; 
        VMOV.F32 S0,#16.0       
        VLDR     S1,[R2, #0]    
        VMUL.F32 S1,S1,S0       
        VCVT.S32.F32 S1,S1          
        VMOV     R3,S1          
        ADD      R3,R3,#+32768 

PS: Я правда циклы и загрузки в память из памяти в листинге почикал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...