Hallo
Ich möchte den Drucksensor MXP4115A verwenden und habe eine lib für
Atmega8 gefunden. Ich habe diese in meinen bestehenden sour code
einbegaut und der absolut druck funktioniert auch jedoch bei der relativ
druckmessung wird die funktion exp() von math.h verwendet
und damit habe ich ein compilierungsproblem.
jedes mal bekomme ich die gehlermeldung 1 error in der datei xxx.elf
wenn ich diese funktion ausklammere bekomme ich die fehlermeldung nicht
und die software (ohne relativ druck) funktioniert auch.
Die funktion ist:
void get_pres(double u_val, double tempm, double *abs_pres, double
*rel_pres)
{
*abs_pres = ((u_val/5)+0.095)/0.0009;
tempm += 273.15;
*rel_pres = *abs_pres/exp(-(0.0342*HOEHE)/(tempm+(0.00325*HOEHE))); //
0.0342 = g / R
}
wie gesagt der fehler ist weg wenn ich die letzte zeile auskommentiere.
kann mir jemand sagen was hier falsch ist?
das problem für mich ist das der Compiler nur einen error in der datei
xxxxxx.elf meldet, und das sagt mir nichts
mfg erich
Erich Floh wrote:
> 0.0342 = g / R> kann mir jemand sagen was hier falsch ist?> das problem für mich ist das der Compiler nur einen error in der datei> xxxxxx.elf meldet, und das sagt mir nichts
1) Da ein Semikolon zwischen R und }
2) Der Compiler kann nicht eine elf anmeckern, das tut der Linker. Du
hast also irgendwelche Variablen nicht richtig deklariert (g und/oder
R), oder es fehlen die Definitionen von g und/oder R. Die Variablen nur
zu deklarieren bringt nix, irgendwo müssen sie auch angelegt werden.
3) Links vom = muss ein L-Value stehen, also ein Wert, dem etwas
zugewiesen werden kann. Für 0.0342 ist das nicht der Fall, es sollt ein
Syntaxfehler geben.
Ergo: Wahrscheinlich steigt der Compiler aus und ein Modul, das zum
Erzeugen der elf gebraucht wird, wird nicht erzeugt und fehlt. Behebe
Fehler/Warnungen am besten von vorne nach hinten, und nicht umgekehrt:
Die Fehler/Warnungen die zuerst gemeldet werden, also zuerst beheben.
Johann
Hier alle meldungen die er auswirft:
Build started 11.4.2009 at 20:05:37
avr-gcc -I"C:\Dokumente und Einstellungen\Erich\Eigene
Dateien\Arthurneu\newStack1_2_1\." -I"C:\Dokumente und
Einstellungen\Erich\Eigene Dateien\Arthurneu\newStack1_2_1\camera"
-I"C:\Dokumente und Einstellungen\Erich\Eigene
Dateien\Arthurneu\newStack1_2_1\
networkcard" -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99
-DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields
-fpack-struct -fshort-enums -MD -MP -MT MPX4115A.o -MF dep/MPX4115A.o.d
-c ../MPX4115A.c
avr-gcc -mmcu=atmega644 -Wl,-Map=ETH_M32_EX.map wol.o analog.o base64.o
cmd.o dhcpc.o dnsc.o http_get.o httpd.o lcd.o main.o ntp.o sendmail.o
stack.o telnetd.o timer.o udp_lcd.o usart.o enc28j60.o servo.o cam.o
MPX4115A.o -o ETH_M32_EX.elf
c:/winavr-20090306rc1/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr5\
libc.a(inverse.o): In function `inverse':
(.text.fplib+0xc): relocation truncated to fit: R_AVR_13_PCREL against
symbol `__divsf3' defined in .text section in
c:/winavr-20090306rc1/bin/../lib/gcc/avr/4.3.2/avr5\libgcc.a(_div_sf.o)
c:/winavr-20090306rc1/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr5\
libc.a(modf.o): In function `modf':
(.text.fplib+0x3e): relocation truncated to fit: R_AVR_13_PCREL against
symbol `__subsf3' defined in .text section in
c:/winavr-20090306rc1/bin/../lib/gcc/avr/4.3.2/avr5\libgcc.a(_addsub_sf.
o)
make: *** [ETH_M32_EX.elf] Error 1
Build failed with 1 errors and 0 warnings...
Uwe ... wrote:
> Wie GENAU lautet die Fehlermeldung?> Mein avr-gcc (GCC) 4.2.2 (WinAVR 20071221) kompiliert das ohne zu> meckern...
äh. das ist jetzt ein Witz, oder?
1
foo.c: In function 'get_pres':
2
foo.c:6: warning: implicit declaration of function 'exp'
3
foo.c:6: error: 'HOEHE' undeclared (first use in this function)
4
foo.c:6: error: (Each undeclared identifier is reported only once
5
foo.c:6: error: for each function it appears in.)
6
foo.c:7: error: 'g' undeclared (first use in this function)
7
foo.c:7: error: 'R' undeclared (first use in this function)
Ich habe natürlich math.h inkludiert, HOEHE definiert und die letzte
Zeile rauskommentiert. Ich habe mal angenommen, dass sie eigentlich in
der Zeile davor als Kommentar stehen sollte und hier im Forum verrutscht
ist.
Uwe ... wrote:
> Ich habe natürlich math.h inkludiert, HOEHE definiert und die letzte> Zeile rauskommentiert. Ich habe mal angenommen, dass sie eigentlich in> der Zeile davor als Kommentar stehen sollte und hier im Forum verrutscht> ist.
Schreibe die Quelle in [c]-Tags, dann verrückt da auch nix.
Was HOEHE ist weiß alleine die berühmte Kristallkugel: ne Variable (wie
deklariert, wo definiert) ein Makro (wie define'd?) undefiniert? Äpfel?
Tomaten? ...?
Linkst du die libm dazu (mit -lm)?
Hallo Uwe
Du hast anscheinen keine deklarationen gemacht.
und hast übersehen das g und R nur eine Info ist lange zeilen haben sich
beim einspielen ins Forum geteilt.
Deklarationen haben ich natürlich alle gemacht sonst würde es andere
Fehlermeldungen geben.
Die oben genannen meldungen bekomme ich beim Compilieren.
Ich verwende Winavr und Win studio habe beide files in Projekt
eingefügt.
Die funktion im der main aufgerufen und die notwendigen daten zur
verfügung gestellt.
wenn ich die zeile mit der exp() funktion aufrufe kann ich am LCD den
Absdruck lesen
Also soweit stimmt auch alles.
Ich habe natürlich gemeint wenn ich die zeile mit der exp() funktion
auskommentiere dann compiliere, dann auf den Atmega644 brenne kann ich
den absdruck lesen
zusätzlich mit -v.
gcc delegiert nur an den Linker. Mit der Option sieht man den
eigentlichen Linkeraufruf. Auf den Ablauf selbst hat es keinen Einfluß.
Johann
Nö, der Linklauf sieht noch aus wie immer. Mal abgesehen davon, daß es
ziemlich sinnfrei ist, dem Linker Include-Pfade mitzugeben, ist da immer
noch kein -v das den eigentlichen Linker-Aufruf zeigt:
Ausserdem verwendest du keine "offizielle" Release von avr-gcc oder
WinAVR. Du verwendest offenbar einen "Release Candidate" (rc1), also nur
einen Kandidaten für eine Release, der idR mehr Fehler enthält.
Johann