hi, hab folgendes Programm geschrieben: #include <avr/io.h> #include <avr/oldmacros.h> int main(void) { unsigned int i=0, c=0, d=0; unsigned char akku=0b10101010, temp=0, b=0; outp(0xff, DDRC); outp(0x00, PORTC); for(i=0;i<60000;i++) {for(c=0;c<60000;c++) {for(d=0;d<60000;d++) b=b; } } outp(0xff, PORTC); es soll im Prinzip die leds an portc anschalten die schleifen durchlaufen und dann die leds wieder abschalten. wenn ich des auf meinem ATmega8515L ablaufen lass dann blitzen die leds nur kurz auf. lass ich die schleifen auf meinem dual core laptop ablaufen, dann rechnet der sich halb zu tode. wie kann das sein?? der mikrcontroller kann doch nicht um soviel schneller sein. des sind ja 60000^3 durchläufe wenn ich mich net täusch. danke im voraus torben
Kann es sein, dass die nutzlose Anweisung - und damit die Schleife - wegoptimiert wird? Suchen (DU): volatile
Würde auch sagen, dass der Compiler die Schleifen wahrscheinlich wegoptimiert, da er darin keinen Nutzen erkennt. Versuch mal die Zählvariabeln mit volatile zu deklarieren, dann werden daran keine Optimierungen mehr vorgenommen: volatile unsigned int i=0, c=0, d=0;
> Versuch mal die Zählvariabeln mit volatile zu deklarieren
... oder versuch besser mal die Makros aus der delay.h zu nehmen:
_delay_ms(), _delay_us() und dazu passend F_CPU
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.