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);
}
}
}
administrator: přesunuto z "Ostatní"
administrator: přejmenováno z "Programovani efektivne"