Zdravím vážení pánové,
potřebuji pro svůj projekt odladit část kódu co mi nefunguje a tak jsem se rozhodnul šáhnout po OCD avšak …
chtěl jsem se naučit na malém kódu jak v tom chodit, vše je dobré, vypnutá optimalizace zajistila že to chodí jak má až na jednu věc: vždy to vleze do funkce _delay_ms() z delay.h, a nejde z ní rychle vyskočit, neví někdo proč tomu tak je ? Je to způsobeno tím, že je delay částečně napsaná v asembleru ?
Jistě si každý dokáže představit co tento kód dělá, posouvá na portu a jedničku do prava, takže ledka jakoby jede v levo … Když začnu krokovat, tak všechno jede dle očekávání než se dostanu na ten delay, pak to skočí dovnitř a ven už nelze (step out)
#define F_CPU 16000000
#include <avr/io.h>
#include <util/delay.h>
void port_init()
{
DDRA |= 0xff;
}
int main (void)
{
uint8_t i = 0;
port_init();
PORTA = 0xff;
while(1)
{
PORTA =0;
PORTA |= (1 << i);
i++;
if(i>7) i = 0;
_delay_ms(500);
PORTA |= (1 << i);
}
}