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 :)
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,
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. }
Alter Liter = (f/3200)*60; wenn f ein Integer ist.... was meinste, was da rauskommen soll?
Hallo
> wenn f ein Integer ist.... was meinste, was da rauskommen soll?
Ja So klappt es..
Danke ^^
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.