Schau dir doch mal die erzeugte .lss Datei ( da steht der erzeugte Assemblercode drin ) an oder häng sie hier an. Es kann sein, dass GCC Warteschleifen wegoptimiert wenn sie "sinnlos" sind
.
Eine Möglichkeit wäre die counter Variable als "volatile unsigned int counter;" zu deklarieren.
Meckert der Compiler eigentlich nicht, dass die Funktion "wait" nicht deklariert ist ??
Eigentlich gehört an den Anfang ein "void wait(unsigned int beats);" oder so was in der Art.
Noch ein paar allgemeine Anmerkungen:
Benutzt doch bitte:
#include <avr/io.h>
und zum Beispiel
PORTA = 0x50;
Die anderen Schreibweisen sind veraltet und werden irgendwann nicht mehr unterstüzt werden...
Und um noch was konstruktives beizutragen
:
Code:
#include <avr/io.h>
#define SYSCLK 4000000 // Taktfrequenz
void wait(unsigned int us);
int main(void)
{
DDRA = 0xff;
while(1)
{
PORTA = 0x05;
wait(100);
PORTA = 0x06;
wait(100);
PORTA = 0x0A;
wait(100);
PORTA = 0x09;
wait(100);
}
}
/* Wartet us µSekunden */
void wait(unsigned int us)
{
unsigned int zaehler;
while (us)
{
zaehler = SYSCLK / 5000000;
while (zaehler)
{
asm volatile ("nop");
zaehler--;
}
us--;
}
}
MfG Kjion
Lesezeichen