Помогите Плиззз
ИАРовский компилятор уомпилит код на Си
неправильно следушим образом
Код следующий
Код
switch (TWSR&0x7F)
{
case 0x60:
{
Temp = TWDR;
}
break;
case 0x68:
asm("nop");
break;
case 0x70:
asm("nop");
break;
case 0x78:
asm("nop");
break;
case 0x80:
asm("nop");
break;
case 0x88:
asm("nop");
break;
default:
asm("nop");
}
Из астудио Дизасемблера получил следующие
Код
103: switch (TWSR&0x7F)
+000001D7: B101 IN R16,0x01 In from I/O location
+000001D8: 770F ANDI R16,0x7F Logical AND with immediate
+000001D9: 5800 SUBI R16,0x80 Subtract immediate
+000001DA: F0A9 BREQ PC+0x16 Branch if equal
+000001DB: 5008 SUBI R16,0x08 Subtract immediate
+000001DC: F0A9 BREQ PC+0x16 Branch if equal
+000001DD: 5D08 SUBI R16,0xD8 Subtract immediate
+000001DE: F039 BREQ PC+0x08 Branch if equal
+000001DF: 5008 SUBI R16,0x08 Subtract immediate
+000001E0: F049 BREQ PC+0x0A Branch if equal
+000001E1: 5008 SUBI R16,0x08 Subtract immediate
+000001E2: F049 BREQ PC+0x0A Branch if equal
+000001E3: 5008 SUBI R16,0x08 Subtract immediate
+000001E4: F049 BREQ PC+0x0A Branch if equal
+000001E5: C00E RJMP PC+0x000F Relative jump
108: Temp = TWDR;
+000001E6: B103 IN R16,0x03 In from I/O location
+000001E7: 9300006B STS 0x006B,R16 Store direct to data space
+000001E9: 9508 RET Subroutine return
113: asm("nop");
+000001EA: 0000 NOP No operation
+000001EB: 9508 RET Subroutine return
117: asm("nop");
+000001EC: 0000 NOP No operation
+000001ED: 9508 RET Subroutine return
121: asm("nop");
+000001EE: 0000 NOP No operation
+000001EF: 9508 RET Subroutine return
125: asm("nop");
+000001F0: 0000 NOP No operation
+000001F1: 9508 RET Subroutine return
129: asm("nop");
+000001F2: 0000 NOP No operation
+000001F3: 9508 RET Subroutine return
132: asm("nop");
+000001F4: 0000 NOP No operation
136: }
+000001F5: 9508 RET Subroutine return
Оптимизация кода в компиляторе отключена
Я писать на Си толька учусь ...
Может гдето ошибка ?? Или глюк ??
Как бороться ??
Спасибо !!