сорри. В одном случае код
... if (answer == 0) { in=(PIN_DAT_IN) << 2; ... компилируется в
249: if (answer == 0) LDS R24,0x006A Load direct from data space TST R24 Test for Zero or Minus BREQ PC+0x02 Branch if equal RJMP PC+0x0095 Relative jump 252: in=(PIN_DAT_IN) << 2; LDI R30,0x30 Load immediate LDI R31,0x00 Load immediate LDD R24,Z+0 Load indirect with displacement LSL R24 Logical Shift Left LSL R24 Logical Shift Left STD Y+2,R24 Store indirect with displacement
в другом случае(IAR 4.20) в 249: if (!answer) LDS R16,0x00B0 Load direct from data space TST R16 Test for Zero or Minus BREQ PC+0x02 Branch if equal RJMP PC+0x005D Relative jump 251: in=PIN_DAT_IN << 5; IN R16,0x10 In from I/O location MOV R17,R16 Copy register BST R17,3 Bit store from register to T LDI R17,0x00 Load immediate BLD R17,5
разница в операциях со сдвигом это из-за неиспользования остальных бит в дальнейшем компилил в среде CodeBlocks8.02, gcc-avr из установленного WINAVR от 20071221. Мысли о makefile оставил CodeBlocks. сейчас попробую в WINAVR свой маке нарисовать видимо зря доверил маке этой среде... со своим маке
249: if (answer == 0) LDS R24,0x0068 Load direct from data space TST R24 Test for Zero or Minus BREQ PC+0x02 Branch if equal RJMP PC+0x004F Relative jump 252: in=(PIN_DAT_IN) << 2; IN R19,0x10 In from I/O location LSL R19 Logical Shift Left LSL R19 Logical Shift Left спасибо за внимание!
|