Цитата
Bill
...Вообще, лучше вставками не пользоваться. Вставки не дают возможность компилятору оптимизировать код.
Не могли бы Вы уточнить как не дают. Очень хорошо если бы
простейший пример.
_____________________________________
Вот тут попробовал в WinAVR20060421
unsigned char с1;
__________
Код
c1 = PINC;
asm ("swap %0" : "=r" (c1) : "0" (c1));
PORTC = c1;
asm("sleep");
********************************************
c1 = PINC;
72: 86 b1 in r24, 0x06; 6
asm ("swap %0" : "=r" (c1) : "0" (c1));
74: 82 95 swap r24
PORTC = c1;
76: 88 b9 out 0x08, r24; 8
asm("sleep");
___________
а если c1 не используем и не применямем voletile
Код
c1 = PINC;
asm ("swap %0" : "=r" (c1) : "0" (c1));
asm("sleep");
********************************************
c1 = PINC;
72: 86 b1 in r24, 0x06; 6
asm ("swap %0" : "=r" (c1) : "0" (c1));
asm("sleep");
74: 88 95 sleep
То есть, насколько я понимаю, оптимизация есть и с ассемблером.
____________
____________
А без ассемблера у меня получилось вот такой бред.
OPTIMIZE = -O3, без оптимизации еще хуже.
(WinAVR я только пытаюсь освоить, поэтому подозреваю что
сделал что-то не так):
Код
c1 = PINC;
c1 = (c1>>4)|(c1<<4);
PORTC = c1;
asm("sleep");
********************************************
c1 = PINC;
72: 26 b1 in r18, 0x06; 6
c1 = (c1>>4)|(c1<<4);
74: 82 2f mov r24, r18
76: 99 27 eor r25, r25
78: 82 95 swap r24
7a: 92 95 swap r25
7c: 90 7f andi r25, 0xF0; 240
7e: 98 27 eor r25, r24
80: 80 7f andi r24, 0xF0; 240
82: 98 27 eor r25, r24
84: 22 95 swap r18
86: 2f 70 andi r18, 0x0F; 15
88: 28 2b or r18, r24
PORTC = c1;
8a: 28 b9 out 0x08, r18; 8
asm("sleep");
8c: 88 95 sleep
__________
Александр
2006 07 15