1-й случай.
CODE
55 void CSmcsCh::ledTask()
56 {
57 ledState = !ledState;
\ _ZN7CSmcsCh7ledTaskEv:
\ 00000000 0xF890 0x103C LDRB R1,[R0, #+60]
\ 00000004 0xF081 0x0101 EOR R1,R1,#0x1
\ 00000008 0xF880 0x103C STRB R1,[R0, #+60]
58 /*
59 if( ledState )
60 {
61 ledState = false;
62 }
63 else
64 {
65 ledState = true;
66 }*/
67 CSmcsChHal::turnLed( ledState );
\ 0000000C 0x4608 MOV R0,R1
\ 0000000E 0x.... B.N _ZN10CSmcsChHal7turnLedEb
68 }
2-й случай.
CODE
55 void CSmcsCh::ledTask()
56 {
57 // ledState = !ledState;
58
59 if( ledState )
\ _ZN7CSmcsCh7ledTaskEv:
\ 00000000 0xF890 0x203C LDRB R2,[R0, #+60]
\ 00000004 0x1E51 SUBS R1,R2,#+1
\ 00000006 0x4189 SBCS R1,R1,R1
\ 00000008 0x0FC9 LSRS R1,R1,#+31
\ 0000000A 0xF880 0x103C STRB R1,[R0, #+60]
60 {
61 ledState = false;
62 }
63 else
64 {
65 ledState = true;
66 }
67 CSmcsChHal::turnLed( ledState );
\ 0000000E 0xF890 0x003C LDRB R0,[R0, #+60]
\ 00000012 0x.... B.N _ZN10CSmcsChHal7turnLedEb
68 }
Сам я в асме не силён, но если мне память не изменяет, то такое поведение ИАРа у меня не в первой. Но раньше как-то не задевало, и обходил это if'ами.
Выбор.