Forum: Mikrocontroller und Digitale Elektronik Increment im AVRStudio Simulator


von iug<sdf (Gast)


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;
    }
}

von Sauger (Gast)


Lesenswert?

Moin,

schau (taker) die Schleife mal in asm durch.

MfG

von Peter (Gast)


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++;

von Michael F. (shadowman3000)


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)
...

von Peter (Gast)


Lesenswert?

Michael Frei schrieb:
> Normal mach das der compiler

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

von Sauger (Gast)


Lesenswert?

n ist static.

von Hc Z. (mizch)


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
1
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.

von iug<sdf (Gast)


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

von Hc Z. (mizch)


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
1
n=n++;
Teil der Lösung eines Problems ist.  Hattest Du vorher ein Problem, hast 
Du damit zwei.

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.