Im Internet habe ich schon benutzt, und gelesen, dass es dafür keine
Lösung gibt, ist das immer noch so?
Ich habe auch noch irgentwas über eine libm.a gefunden, die ich
einbinden soll, wie mache ich das?
Ich hoffe ihr könnt mir helfen.
Hier der Code:
> Ich habe auch noch irgentwas über eine libm.a gefunden, die ich> einbinden soll, wie mache ich das?
Wenns nur das ist dann irgendwo(tm) bei den ∗Linker∗optionen angeben -
da ich kein AvrStudio nutze kann ich Dir leider nicht sagen wo genau,
sollte sich mit Tante Gugl aber leicht lösen lassen.
> Hier der Code:
..der sich nicht compilieren (und schon gar nicht linken) lässt weil
essentielle Dateien fehlen (mindestens protocol.h (und zum linken eine
Datei in der main() definiert ist)). Das Problem lässt sich also nicht
reproduzieren.
HTH
Ok,
hier im Anhang habe ich einmal alle Dateien reingepackt.
Das Projekt ist in 12 Dateien aufgeteilt, und alles ist irgenwie
voneinander abhängig.
Wenn ich das ganze übrigends mit Codeblocks compiliere, bekomm ich diese
Meldung:
1
||=== test, Debug ===|
2
c:\winavr-20100110\lib\gcc\..\..\avr\include\util\delay.h|90|warning: #warning "Compiler optimizations disabled; functions from <util/delay.h> won't work as designed"|
3
c:\winavr-20100110\bin\..\lib\gcc\avr\4.3.3\..\..\..\..\avr\lib\avr51\libc.a(cmpsf2.o)||In function `__lesf2':|
4
c:\winavr-20100110\bin\..\lib\gcc\avr\4.3.3\avr51\libgcc.a(_lt_sf.o):c:\avrdev\gcc\build-avr\avr\avr51\libgcc\..\..\..\.\gcc\fp-bit.c|1287|first defined here|
5
||=== Build finished: 1 errors, 1 warnings ===|
Mfg
Philipp
Achja, wenn ich das Projekt ohne die GPS.h/.c compiliere geht alles ohne
Probleme.
Ok, jetzt kann ichs reproduzieren. Lösung: libm dazulinken ('-lm'):
1
$ ls
2
Comm.rar fifo.c functions.h protocol.c uart.h
3
Communication.c fifo.h gps.c protocol.h
4
defines.h functions.c gps.h uart.c
5
$ avr-gcc -Wall -DF_CPU=8000000UL -Os -mmcu=atmega644p --std=c99 -o main *.c
6
gps.c: In function ‘gps_decode’:
7
gps.c:42: warning: array subscript is above array bounds
8
gps.c:46: warning: array subscript is above array bounds
9
[..]/x-chains/avr/bin/../lib/gcc/avr/4.4.4/../../../../avr/lib/avr5/libc.a(fp_powsodd.o):../../../libm/fplib/fp_powsodd.S:59: relocation truncated to fit: R_AVR_13_PCREL against symbol `__mulsf3' defined in .text section in [..]/x-chains/avr/bin/../lib/gcc/avr/4.4.4/avr5/libgcc.a(_mul_sf.o)
10
[..]/x-chains/avr/bin/../lib/gcc/avr/4.4.4/../../../../avr/lib/avr5/libc.a(fp_powsodd.o):../../../libm/fplib/fp_powsodd.S:69: relocation truncated to fit: R_AVR_13_PCREL against symbol `__mulsf3' defined in .text section in [..]/x-chains/avr/bin/../lib/gcc/avr/4.4.4/avr5/libgcc.a(_mul_sf.o)
gps.c:42: warning: array subscript is above array bounds
14
gps.c:46: warning: array subscript is above array bounds
15
$ file main
16
main: ELF 32-bit LSB executable, Atmel AVR 8-bit, version 1 (SYSV), statically linked, not stripped
Den m644p hab ich jetzt einfach mal in Übereinstimmung mit den genutzen
PIN-Definitionen angenommen.
Jetzt musst Du nur noch(tm) die richtige(tm) Einstellung für Dein
AvrStudio suchen :-)
HTH
So, hab spaßeshalber das AvrStudio5 installiert (maaan war das ein
K[r]ampf..) in der wirrtuellen Maschine und Deine Dateien importiert.
Lösung für das Problem: in Project -> Properties -> Toolchain ->
'AVR/GNU C Linker' -> Libraries 'm' (für libm.a) hinzufügen. (Bei der
Gelegenheit auch gleich noch F_CPU definieren und Optimierung
einschalten so nicht schon geschehen). Die Warning von oben
1
gps.c: In function ‘gps_decode’:
2
gps.c:42: warning: array subscript is above array bounds
3
gps.c:46: warning: array subscript is above array bounds
..solltest Du übrigens ernst nehmen, da hat der Compiler wie üblich
recht (und wie wir alle wissen sind Warnings entgegen landläufiger
Meinung nicht dazu da um ignoriert zu werden ;-)
HF
> Weder das 'const', noch die '5' machen das, was Du willst.
Was hast Du gegen die 'const' einzuwenden? (oder anders gefraggt: was
'will' 'er' denn anderes?)
Moin,
danke jetzt gehts. Die Warnung ist jetzt weg, ich habe ausversehen statt
array[2] , array[3] geschrieben.
Von Zeigern habe ich nicht nicht soviel Ahnung, und das mit dem const
habe ich aus einem anderen Code so übernommen.
http://www.gjlay.de/pub/c-code/fifo.html Dort habe ich auch den FIFO
her.
MfG
Philipp
g457 schrieb:> Was hast Du gegen die 'const' einzuwenden? (oder anders gefraggt: was> 'will' 'er' denn anderes?)
Nix. Ich hab mich wohl geirrt; reine Reflexhandlung. Es gibt nicht viele
Beispiele, wo ein
1
foo*constbar
richtig ist. Meistens will man ein
1
constfoo*bar
Aber, hier scheints tatsächlich doch zu stimmen :-).
'bar' ist ein Zeiger auf einen ∗konstanten foo∗
..und der Vollständigkeit wegen:
1
const foo * const bar
'bar' ist ein ∗konstanter Zeiger∗ auf einen ∗konstanten foo∗
Ein einziges 'richtig' gibts nicht, kommt immer auf die angedachte
Semantik an. Bei des TOs Code ist der konstante Zeiger durchaus sinnvoll
- schließlich will man sich in der Funktion nicht versehentlich z.B.
'_this' verbiegen (sieht mir sehr nach einer Nachbildung von 'this' aus
diversen oop-Sprachen aus).