Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подозреваю IAR 4.10b
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
konoval1
Замечал несколько раз, что IAR 4.10b неправильно компилирует с С. Но потом обнаружил, что была включена оптимизация, и свалил на это.
А сегодня точно увидел, что одну и ту же программу компилирует по разному.

Flagi &= ~1 ; // sbros flaga PRM

0x400001F4 E59F3010 LDR R3, [PC, #+16] ; [0x4000020C] =Flagi (0x40002088)
0x400001F8 E593C000 LDR R12, [R3, #+0]
0x400001FC 00000001 ANDEQ R0, R0, R1
0x40000200 E583C000 STR R12, [R3, #+0]


Flagi &= ~1 ; // sbros flaga PRM

0x400001F4 E59F3010 LDR R3, [PC, #+16] ; [0x4000020C] =Flagi (0x40002088)
0x400001F8 E593C000 LDR R12, [R3, #+0]
0x400001FC E3DCC001 BICS R12, R12, #0x1
0x40000200 E583C000 STR R12, [R3, #+0]

И первый код, естественно, не работает. Как такое может быть? Может что поставил не так?
IgorKossak
У меня 4.20a.
При любом уровне оптимизации всегда получаю рабочий вариант (и с AND, и с BIC).
NickS
Обратите внимание, что в первом случае используется условная компиляция (andEQ), то есть, скорее всего, в Вашем C коде флаг сбрасывается по условию.
IgorKossak
Цитата(NickS @ Feb 12 2005, 17:55)
... скорее всего, в Вашем C коде флаг сбрасывается по условию.
*

Даже если и по условию, само тело инструкции ошибочно (R0, R1 ???).
Скорее всего, это таки глюк компилятора.
Советую обновиться.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.