konoval1 0 12 февраля, 2005 Опубликовано 12 февраля, 2005 · Жалоба Замечал несколько раз, что 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 0 12 февраля, 2005 Опубликовано 12 февраля, 2005 · Жалоба У меня 4.20a. При любом уровне оптимизации всегда получаю рабочий вариант (и с AND, и с BIC). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NickS 0 12 февраля, 2005 Опубликовано 12 февраля, 2005 · Жалоба Обратите внимание, что в первом случае используется условная компиляция (andEQ), то есть, скорее всего, в Вашем C коде флаг сбрасывается по условию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 12 февраля, 2005 Опубликовано 12 февраля, 2005 · Жалоба ... скорее всего, в Вашем C коде флаг сбрасывается по условию. <{POST_SNAPBACK}> Даже если и по условию, само тело инструкции ошибочно (R0, R1 ???). Скорее всего, это таки глюк компилятора. Советую обновиться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться