Forum: Compiler & IDEs WinAvr und der Code vor Main()


von Mario EDUARDO (Gast)


Lesenswert?

Ich habe die LCD Libraray und das Testprogramm von Peter Fleury an mein 
4*20 Display angepaßt (4 bit Mode, PortC) , das will nicht 
funktionieren. Ich habe mir den Code im AS4 angesehen, und verstehe 
nicht was der Code soll. Habe daher 2 Fragen :

1) Kann mir jemand den SourceCode (stub) senden, der vom Linker vor der 
Funktion main() abgearbeitet wird. Habe mir den Source vom WinAvr 
heruntergeladen, kann aber mit den DateiTypen nichts anfangen.

2) Ich habe dieses Forum und Help schon durchsucht, aber
nichts gefunden, wie ich vom Compiler einen AssemblerOutput erhalte.

von Joerg Wunsch (Gast)


Lesenswert?

Der Sourcecode steht in avr-libc/crt1/gcrt1.S.

Teilweise könnten noch Funktionen aus der libgcc.a eingebunden
werden.  Deren Quellen findest Du in gcc/gcc/config/avr/libgcc.S.

(Die genauen Standorte im WinAVR mußt Du Dir bitte suchen.  Ich
hab' hier kein Windows.)

von Peter Fleury (Gast)


Lesenswert?

@Mario,
Was funktioniert denn nicht beim Ansteuern des Display ?
Erscheinen schwarze Klötzchen auf dem Display ?

Läuft die lcd_init() Routine durch ? (Teste mit einer LED Ausgabe nach 
lcd_init() )

Die LCD library lässt sich schlecht in AS4 debuggen, weil AS4 keinen LCD 
controller simulieren kann.

von EDUARDO Mario (Gast)


Lesenswert?

@Peter:
Vielen Dank!!!

Ja, schwarze Klötzchen in jeder 2ten Zeile bei einem
4 zeiligen Display.

Bis zu lcd-init bin ich gar nicht gekommen, da ich mal im AS4 ansehen 
wollte, was sich da so alles abspielt - klar - simulierender Weise! Das 
ist ja ein höchst perverser ObjectCode, bin halt 6502 und 68000er Code 
gewohnt.

Mein nächstes Problem war, daß die Einen in Worten, die Anderen in Byte 
zählen (LST und MAP Dateien). Wußte daher nicht wo ich im AS4 gerade bin 
und wer sich da verlaufen hat.

Soweit mal zum "Dampf ablassen" ...

Du meinst, daß ich nach lcd-init an einem Port eine Led
auf/abdrehen soll? Mach ich. Danke jedenfalls.

von Joerg Wunsch (Gast)


Lesenswert?

Die GNU-Tools zählen komplett in Bytes, während Atmel wohl
teilweise Wortadressierung bevorzugt.  Das läßt sich beides
nicht ändern.  Atmel ist allerdings damit nicht konsequent,
da LPM/SPM wieder byteadressiert sind (was dieses @$!% RAMPZ
eingehandelt hat beim ATmega103/128).

Was vor main() passiert, ist aber in der (avr-libc) Doku einigermaßen
beschrieben. Du mußt das also vielleicht ja nicht unbedingt
komplett in der Simulation einzelschrittweise angucken, um das
Problem Deiner nicht funktionierenden Applikation zu debuggen.

von EDUARDO Mario (Gast)


Lesenswert?

Vielen Dank an alle,
genau das PORTC war teilweise defekt.
Anfängerfehler ...

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
Noch kein Account? Hier anmelden.