Schleifen wegoptimierung verhindern bei AVR

Gast #626341
Lesenswert?
• ▲
▼
Hallo,

ich hab mir ein kleines Schleifen-Test Programm geschrieben:

#include <avr/io.h>

int main(void)
{
DDRB =0xff;
char i;
char k;

while (1)
  {
  PORTB =0x00;
  k=0x01;
  while (k<=2)
    {
    PORTB =0xff;
    PORTB =0xff;
    k=k+1;
    i=0x01;
    while (i<=2)
      {

      PORTB =0x01;
      i=i+1;
      }
    }

  PORTB =0x00;
  PORTB =0x00;
  }
}

Leider wird hierbei die dritte Schleife wegoptimiert. wenn ich den die 
Bedingung auf i<=4 abänder dann pasiert dies nicht. was ist der 
einfachste weg die optiemierung zu verhindern. Ist die variablen 
deklaration als Volantile eine sinvolle Variante?

Die Optimierung unter Configuration Options ist aktiviert, da ich im 
richtigen Programm auch mit delay arbeite.
Moderator Persönliche Seite #626406
Lesenswert?
• ▲
▼
Chillman wrote:

> Was meinst du mit "entrollt"?

Dass man statt:
1
   lade schleifenzähler
2
   springe zu test
3
schleife:
4
   anweisung
5
   erhöhe schleifenzähler
6
test:
7
   ist schleifenende erreicht?
8
   wenn nicht, springe zu schleife

auch einfach schreiben kann
1
   anweisung
2
   anweisung

wenn von vornherein völlig klar ist, dass die Schleife immer genau
zweimal durchlaufen wird.
Gast #626952
Lesenswert?
• ▲
▼
> Wieso sind überhaupt bis auf die erste alle Zuweisungen zum PORTB
> doppelt aufgeführt?

Wenn die I/O-Register durch häufige Benutzung schon etwas ausgeleiert
sind, muss man manchmal die Bits regelrecht reinhämmern, damit sie
auch wirklich drin bleiben :-)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.