Problem eigene Bibliothek zu erzeugen

Gast #283868
Lesenswert?

Hi,

ich hab für den atmega128 ein paar Routinen zum Ansteuern eines
Displays geschrieben. Das klappt zusammen mit dem normalen
Anwendungscode auf dem Gerät einwandfrei, solange ich alles in einem
Makefile zusammen compiliere und linke. Nehme ich nun meinen display
code und packe den in eine eigene dll (libgfx.a) und binde diese dazu,
geht es nicht mehr.

Erzeugt wird die lib mit:

avr-ar cru lib/libac_graphics.a ac_hitachi.o ac_graphics.o ac_font.o

hinzugelinkt einfach mit -lac_graphics

Der compile step sieht so aus (beispielhaft für alle files in meiner
lib als auch im restlichen code):

avr-gcc -c -I.   -Iinclude -mmcu=atmega128 -mcall-prologues -Os -O1
-mno-tablejump -funsigned-char -funsigned-bitfields -fpack-struct
-fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=ac_font.lst
-std=gnu89 -Wp,-M,-MP,-MT,ac_font.o,-MF,.dep/ac_font.o.d ac_font.c -o
ac_font.o

Es muss doch irgendwas damit zu tun haben, dass entweder die lib falsch
gebaut oder falsch gebunden wird. Aber ich seh da einfach nichts.

Irgendeiner eine Idee, wie ich das hinbekomme?

Danke und Grüße,
Christian
Gast #283870
Lesenswert?

Kleiner Fortschritt:

Hab mal die .o files aus dem getrennten Lib Projekt direkt dazugelinkt,
dann geht's. Kann also nur dir lib Erzeugung sein. Bin ich zu blöd oder
was kann man da falsch machen???
Gast #283872
Lesenswert?

Hi,

hier die Kommandozeile vom linker. Ich hab die s Option ebenfalls mal
verwendet, das Ergebnis bleibt aber das gleiche.

Grüße,
Christian


avr-gcc -mmcu=atmega128 -I.
-I"D:\Private\Projects\SpeedMax\SpeedMax Control
Software\20051015\include" -I"D:\Private\Projects\SpeedM
ax\SpeedMax Control Software\SpeedMax Graphics\include" -O0
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wst
rict-prototypes -Wa,-adhlns=ac_main.o  -std=gnu89
-Wp,-M,-MP,-MT,ac_main.o,-MF,.dep/ac_main.elf.d ac_main.o ac_display.o
ac_clock.o ac_
hardware.o ac_keyboard.o ac_uart.o   --output ac_main.elf -L.
-L"C:\Programme\WinAVR\lib"
-L"D:\Private\Projects\SpeedMax\SpeedMax Con
trol Software\SpeedMax Graphics\lib"
-Wl,-Tdata=0x801100,--defsym=__heap_end=0x8090ff   -lm -lac_graphics
-lc -v -litcl32 -litk32 -Wl
,-Map=ac_main.map,--cref -lgcc
Gast #283874
Lesenswert?

Hm, geht mir ebenso. Habe gerade nochmal nachgeschaut. Der avr-ar den
ich verwende sagt mir folgendes über sich

GNU ar 2.15 + coff-avr-patch (20030831)

Ist da irgendwas faul? Ar macht doch m.E. nichts weiter, als ein archiv
mit den Files zu bauen. Die Files kann ich direkt linken, dann läufts.

Ich hab noch ein weiteres Phänomen. Wenn ich die Objects aus der Lib
mit -Os übersetze, geht ebenfalls nichts mehr. Gibt es da irgendwelche
Einschränkungen bzgl. Optimierung beim avr-gcc oder beim ATMega128?
Gast #283876
Lesenswert?

Nee, das war nur ein compile Versuch um die Optimierung zu testen. Bei
den eigentlichen Tests mit der Lib verwende ich für alle Files nur -O0,
also komplett ohne Optimierung. Hab auch gerade nochmal
sicherheitshalber nachgeschaut.

Ich hab das Programm mal ordentlich abgespeckt und ausser der Hardware
Initialisierung, Tastaturabfrage und Grafikausgabe ist nun nichts mehr
drin. Delays gibt es in dem Code nirgendwo in Form einer Schleife oder
sowas. Um zeitgesteuerte Tasks abzuarbeiten nutze ich den
Timerinterrupt und einige Zähler. Für die Synchronisierung der
Grafikfunktionen per SPI habe ich Schleifen, die das Statusregister
abfragen (sowas in der Form "while ((*StatusReg) & 0x80);"), aber die
sollten ja nun nicht wegoptimiert werden.

Ich bin echt am verzweifeln mit dem Zeugs. Mit der Lib das kann ch noch
verkraften aber die Optimierung tut weh, da mir der Speicher ausgeht und
den ATMega2560 bekomme ich erst demnächst. (Wenn überhaupt; die Atmel
Jungs haben sich dazu noch nicht genau geäussert aber gesagt, wir
würden die bald bekommen).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren