Forum: Compiler & IDEs AtmelStudio 6.2 kann keine float-Variabeln im Debbug-Watch anzeigen


von Sarah H. (Gast)


Lesenswert?

Hallo zusammen

Ich habe ein Problem betreffend AtmelStudio 6.2
Folgendes Situation:
Ich programmiere einen Atmega16A.
In meinem C-Programm benutze ich eine float-Variable.
In ihr speichere ich einen Berechneten Wert.
Dieser Wert wird aus einem int-Wert und einer Gegebenen Formel in einer 
separaten Funktion-x berechnet.
In meiner Main-Funktion wird dann der Berechnete Wert in diese 
float-Variable übergeben.
Nun kome ich zum folgenden Problem:
Ich will wissen welcher Wert in der flow-Variable ist.
Wen ich das C-Program mit meinem AtmelStudio 6.2 debugge und die 
Variable im Watch-Fenster anzeigen lasse, Steht in der Value-Kollone der 
Variable: "could not evaluate".
Er kann den Wert also nicht Anzeigen?
Ich habe bereits den Trick mit dem "Project/ XX Properties.../ Advanced/ 
Haken bei Use GDB" probiert und es funktioniert trotzdem nicht.
Habe bereits auf Googel gesucht, konnte aber nicht viel hilfreiches 
finden...

Kann mir jemand helfen?
Danke schonmal im Vorraus :)

von Peter II (Gast)


Lesenswert?

Sarah H. schrieb:
> Er kann den Wert also nicht Anzeigen?

eventuell weil der Code optimiert ist. Sie steht eventuell nur ein 
Registern. Schalte mal die Optimierung ab - dann geht aber keine delay 
mehr sauber.

oder mache ein globale float variable die volatile ist und weise ihr den 
Wert zu,

von Sarah H. (Gast)


Lesenswert?

Hallo :)
Danke vielmals für deine Antwort.

> oder mache ein globale float variable die volatile ist und weise ihr den
> Wert zu,

Ich habe jetzt meine Variable folgendermassen global initiallisiert: 
"volatile float fLiterwert = 0;"

Der Haken bei Use GDB, habe ich so gelassen.
Jetzt scheint aber die Berechnung nicht zu klappen. während der 
Simmulation bleibt der Wert immer auf 0.
Hier noch ein kleiner Ausschnit vom Programm:
In der Main-Funktion:

while(1)/* Endlos-Loop */
{

   //Frequenzzähler
   zaeler = FrequenzZaeler(zaeler);//Zählt die fallenden Flanken des 
Signal-Eingangs.

   //Umrechner: Frequenzwert in Liter.
   fLiterwert = LiterRechner(iSignalFrequenz);//Berechnung der Einheit 
Liter mittels Übergabe des Frequenzwerts.

   //b = fLiterwert * 3;


}

Und hier noch die Berechnungsfunktion:

float LiterRechner(int f) //float LiterRechner(int f)
{

   float Liter; //Zwischen-Variable.

   Liter = (f/3200)*60; //Liter = (Frequenzwert/3200)*60

   return Liter; //Der Wert in Liter wird zurückgegeben.

}

von ... (Gast)


Lesenswert?

Alter

Liter = (f/3200)*60;

wenn f ein Integer ist.... was meinste, was da rauskommen soll?

von Sarah H. (Gast)


Lesenswert?

Hallo


> wenn f ein Integer ist.... was meinste, was da rauskommen soll?

Ja So klappt es..

Danke ^^

von Sarah H. (Gast)


Lesenswert?

Habe jetzt die unter-Funktion verbessert:

float LiterRechner(float f)  //float LiterRechner(int f)
{

  float Liter; //Zwischen-Variable.

  Liter = (f/3200)*60; //Liter = (Frequenzwert/3200)*60

  return Liter;  //Der Wert in Liter wird zurückgegeben.

}


So funktionierts.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Sarah H. schrieb:
> So funktionierts.

Alternative:
1
Liter = (f/3200.0)*60.0;

Das erzwingt eine Rechnung im Gleitkommabereich.

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.