ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
4 июля
100398
Неофит (22.09.2007 00:20, просмотров: 7526)
Почему WinAVR по разному компилирует? И какие типы данных использовать? Абстрактный вопрос, просто интересно. Чем вызвана необходимость использования лишнего регистра при вычислении ~(expr) вместо !(expr), ведь результат одинаков?
000000fa <putc>:
}
/*****	Передача символа через УАПП.	*/
void	putc(uint8_t data_to_send)
{
  fa:	98 2f       	mov	r25, r24
	while (!(UCSR1A & _BV(UDRE1)));
  fc:	80 91 c8 00 	lds	r24, 0x00C8
 100:	85 ff       	sbrs	r24, 5
 102:	fc cf       	rjmp	.-8      	; 0xfc <putc+0x2>
	UDR1 = data_to_send;
 104:	90 93 ce 00 	sts	0x00CE, r25
 108:	08 95       	ret

0000010a <getc>:
}

/*****	Приём символа через УАПП	*/
uint8_t	getc()
{
 10a:	80 91 c8 00 	lds	r24, 0x00C8
 10e:	99 27       	eor	r25, r25
 110:	80 78       	andi	r24, 0x80	; 128
 112:	90 70       	andi	r25, 0x00	; 0
 114:	8f 5f       	subi	r24, 0xFF	; 255
 116:	9f 4f       	sbci	r25, 0xFF	; 255
 118:	c1 f7       	brne	.-16     	; 0x10a <getc>
	while (~(UCSR1A & _BV(RXC1)));
	return UDR1;
 11a:	80 91 ce 00 	lds	r24, 0x00CE
}
 11e:	99 27       	eor	r25, r25
 120:	08 95       	ret
А насчёт типов, что лучше писать, обычные char/int/long или WinAVR'овские xINTnn_t? Мне кааца, что обычные.