Замечал несколько раз, что 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]
И первый код, естественно, не работает. Как такое может быть? Может что поставил не так?