О работе с массивами

Когда в программе есть большой объём данных хочется для удобства собрать его в одну структуру. А в некоторых случаях в этой структуре хочется ещё и массивов напихать. Так вот, хочу отметить, что GCC местами туповат, по-этому надо ему понятно объяснять, как ему взять данные из этой байды. Под катом сравнение двух способов работы с массивами

Простой вариант

	int16_t arg1, arg2;
	uint16_t val;
	arg1 = G_data.channels[a_arg].A;
 49e:	a8 2f       	mov	r26, r24
 4a0:	b0 e0       	ldi	r27, 0x00	; 0
 4a2:	aa 0f       	add	r26, r26
 4a4:	bb 1f       	adc	r27, r27
 4a6:	fd 01       	movw	r30, r26
 4a8:	31 96       	adiw	r30, 0x01	; 1
 4aa:	85 e8       	ldi	r24, 0x85	; 133
 4ac:	91 e0       	ldi	r25, 0x01	; 1
 4ae:	ee 0f       	add	r30, r30
 4b0:	ff 1f       	adc	r31, r31
 4b2:	ee 0f       	add	r30, r30
 4b4:	ff 1f       	adc	r31, r31
 4b6:	ee 0f       	add	r30, r30
 4b8:	ff 1f       	adc	r31, r31
 4ba:	e8 0f       	add	r30, r24
 4bc:	f9 1f       	adc	r31, r25
 4be:	20 81       	ld	r18, Z
 4c0:	31 81       	ldd	r19, Z+1	; 0x01
	arg2 = G_data.channels[a_arg].B;
 4c2:	aa 0f       	add	r26, r26
 4c4:	bb 1f       	adc	r27, r27
 4c6:	aa 0f       	add	r26, r26
 4c8:	bb 1f       	adc	r27, r27
 4ca:	aa 0f       	add	r26, r26
 4cc:	bb 1f       	adc	r27, r27
 4ce:	a8 0f       	add	r26, r24
 4d0:	b9 1f       	adc	r27, r25
 4d2:	1a 96       	adiw	r26, 0x0a	; 10
 4d4:	8d 91       	ld	r24, X+
 4d6:	9c 91       	ld	r25, X
 4d8:	1b 97       	sbiw	r26, 0x0b	; 11
	SQRT_SQ_SUMM_16(arg1, arg2, val);

Хитрый вариант

	int16_t arg1, arg2;
	uint16_t val;
	struct t_data_chan *chan_data = G_data.channels+a_arg;
 49e:	e8 2f       	mov	r30, r24
 4a0:	f0 e0       	ldi	r31, 0x00	; 0
 4a2:	e2 95       	swap	r30
 4a4:	f2 95       	swap	r31
 4a6:	f0 7f       	andi	r31, 0xF0	; 240
 4a8:	fe 27       	eor	r31, r30
 4aa:	e0 7f       	andi	r30, 0xF0	; 240
 4ac:	fe 27       	eor	r31, r30
 4ae:	eb 57       	subi	r30, 0x7B	; 123
 4b0:	fe 4f       	sbci	r31, 0xFE	; 254
	arg1 = chan_data->A;
	arg2 = chan_data->B;
	SQRT_SQ_SUMM_16(arg1, arg2, val);
 4b2:	20 85       	ldd	r18, Z+8	; 0x08
 4b4:	31 85       	ldd	r19, Z+9	; 0x09
 4b6:	82 85       	ldd	r24, Z+10	; 0x0a
 4b8:	93 85       	ldd	r25, Z+11	; 0x0b





Смотрите также:

Вам это будет интересно!

  1. Вопрос о работе
  2. Пуговица как инструмент в работе психолога