Forum: Mikrocontroller und Digitale Elektronik programm mit mehreren schleife?wondering??


von torben (Gast)


Lesenswert?

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

von Tom (Gast)


Lesenswert?

Kann es sein, dass die nutzlose Anweisung - und damit die Schleife - 
wegoptimiert wird?

Suchen (DU): volatile

von Johnny B. (johnnyb)


Lesenswert?

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;

von torben (Gast)


Lesenswert?

danke; des wars!!!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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
Noch kein Account? Hier anmelden.