www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Increment im AVRStudio Simulator


Autor: iug<sdf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,
hat jemand ne Idee warum ich das Programm nicht läuft?
Ich lasse mir im AVR Studio die Werte der Variablen n anzeigen, aber da 
tut sich nix.



#include <avr/io.h>
int n;
int main(void)
{
   while (1)
  {
  n=n++;
  n=n+1;
  n+=1;
    }
}

Autor: Sauger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

schau (taker) die Schleife mal in asm durch.

MfG

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vermutlich wird alles wegoptimiert weil es ja auch auch kein sinn macht.

Das ist besonders ungünstig, der compiler sollte da schon warnen.
n=n++;

Autor: Michael F. (shadowman3000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was auch noch ein Problem sein könnte, du initialisierst n nicht mit 0. 
Normal mach das der compiler, aber nicht alle. verschs mal mit

#include <avr/io.h>
int n = 0;
int main(void)
...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael Frei schrieb:
> Normal mach das der compiler

nein macht er nicht, nur bei static muss er es machen.

Autor: Sauger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
n ist static.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
n wird auf 0 initialisiert wie jede globale Variable.  Wenn n zusätzlich 
volatile deklariert wird, kann der Compiler die Inkrementierung nicht 
wegoptimieren.  Also
volatile int n;
schreiben.

Falls bei n=n++ keine Warnung kommt, solltest Du diese einschalten 
(-Wall).  Die ist (wie Warnings allgemein) dann bitte auch nicht zu 
ignorieren.  Und wenn Du die Warnung dann mitbekommen hast, nach 
„sequence points“ googeln.  Da wird im erstbesten Beispiel ziemlich 
sicher genau dieser Fall behandelt.

Autor: iug<sdf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hc Zimmerer schrieb:
> Alsovolatile int n;schreiben.

Du hast Recht, es funktioniert, mal schauen ob das mein ursprüngliches 
Problem löst. Erstmal Vielen Dank

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
iug<sdf schrieb:
> mal schauen ob das mein ursprüngliches
> Problem löst

Vielleicht beschreibst Du dann Dein ursprüngliches Problem.  Ich kann 
mir nämlich keinen Fall denken, wo etwas in der Art von
n=n++;
Teil der Lösung eines Problems ist.  Hattest Du vorher ein Problem, hast 
Du damit zwei.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.