Hallo Leute, ich habe ein ganz übles Problem. Ich will in einer kleinen Funktion eine float Berechnung durchführen, aber beim compilieren bekomm ich nur Process Exit Code: 2 im WinAVR. Die Funktion sieht so aus: ... volatile unsigned int int_count; //Zähler für INT ... float Speed() { float result = 0.0; int_count = 0; NutSleep(1000); result = int_count WHEELcirculation 3.6; return result; } void main(void) { ... } Nun motzt mein Compiler. Wenn ich anstatt irq_count eine Zahl wie zB. 33.442 einsetze nicht mehr. Ich programmiere unter WinAVR mit dem Programmers Notepad 2. Als Betriebssystem des uC hab ich ethernut. Mein uC ist ein Atmega128. Der Witz ist, das ich das gleiche mit dem ICCAVR Compiler funktioniert hat. Da ich aber jetzt mit dem WinAVR weiter machen will klappt das nicht. Ich bin schon am verzweifeln.... Vielen Dank für eure Mühe. Thomas
caste doch mal zum testen (float)int_count result = (float)int_count * (float) WHEELcirculation * 3.6; gleiche Fehlermeldung? volatile zwingend erforderlich?
Danke für die rasche Antwort. Mit Casten hab ichs auch schon versucht. Leider hat deine Möglichkeit auch die gleichen Fehler gebracht. Nach Make all bekomm ich: > "make.exe" all avr-gcc -c -mmcu=atmega128 -Os -fno-delete-null-pointer-checks -Wall -Wstrict-prototypes -Wa,-ahlms=main.lst -DETHERNUT1 -D__HARVARD_ARCH__ -IC:/ethernut-4.1.5/nutbld/include -IC:/ethernut-4.1.5/nut/include main.c -o main.o main.c: In function `Speed': main.c:781: warning: use of cast expressions as lvalues is deprecated avr-gcc main.o fat.o mmc.o -mmcu=atmega128 -Wl,--defsym=main=0,-Map=WebServer.map,--cref -LC:/ethernut-4.1.5/nutbld/lib C:/ethernut-4.1.5/nutbld/lib/nutinit.o -lnutpro -lnutos -lnutarch -lnutdev -lnutnet -lnutfs -lnutcrt -o WebServer.elf C:/Programme/WinAVR/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\li bc.a(log.o): In function `log': : relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3' defined in .text section in C:/Programme/WinAVR/lib/gcc/avr/3.4.6/avr5\libgcc.a(_addsub_sf.o) make.exe: *** [WebServer.elf] Error 1 > Process Exit Code: 2 > Time Taken: 00:03 Ich weiß nicht, ob das weiterhilft? Dennoch Danke. Gruß Thomas
So hab folgenden Programmcode (siehe Anhang)im AVRStudio compilieren lassen. Build started 25.9.2006 at 16:00:36 avr-gcc.exe -mmcu=atmega128 -Wall -gdwarf-2 -DF_CPU=16000000UL -O0 -fsigned-char -MD -MP -MT Test.o -MF dep/Test.o.d -c ../Test.c avr-gcc.exe -mmcu=atmega128 Test.o -o Test.elf avr-objcopy -O ihex -R .eeprom Test.elf Test.hex avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex Test.elf Test.eep AVR Memory Usage ---------------- Device: atmega128 Program: 2802 bytes (2.1% Full) (.text + .data + .bootloader) Data: 10 bytes (0.2% Full) (.data + .bss + .noinit) Build succeeded with 0 Warnings...
hmm das heißt es muß an der Makefile liegen, oder an dem ethernut Betriebssystem des Controllers... Das erklärt auch warum es im ICCAVR Compiler auch gegangen ist.
Hab dir mal das entsprechende Makefile angehängt. Eventuell hilft dir das beim Durchgehen deines eigenen.
von welchem Typ ist den WHEELcirculation ? Wenn das eine Funktion ist fehlen die (). Oder fehlt die floating point lib im makefile? Wie sieht denn die Fehlermeldung aus nach dem 1. Beispiel?
vielen Dank, ich hab gerade ein neues Projekt in WinAVR gemacht. #define WHEEL 3.6 volatile unsigned int int_count; float speed(void) { return int_count WHEEL 3.6; } void main(void) { int_count = 23; speed(); } das hat mit der Makefile des anderen auch wunderbar geklappt. Ich versteh nur nicht warum das in dem Fall geht und beim anderen nicht. Aber ich schau mir mal das Makefile an. Vielen Dank nochmals Gruß Tom
@JojoS WHEELcirculation is nur ein #define mit 1.25 also float. Die Float lib ist in der makefile drin. Ich kann ja einfache Berechnungen wie 3.4 + 4.5 * 3.7 oder so durchführen. Die Fehlermeldung zum 1. Bsp ist in meinem 2. Beitrag oben: > "make.exe" all avr-gcc -c -mmcu=atmega128 -Os -fno-delete-null-pointer-checks -Wall -Wstrict-prototypes -Wa,-ahlms=main.lst -DETHERNUT1 -D__HARVARD_ARCH__ -IC:/ethernut-4.1.5/nutbld/include -IC:/ethernut-4.1.5/nut/include main.c -o main.o main.c: In function `Speed': main.c:781: warning: use of cast expressions as lvalues is deprecated avr-gcc main.o fat.o mmc.o -mmcu=atmega128 -Wl,--defsym=main=0,-Map=WebServer.map,--cref -LC:/ethernut-4.1.5/nutbld/lib C:/ethernut-4.1.5/nutbld/lib/nutinit.o -lnutpro -lnutos -lnutarch -lnutdev -lnutnet -lnutfs -lnutcrt -o WebServer.elf C:/Programme/WinAVR/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\li bc.a(log.o): In function `log': : relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3' defined in .text section in C:/Programme/WinAVR/lib/gcc/avr/3.4.6/avr5\libgcc.a(_addsub_sf.o) make.exe: *** [WebServer.elf] Error 1 > Process Exit Code: 2 > Time Taken: 00:03
Nabend, also ich hab mich mal weiter schlau gemacht. So wie ich das überblicke, bekomm ich den Fehler sobald ich einen Float Wert als Return zurückgebe. Der Make Error ist scheinbar ein Bug der AVR C Runtime Library. Näheres gibts hier. https://savannah.nongnu.org/bugs/?14855 Grüße Tom
sooo ich hab das Problem gelöst. Lösung war ein Weg, den ein Kollege im Forum schon gefunden hat. Ich mußte einfach die Lib libm.a in die Makefile einbinden. Dennoch danke für eure Hilfe. Gruß Tom
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.