-         

Ergebnis 1 bis 8 von 8

Thema: Float-Konstante im Headerfile berechnen?

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065

    Float-Konstante im Headerfile berechnen?

    Anzeige

    Moin,
    Ich stoße beim GCC gerade auf ein Problem.
    Ich möchte für eine Spannungsmessung die AD-Werte in eine Spannung umrechnen und in eine Floatvariable legen.
    Dafür brauche ich ja einen Koeffizienten, Referenzspannung/Auflösung.

    #define AD_Reference 2.5 //in Volt
    #define AD_Bit_Res 65535 //Resolution of the ADC

    so, jetzt möchte ich zwei Zeilen später im Header-File das hier machen:

    const float AD_Constant= AD_Reference/AD_Bit_Res;

    Resultat, der Compiler findet das Object-File nichtmehr.
    Mache ich was falsch oder kann der Compiler keine Berechnungen, nur Ersetzungen durchführen?
    Meine Notlösung ware eine Funktion, die diese Berechnung macht und am Anfang ausgeführt wird, dann ist AD_Constant nurnoch als float, nicht als const float definiert.
    Ich möcht halt vermeiden einen festen Wert dorthin zu schreiben, den der User nicht ohne Taschenrechner versteht.
    Kennt jemand eine Lösung?

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    habe die Zeilen in ein Programm eingefügt. Das haut bei mir hin. Ich vermute der Fehler liegt um die Zeilen herum.

    Gruß

    Jens

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    Mh.. du hast recht, das Problem ist in einer .c Datei nicht, nur wenn ich es in einer .h mache

  4. #4
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Solche fsten Werte sollte man rein per #define festlegen. Dabei sollte man aber lieber ein paar extra Klammern spendieren, denn die #Defines werden erst mal rein als ASCII text ausgeführt und nicht schon berechent. Die Berechnung folgt dann erst später.

    Auch wenn der Wert als Const float .... definiert ist, wird der Wert erst mal ins RAM kopiert, so wie bei einer initialisieren Variable. In wieweit das dann beim optimieren wieder wegfällt ist schwer zu sagen. Wenn es über 2 Files verteilt ist, dann wird es aber kaum wegfallen können.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    Grundsätzlich stimm ich dir da zu, aber nicht in dem Fall, denn da steht dann 38.3446e-005 und dass dann noch deutlich zu erklären, find ich schwieriger als an zwei stellen ganzzahlen oder zahlen mit einer nachkommastelle einzutragen. soll halt auch für den dau als modul nutzbar sein, der quick& dirty das einsetzen will statt groß drüber nachzudenken.
    Hab die variablen deklaration einfach in das .c file geschoben, die defines bleiben im header und es klappt (mit nem simulator geprüft). Mit dem Ram hab ich kein Problem, deswegen stört das nicht.

  6. #6
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Wenn man das mit #define macht, kreigt man die Augerechente Zahl auch nicht zu sehen. Das einzige was passiert ist, daß der Compiler den Ausdruck AD_Reference/AD_Bit_Res ggf. mehr mals während des compilierens berechenen muß. Das ist aber Rechenzeit am PC und fällt nicht weiter auf. Der Code wird eventuell auch etwas anders:
    mit const ... wird am Anfang die Constante mit ins RAM copiert und dannach wie eine variable angesprochen. Mit define wird die Konstante ggf. auch mehrmals vermutlich per LDI reg,xxx direkt in Register geladen. Was jetzt kürzer wird müßte man im Einzelfall sehen.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    Ach moment, du meinst ,dass ich die Quotientenbildung auch in die #define Anweisung geben kann? Aber natürlich, hast ja völlig recht! Dann tauscht der compiler im ersten Durchgang die Formel im #define gegen den Ausdruck in der Berechnung aus und macht im zweiten Durchgang daraus ne konstante in der Gleichung!
    Werds direkt testen, besten Danke!

  8. #8
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Hinter so ein #define kann man ziehmlich vieles Stecken. Man muß nur ggf. ein paar extra klammern Vorsehen, vor allem wenn man mit Übergabeparamentern arbeitet.

    Der Const Befehl in C ist eigentlich nur dafür geeigent wenn man Zeiger auf ein Konstante braucht. Normale Konstanten gehen besser mit define.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •