Nárůst objemu kódu při použití funkce delay()

Preji hezky den.
Zkousim si krokovy motor a pouzivam tyto rutinu. Zakomentovana cast je ma upravena verze, kterou jsem to chtel zjednodusit. Kod nicmene narostl z 270 bytu na 5282 bytu. Jak to zjednodusit/zprehlednit bez navyseni objemu kodu v uC a trosku teorie, proc k tomu doslo?
Nahravam to do ATMega8, pouzivam AVR Studio 4.18 a prekladac WinAvr 20100110, optimalizace -Os
Dekuji

#define F_CPU 1000000UL

#include <avr/io.h>
#include <util/delay.h>
/*
unsigned int wait_on=10;
unsigned int wait_off=2;
*/
unsigned int i;

/*#define null PORTD=0b00000000;
#define C1 PORTD=0b00000011;_delay_ms(wait_on);null;
#define C2 PORTD=0b00011000;_delay_ms(wait_on);null;
#define C3 PORTD=0b00000101;_delay_ms(wait_on);null;
#define C4 PORTD=0b00101000;_delay_ms(wait_on);null;
#define step_left C1;_delay_ms(wait_off);C2;_delay_ms(wait_off);C3;_delay_ms(wait_off);C4;_delay_ms(wait_off);
#define step_right C3;_delay_ms(wait_off);C2;_delay_ms(wait_off);C1;_delay_ms(wait_off);C4;_delay_ms(wait_off);
*/
int main(void)
{
	DDRD=0xFF;
	//null;
	PORTD=0x00;
	for (;;)
	{
/*		for (i=0;i<50;i++)
		 {
		 	step_right;
		 }
		for (i=0;i<50;i++)
		 {
		 	step_left;
		 }

*/

		for (i=0;i<50;i++)
		 {
		 	PORTD=0b00000011;
			_delay_ms(10);
		 	PORTD=0b00000000;
			_delay_ms(2);
		 	PORTD=0b00011000;
			_delay_ms(10);
		 	PORTD=0b00000000;
			_delay_ms(2);
		 	PORTD=0b00000101;
			_delay_ms(10);
		 	PORTD=0b00000000;
			_delay_ms(2);
		 	PORTD=0b00101000;
			_delay_ms(10);
		 	PORTD=0b00000000;
			_delay_ms(2);

		 }
		for (i=0;i<50;i++)
		 {
		 	PORTD=0b00101000;
			_delay_ms(10);
		 	PORTD=0b00000000;
			_delay_ms(2);
		 	PORTD=0b00000101;
			_delay_ms(10);
		 	PORTD=0b00000000;
			_delay_ms(2);
		 	PORTD=0b00011000;
			_delay_ms(10);
		 	PORTD=0b00000000;
			_delay_ms(2);
		 	PORTD=0b00000011;
			_delay_ms(10);
		 	PORTD=0b00000000;
			_delay_ms(2);
		 }


	}
}

:arrow_right: administrator: přesunuto z "Ostatní"

:arrow_right: administrator: přejmenováno z "Programovani efektivne"

Funkce delay() má jako argument typ double (avr_libc_user_manual.pdf). Pokud tam napíšeš konstantu, překladač si s tím snadno poradí, ale když jsi tam dal proměnnou, už to není celočíselná aritmetika. To způsobí nárust kódu. Nadefinuj si wait_on a wait_off jako konstanty a mělo by to být zpátky na původní velikosti.